<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.c2dl.info/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lexisother</id>
	<title>CCDirectLink - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.c2dl.info/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lexisother"/>
	<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/Special:Contributions/Lexisother"/>
	<updated>2026-05-13T16:22:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=User:Lexisother&amp;diff=264</id>
		<title>User:Lexisother</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=User:Lexisother&amp;diff=264"/>
		<updated>2023-09-14T17:46:47Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add upgrade get effects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:400px; overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;Ascended Gear&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Serene Bubble+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Furious Hothead+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Trackwalker Visor+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Zealous Lamellar+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Pioneer Vest+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Reactive Plate+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Deadly Dancers+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Praetorian Anchors+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Mistwalkers+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Cerberus Fang&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Medusa Veil&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Chiron Vest&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Pegasus Greaves&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Artillery Boots+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Speedy Boom Boots&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Highmeister Gloves&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Highmeister Gloves&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Sunshine Bracer&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Lifefiber Dress&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Meteor Trigger&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Bearseker Claw&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Bearserker Claw&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Asteroid Belt&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Moonwalkers&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Headset TYPE&amp;gt;:3&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Nightfeather Coat&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Singularity Drill&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Lis&#039;mita Cap&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Enlightened Halo&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Very Last Strawhat&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Body Armoire&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Skirmisher+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Unbreaking Fist+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Mantis Whip+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Golden Falcon +&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Golden Falcon+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Brostick of Force+&amp;quot;), 2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:400px; overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;Funny effects&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ig.game.events.callEvent(new ig.Event({&lt;br /&gt;
    steps: [&lt;br /&gt;
        {&lt;br /&gt;
            type: &amp;quot;SHOW_EFFECT&amp;quot;,&lt;br /&gt;
            entity: { player: true },&lt;br /&gt;
            duration: 1,&lt;br /&gt;
            align: &amp;quot;BOTTOM&amp;quot;,&lt;br /&gt;
            rotateFace: 0,&lt;br /&gt;
            flipLeftFace: false,&lt;br /&gt;
            wait: false,&lt;br /&gt;
            waitSkip: 0,&lt;br /&gt;
            actionDetached: false,&lt;br /&gt;
            group: &amp;quot;charge&amp;quot;,&lt;br /&gt;
            fixPos: false,&lt;br /&gt;
            effect: { sheet: &amp;quot;scene.upgrade&amp;quot;, name: &amp;quot;charge&amp;quot; },&lt;br /&gt;
            offset: { x: 0, y: 0, z: 0 }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            type: &amp;quot;WAIT&amp;quot;,&lt;br /&gt;
            time: 4&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            type: &amp;quot;SHOW_EFFECT&amp;quot;,&lt;br /&gt;
            entity: { player: true },&lt;br /&gt;
            duration: 1,&lt;br /&gt;
            align: &amp;quot;BOTTOM&amp;quot;,&lt;br /&gt;
            rotateFace: 0,&lt;br /&gt;
            flipLeftFace: false,&lt;br /&gt;
            wait: false,&lt;br /&gt;
            waitSkip: 0,&lt;br /&gt;
            actionDetached: false,&lt;br /&gt;
            group: &amp;quot;charge&amp;quot;,&lt;br /&gt;
            fixPos: false,&lt;br /&gt;
            effect: { sheet: &amp;quot;scene.upgrade&amp;quot;, name: &amp;quot;chargeBlow&amp;quot; },&lt;br /&gt;
            offset: { x: 0, y: 0, z: 0 }&lt;br /&gt;
        }&lt;br /&gt;
    ] &lt;br /&gt;
}), ig.EventRunType.INTERRUPTABLE);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=User:Lexisother&amp;diff=263</id>
		<title>User:Lexisother</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=User:Lexisother&amp;diff=263"/>
		<updated>2023-07-10T17:43:20Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add the ascended gear giving code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:400px; overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;Ascended Gear&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Serene Bubble+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Furious Hothead+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Trackwalker Visor+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Zealous Lamellar+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Pioneer Vest+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Reactive Plate+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Deadly Dancers+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Praetorian Anchors+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Mistwalkers+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Cerberus Fang&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Medusa Veil&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Chiron Vest&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Pegasus Greaves&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Artillery Boots+&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Speedy Boom Boots&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Highmeister Gloves&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Highmeister Gloves&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Sunshine Bracer&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Lifefiber Dress&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Meteor Trigger&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Bearseker Claw&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Bearserker Claw&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Asteroid Belt&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Moonwalkers&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Headset TYPE&amp;gt;:3&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Nightfeather Coat&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Singularity Drill&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Lis&#039;mita Cap&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Enlightened Halo&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Very Last Strawhat&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Body Armoire&amp;quot;), 1)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Skirmisher+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Unbreaking Fist+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Mantis Whip+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Golden Falcon +&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Golden Falcon+&amp;quot;), 2)&lt;br /&gt;
sc.model.player.addItem(sc.inventory.items.findIndex(i =&amp;gt; i.name.en_US === &amp;quot;Brostick of Force+&amp;quot;), 2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Main_Page&amp;diff=262</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Main_Page&amp;diff=262"/>
		<updated>2023-07-05T11:28:44Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Link to some important articles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the CCDirectLink wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki contains information and a documentation about modding [https://cross-code.com CrossCode].&lt;br /&gt;
&lt;br /&gt;
You probably want to start off with installing our modloader, [[CCLoader]]. Instructions can be found [[CCLoader#Installation|here]].&lt;br /&gt;
&lt;br /&gt;
Interested in installing mods? Check [[Installing mods|here]].&lt;br /&gt;
&lt;br /&gt;
Interested in making your own mods? Check [[CrossCode Modding Tutorial|here]].&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Big/doc&amp;diff=261</id>
		<title>Template:Big/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Big/doc&amp;diff=261"/>
		<updated>2023-05-29T16:36:30Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Documentation description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;text&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The text to show.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Show some text as 1.2x its usual size.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Big/doc&amp;diff=260</id>
		<title>Template:Big/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Big/doc&amp;diff=260"/>
		<updated>2023-05-29T16:35:01Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;text&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The text to show.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note&amp;diff=259</id>
		<title>Template:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note&amp;diff=259"/>
		<updated>2023-05-29T16:30:04Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Use Doc template instead of manual inclusion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if: {{#if:{{{1|{{{text|}}}}}}|{{{1|{{{text|}}}}}}|{{#if:&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;|demo|{{{demo|}}}}} }} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;[[File:Ui note {{{2|{{{type|info}}}}}}.svg|24px]]{{{1|{{{text}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:Ui note reminder.svg|18px|alt=Note|link=]]&amp;amp;nbsp;&#039;&#039;&#039;Note:&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|Foo}}&lt;br /&gt;
{{Note|Foo|info}}&lt;br /&gt;
{{Note|Foo|reminder}}&lt;br /&gt;
{{Note|Foo|alert}}&lt;br /&gt;
{{Note|Foo|error}}&lt;br /&gt;
{{Note}} Loose test&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|Foo|inline=1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|Foo}}&lt;br /&gt;
{{Note|Foo|info}}&lt;br /&gt;
{{Note|Foo|reminder}}&lt;br /&gt;
{{Note|Foo|warn}}&lt;br /&gt;
{{Note|Foo|error}}&lt;br /&gt;
{{Note}} Loose test&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|Foo|inline=1}}&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Templates:{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData_header&amp;diff=258</id>
		<title>Template:TemplateData header</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData_header&amp;diff=258"/>
		<updated>2023-05-29T16:29:38Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Remove trailing semicolon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;templatedata-header&amp;quot;&amp;gt;{{#if:{{{noheader|}}}|&amp;lt;!--&lt;br /&gt;
 noheader:&lt;br /&gt;
--&amp;gt;|&amp;lt;!--&lt;br /&gt;
 +header:&lt;br /&gt;
--&amp;gt;This is the {{#if:{{{nolink|}}}|&amp;lt;!--&lt;br /&gt;
  +header, nolink TD&lt;br /&gt;
  --&amp;gt;TemplateData|&amp;lt;!--&lt;br /&gt;
  +header,  +link [[TD]]; DEFAULT:&lt;br /&gt;
--&amp;gt;[[Wikipedia:TemplateData|TemplateData]]}}&amp;lt;!--&lt;br /&gt;
   e.o. #if:nolink; DEFAULT:&lt;br /&gt;
--&amp;gt; documentation for this template used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools.&amp;lt;!--&lt;br /&gt;
   e.o. #if:noheader&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TemplateData for {{{1|{{BASEPAGENAME}}}}}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
 check parameters&lt;br /&gt;
--&amp;gt;{{#invoke:Check for unknown parameters|check&lt;br /&gt;
|unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}}&lt;br /&gt;
|template=Template:TemplateData header&lt;br /&gt;
|1 |nolink |noheader&lt;br /&gt;
|preview=&amp;lt;div class=&amp;quot;error&amp;quot; style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;Unknown parameter &#039;_VALUE_&#039; in [[Template:TemplateData header]].&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{template other|{{sandbox other||&lt;br /&gt;
[[Category:Templates using TemplateData]]&lt;br /&gt;
&lt;br /&gt;
}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData_header&amp;diff=257</id>
		<title>Template:TemplateData header</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData_header&amp;diff=257"/>
		<updated>2023-05-29T16:26:21Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Remove the parameter usage link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;templatedata-header&amp;quot;&amp;gt;{{#if:{{{noheader|}}}|&amp;lt;!--&lt;br /&gt;
 noheader:&lt;br /&gt;
--&amp;gt;|&amp;lt;!--&lt;br /&gt;
 +header:&lt;br /&gt;
--&amp;gt;This is the {{#if:{{{nolink|}}}|&amp;lt;!--&lt;br /&gt;
  +header, nolink TD&lt;br /&gt;
  --&amp;gt;TemplateData|&amp;lt;!--&lt;br /&gt;
  +header,  +link [[TD]]; DEFAULT:&lt;br /&gt;
--&amp;gt;[[Wikipedia:TemplateData|TemplateData]]}}&amp;lt;!--&lt;br /&gt;
   e.o. #if:nolink; DEFAULT:&lt;br /&gt;
--&amp;gt; documentation for this template used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools;&amp;lt;!--&lt;br /&gt;
   e.o. #if:noheader&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TemplateData for {{{1|{{BASEPAGENAME}}}}}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
 check parameters&lt;br /&gt;
--&amp;gt;{{#invoke:Check for unknown parameters|check&lt;br /&gt;
|unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}}&lt;br /&gt;
|template=Template:TemplateData header&lt;br /&gt;
|1 |nolink |noheader&lt;br /&gt;
|preview=&amp;lt;div class=&amp;quot;error&amp;quot; style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;Unknown parameter &#039;_VALUE_&#039; in [[Template:TemplateData header]].&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{template other|{{sandbox other||&lt;br /&gt;
[[Category:Templates using TemplateData]]&lt;br /&gt;
&lt;br /&gt;
}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=256</id>
		<title>Template:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=256"/>
		<updated>2023-05-29T16:09:24Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Vertically center the note text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Taken from https://www.mediawiki.org/w/index.php?title=Template:Note/styles.css&amp;amp;oldid=4199118 */&lt;br /&gt;
.note {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 10px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.note a {&lt;br /&gt;
    padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #f6efe5;&lt;br /&gt;
	border-color: #ac6600;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note&amp;diff=255</id>
		<title>Template:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note&amp;diff=255"/>
		<updated>2023-05-29T13:10:36Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Inline icons within the note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if: {{#if:{{{1|{{{text|}}}}}}|{{{1|{{{text|}}}}}}|{{#if:&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;|demo|{{{demo|}}}}} }} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;[[File:Ui note {{{2|{{{type|info}}}}}}.svg|24px]]{{{1|{{{text}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:Ui note reminder.svg|18px|alt=Note|link=]]&amp;amp;nbsp;&#039;&#039;&#039;Note:&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|Foo}}&lt;br /&gt;
{{Note|Foo|info}}&lt;br /&gt;
{{Note|Foo|reminder}}&lt;br /&gt;
{{Note|Foo|alert}}&lt;br /&gt;
{{Note|Foo|error}}&lt;br /&gt;
{{Note}} Loose test&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|Foo|inline=1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|Foo}}&lt;br /&gt;
{{Note|Foo|info}}&lt;br /&gt;
{{Note|Foo|reminder}}&lt;br /&gt;
{{Note|Foo|warn}}&lt;br /&gt;
{{Note|Foo|error}}&lt;br /&gt;
{{Note}} Loose test&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|Foo|inline=1}}&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
{{Note/doc}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Templates:{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=254</id>
		<title>Template:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=254"/>
		<updated>2023-05-29T13:09:14Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Offset the note content from the icon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Taken from https://www.mediawiki.org/w/index.php?title=Template:Note/styles.css&amp;amp;oldid=4199118 */&lt;br /&gt;
.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 10px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.note a {&lt;br /&gt;
    padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #f6efe5;&lt;br /&gt;
	border-color: #ac6600;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=253</id>
		<title>Template:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=253"/>
		<updated>2023-05-29T13:05:31Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Stop using background-image for adding icons&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Taken from https://www.mediawiki.org/w/index.php?title=Template:Note/styles.css&amp;amp;oldid=4199118 */&lt;br /&gt;
.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 10px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #f6efe5;&lt;br /&gt;
	border-color: #ac6600;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_notice.svg&amp;diff=252</id>
		<title>File:Ui note notice.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_notice.svg&amp;diff=252"/>
		<updated>2023-05-29T12:47:00Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Lexisother moved page File:Ui note notice.svg to File:Ui note error.svg: Change name for new Note structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[File:Ui note error.svg]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_error.svg&amp;diff=251</id>
		<title>File:Ui note error.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_error.svg&amp;diff=251"/>
		<updated>2023-05-29T12:47:00Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Lexisother moved page File:Ui note notice.svg to File:Ui note error.svg: Change name for new Note structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (MIT) ==&lt;br /&gt;
&lt;br /&gt;
Copyright © 2011–2018 [https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt OOjs UI Team and other contributors]&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
The Software is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_alert.svg&amp;diff=250</id>
		<title>File:Ui note alert.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_alert.svg&amp;diff=250"/>
		<updated>2023-05-29T12:46:58Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Lexisother moved page File:Ui note alert.svg to File:Ui note warn.svg: Change name for new Note structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[File:Ui note warn.svg]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_warn.svg&amp;diff=249</id>
		<title>File:Ui note warn.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_warn.svg&amp;diff=249"/>
		<updated>2023-05-29T12:46:58Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Lexisother moved page File:Ui note alert.svg to File:Ui note warn.svg: Change name for new Note structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (MIT) ==&lt;br /&gt;
&lt;br /&gt;
Copyright © 2011–2018 [https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt OOjs UI Team and other contributors]&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
The Software is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=248</id>
		<title>Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=248"/>
		<updated>2023-05-26T16:18:04Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Change heading sizes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This article needs editing!!!&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is patching? =&lt;br /&gt;
&lt;br /&gt;
In the scope modding, patching is changing the original game content in any way.&lt;br /&gt;
&lt;br /&gt;
= How do I patch game files? =&lt;br /&gt;
&lt;br /&gt;
There is more than one way to patch the game. This page will walk you through the various ways to patch.&lt;br /&gt;
&lt;br /&gt;
== Asset Replacement ==&lt;br /&gt;
&lt;br /&gt;
This is the most basic type of patching (anyone can do it).&lt;br /&gt;
&lt;br /&gt;
This is a standard modloader feature that allows you to replace any file the game loads with your own.&lt;br /&gt;
&lt;br /&gt;
=== Process ===&lt;br /&gt;
&lt;br /&gt;
Inside your mod folder, create a folder called &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mod-assets-folder.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Decide what file you want to replace. For this tutorial, I will be showing you how to replace Lea&#039;s portraits.&lt;br /&gt;
&lt;br /&gt;
Find the original relative path to asset of interest.&lt;br /&gt;
&lt;br /&gt;
[[File:Lea-face-path.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
All you have to do is now mimic the folder structure.&lt;br /&gt;
&lt;br /&gt;
In this example, two folders need to be created.&lt;br /&gt;
&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; folder in your mod, create a &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder. Inside the &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder, create a &amp;lt;code&amp;gt;face&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Finally, add the file you want to replace (your own &amp;lt;code&amp;gt;lea.png&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
It should end up looking something like this.&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-path-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-folder-contents-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
That is it!&lt;br /&gt;
&lt;br /&gt;
You can find more examples in the [[github:CCDirectLink/CCAssetSwaps]] repo.&lt;br /&gt;
&lt;br /&gt;
* Used faceless Lea mod for some of the demonstration&lt;br /&gt;
&lt;br /&gt;
== JSON Patching (Object Patching) ==&lt;br /&gt;
&lt;br /&gt;
Note: This requires some know of the JSON format and some programming concepts&lt;br /&gt;
&lt;br /&gt;
As the majority of the game assets are json files, this is really useful to know about.&lt;br /&gt;
&lt;br /&gt;
What this allows you to do is modify any json file without doing a file replacement.&lt;br /&gt;
&lt;br /&gt;
The same ideas apply as assets override, except the file will have &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; added to the full file name.&lt;br /&gt;
&lt;br /&gt;
You need to have file extensions visible in order to modify it.&lt;br /&gt;
&lt;br /&gt;
=== Process ===&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you want to patch a file &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt; with this as the contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;xp&amp;quot;: 500&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your mod is located at &amp;lt;code&amp;gt;assets/mods/my-mod/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would create a file with the filepath &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To replace &amp;quot;storage.level&amp;quot; with 200, &amp;lt;code&amp;gt;test.json.patch&amp;lt;/code&amp;gt; would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add &amp;quot;storage.name&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Shizuka&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object patching is useful for adding new properties and modifying existing ones.&lt;br /&gt;
&lt;br /&gt;
Weakness: - Inability to removal properties - Arrays are hard to patch&lt;br /&gt;
&lt;br /&gt;
== Patch Steps ==&lt;br /&gt;
&lt;br /&gt;
Patch Steps is another way to perform json file Patching. It is more powerful than Object Patching.&lt;br /&gt;
&lt;br /&gt;
The only difference between Object Patching and Patch Steps is the format of the &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
We will be using the same sample json file used to demonstrate how Object Patching works.&lt;br /&gt;
&lt;br /&gt;
Location: &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of all the valid patch steps.&lt;br /&gt;
&lt;br /&gt;
=== ENTER ===&lt;br /&gt;
&lt;br /&gt;
This changes the context of a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
    &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
        &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;saves&amp;quot;, 0]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXIT ===&lt;br /&gt;
&lt;br /&gt;
For every &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;, there should be at least one &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; undos an &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 1&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For demonstration purposes, this is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;user&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step will produce the internal result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: 20&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second step will undo the first leading to the initial state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SET_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INIT_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change to the data because &amp;quot;storage&amp;quot; already exists.&lt;br /&gt;
&lt;br /&gt;
Changing &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage2&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;storage2&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REMOVE_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;REMOVE_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the patch will result in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ADD_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;a&amp;quot;&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 4&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 0&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first step, the internal state will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the second step, the number 4 will be pushed to the end of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3,4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the third step, the number 0 will be added to the start of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[0,1,2,3,4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step will revert the value of focus to the initial object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [0,1,2,3,4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IMPORT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;game:data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step would load &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; then merge it with the current value resulting in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    ,&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; had patches associated with it, it would be applied before being merged.&lt;br /&gt;
&lt;br /&gt;
Another feature is loading json files inside the mod directory and merging. No patches to the loaded file will be done if &amp;lt;code&amp;gt;mod:&amp;lt;/code&amp;gt; is specified.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: [&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;],&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First it will load &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then it will walk the path specified.&lt;br /&gt;
&lt;br /&gt;
Initial loaded file internal representation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
        &amp;quot;3&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;2&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;3&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;3&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, it will add a key &amp;quot;y&amp;quot; with the value that resulted from the path walk (4).&lt;br /&gt;
&lt;br /&gt;
So the overall result will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;y&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;index&amp;quot; and &amp;quot;path&amp;quot; options are optional.&lt;br /&gt;
&lt;br /&gt;
=== INCLUDE ===&lt;br /&gt;
&lt;br /&gt;
The purpose of &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is to allow external Object Patching or PatchSteps to be performed.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is like setting the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is used as an organization method.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;b&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [1,2,3]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;a&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of PatchStep files as its own room. What include does is generate a new room to perform some special operation. Rooms do not intefere with each other, they just modify the data.&lt;br /&gt;
&lt;br /&gt;
=== FOR_IN ===&lt;br /&gt;
&lt;br /&gt;
This PatchStep is useful for combining repeated set of PatchSteps with only slightly variations in input.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__INDEX__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [1,2,3,4],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__INDEX__-id&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__INDEX__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1-id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;2-id&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
    &amp;quot;3-id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;4-id&amp;quot;: &amp;quot;4&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;values&amp;quot;: [{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Bob&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Joe&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 2&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Bob&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;Joe&amp;quot;: &amp;quot;2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
    }, {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change. All this will do is create an internal key-value storage that looks like this:&lt;br /&gt;
&lt;br /&gt;
{ &amp;quot;alias-a&amp;quot;: 2, &amp;quot;alias-b&amp;quot;: [3], &amp;quot;alias-c&amp;quot;: { &amp;quot;d&amp;quot;: 4 } }&lt;br /&gt;
&lt;br /&gt;
=== MERGE_CONTENT ===&lt;br /&gt;
&lt;br /&gt;
With the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following patch step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;MERGE_CONTENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;c&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MERGE_CONTENT&amp;lt;/code&amp;gt; would modify the data to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For an array, it would work the same way - effectively acting as multiple &amp;lt;code&amp;gt;ADD_ARRAY_ELEMENT&amp;lt;/code&amp;gt; steps being executed at the end of the array.&lt;br /&gt;
&lt;br /&gt;
=== PASTE ===&lt;br /&gt;
&lt;br /&gt;
This command relies on COPY.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {}&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;PASTE&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;saved&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
        &amp;quot;c&amp;quot;: {&lt;br /&gt;
            &amp;quot;d&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CALL ===&lt;br /&gt;
&lt;br /&gt;
This step allows you to call a custom step.&lt;br /&gt;
&lt;br /&gt;
First, you define a custom step.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
  |text=The following code must be ran BEFORE prestart! That being during plugin, preload, or postload.&lt;br /&gt;
  |type=reminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
simplifyResources.patchSteps.callable.register(&amp;quot;YOUR_ID&amp;quot;, (state, args) =&amp;gt; {&lt;br /&gt;
  console.log(args);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in your patch file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;CALL&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;YOUR_ID&amp;quot;,&lt;br /&gt;
    &amp;quot;args&amp;quot;: {&lt;br /&gt;
        &amp;quot;someArg&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would log &amp;lt;code&amp;gt;{ someArg: 1 }&amp;lt;/code&amp;gt; to the console whenever the step is called.&lt;br /&gt;
&lt;br /&gt;
If you think patch steps are lacking in some way, &amp;lt;code&amp;gt;CALL&amp;lt;/code&amp;gt; allows you to define your own steps that process your args in some way without having to contribute back to the library.&lt;br /&gt;
&lt;br /&gt;
=== DEBUG ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: false&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PatchStep turns Debug Mode on or off.&lt;br /&gt;
&lt;br /&gt;
=== COMMENT ===&lt;br /&gt;
&lt;br /&gt;
Debug mode must be on for this PatchStep to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;This is a comment&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
        &amp;quot;data&amp;quot;: 3&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will first display &amp;lt;code&amp;gt;This is a comment&amp;lt;/code&amp;gt; in the DevTools console. It will then display &amp;lt;code&amp;gt;{data: 3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=247</id>
		<title>Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=247"/>
		<updated>2023-05-25T20:08:06Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: /* CALL */ Move the note to a real note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This article needs editing!!!&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is patching? =&lt;br /&gt;
&lt;br /&gt;
In the scope modding, patching is changing the original game content in any way.&lt;br /&gt;
&lt;br /&gt;
= How do I patch game files? =&lt;br /&gt;
&lt;br /&gt;
There is more than one way to patch the game. This page will walk you through the various ways to patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Asset Replacement =&lt;br /&gt;
&lt;br /&gt;
This is the most basic type of patching (anyone can do it).&lt;br /&gt;
&lt;br /&gt;
This is a standard modloader feature that allows you to replace any file the game loads with your own.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Inside your mod folder, create a folder called &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mod-assets-folder.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Decide what file you want to replace. For this tutorial, I will be showing you how to replace Lea&#039;s portraits.&lt;br /&gt;
&lt;br /&gt;
Find the original relative path to asset of interest.&lt;br /&gt;
&lt;br /&gt;
[[File:Lea-face-path.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
All you have to do is now mimic the folder structure.&lt;br /&gt;
&lt;br /&gt;
In this example, two folders need to be created.&lt;br /&gt;
&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; folder in your mod, create a &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder. Inside the &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder, create a &amp;lt;code&amp;gt;face&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Finally, add the file you want to replace (your own &amp;lt;code&amp;gt;lea.png&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
It should end up looking something like this.&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-path-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-folder-contents-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
That is it!&lt;br /&gt;
&lt;br /&gt;
You can find more examples in the [[github:CCDirectLink/CCAssetSwaps]] repo.&lt;br /&gt;
&lt;br /&gt;
* Used faceless Lea mod for some of the demonstration&lt;br /&gt;
&lt;br /&gt;
= JSON Patching (Object Patching) =&lt;br /&gt;
&lt;br /&gt;
Note: This requires some know of the JSON format and some programming concepts&lt;br /&gt;
&lt;br /&gt;
As the majority of the game assets are json files, this is really useful to know about.&lt;br /&gt;
&lt;br /&gt;
What this allows you to do is modify any json file without doing a file replacement.&lt;br /&gt;
&lt;br /&gt;
The same ideas apply as assets override, except the file will have &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; added to the full file name.&lt;br /&gt;
&lt;br /&gt;
You need to have file extensions visible in order to modify it.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you want to patch a file &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt; with this as the contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;xp&amp;quot;: 500&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your mod is located at &amp;lt;code&amp;gt;assets/mods/my-mod/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would create a file with the filepath &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To replace &amp;quot;storage.level&amp;quot; with 200, &amp;lt;code&amp;gt;test.json.patch&amp;lt;/code&amp;gt; would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add &amp;quot;storage.name&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Shizuka&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object patching is useful for adding new properties and modifying existing ones.&lt;br /&gt;
&lt;br /&gt;
Weakness: - Inability to removal properties - Arrays are hard to patch&lt;br /&gt;
&lt;br /&gt;
= Patch Steps =&lt;br /&gt;
&lt;br /&gt;
Patch Steps is another way to perform json file Patching. It is more powerful than Object Patching.&lt;br /&gt;
&lt;br /&gt;
The only difference between Object Patching and Patch Steps is the format of the &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
We will be using the same sample json file used to demonstrate how Object Patching works.&lt;br /&gt;
&lt;br /&gt;
Location: &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Appliers ==&lt;br /&gt;
&lt;br /&gt;
An Applier is a Patch Step command.&lt;br /&gt;
&lt;br /&gt;
== Patch Step Appliers ==&lt;br /&gt;
&lt;br /&gt;
=== ENTER ===&lt;br /&gt;
&lt;br /&gt;
This changes the context of a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
    &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
        &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;saves&amp;quot;, 0]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXIT ===&lt;br /&gt;
&lt;br /&gt;
For every &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;, there should be at least one &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; undos an &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 1&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For demonstration purposes, this is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;user&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step will produce the internal result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: 20&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second step will undo the first leading to the initial state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SET_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INIT_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change to the data because &amp;quot;storage&amp;quot; already exists.&lt;br /&gt;
&lt;br /&gt;
Changing &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage2&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;storage2&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REMOVE_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;REMOVE_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the patch will result in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ADD_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;a&amp;quot;&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 4&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 0&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first step, the internal state will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the second step, the number 4 will be pushed to the end of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3,4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the third step, the number 0 will be added to the start of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[0,1,2,3,4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step will revert the value of focus to the initial object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [0,1,2,3,4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IMPORT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;game:data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step would load &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; then merge it with the current value resulting in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    ,&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; had patches associated with it, it would be applied before being merged.&lt;br /&gt;
&lt;br /&gt;
Another feature is loading json files inside the mod directory and merging. No patches to the loaded file will be done if &amp;lt;code&amp;gt;mod:&amp;lt;/code&amp;gt; is specified.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: [&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;],&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First it will load &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then it will walk the path specified.&lt;br /&gt;
&lt;br /&gt;
Initial loaded file internal representation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
        &amp;quot;3&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;2&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;3&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;3&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, it will add a key &amp;quot;y&amp;quot; with the value that resulted from the path walk (4).&lt;br /&gt;
&lt;br /&gt;
So the overall result will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;y&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;index&amp;quot; and &amp;quot;path&amp;quot; options are optional.&lt;br /&gt;
&lt;br /&gt;
=== INCLUDE ===&lt;br /&gt;
&lt;br /&gt;
The purpose of &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is to allow external Object Patching or PatchSteps to be performed.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is like setting the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is used as an organization method.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;b&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [1,2,3]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;a&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of PatchStep files as its own room. What include does is generate a new room to perform some special operation. Rooms do not intefere with each other, they just modify the data.&lt;br /&gt;
&lt;br /&gt;
=== FOR_IN ===&lt;br /&gt;
&lt;br /&gt;
This PatchStep is useful for combining repeated set of PatchSteps with only slightly variations in input.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__INDEX__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [1,2,3,4],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__INDEX__-id&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__INDEX__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1-id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;2-id&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
    &amp;quot;3-id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;4-id&amp;quot;: &amp;quot;4&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;values&amp;quot;: [{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Bob&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Joe&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 2&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Bob&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;Joe&amp;quot;: &amp;quot;2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
    }, {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change. All this will do is create an internal key-value storage that looks like this:&lt;br /&gt;
&lt;br /&gt;
{ &amp;quot;alias-a&amp;quot;: 2, &amp;quot;alias-b&amp;quot;: [3], &amp;quot;alias-c&amp;quot;: { &amp;quot;d&amp;quot;: 4 } }&lt;br /&gt;
&lt;br /&gt;
=== MERGE_CONTENT ===&lt;br /&gt;
&lt;br /&gt;
With the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following patch step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;MERGE_CONTENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;c&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MERGE_CONTENT&amp;lt;/code&amp;gt; would modify the data to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For an array, it would work the same way - effectively acting as multiple &amp;lt;code&amp;gt;ADD_ARRAY_ELEMENT&amp;lt;/code&amp;gt; steps being executed at the end of the array.&lt;br /&gt;
&lt;br /&gt;
=== PASTE ===&lt;br /&gt;
&lt;br /&gt;
This command relies on COPY.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {}&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;PASTE&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;saved&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
        &amp;quot;c&amp;quot;: {&lt;br /&gt;
            &amp;quot;d&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CALL ===&lt;br /&gt;
&lt;br /&gt;
This step allows you to call a custom step.&lt;br /&gt;
&lt;br /&gt;
First, you define a custom step.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
  |text=The following code must be ran BEFORE prestart! That being during plugin, preload, or postload.&lt;br /&gt;
  |type=reminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
simplifyResources.patchSteps.callable.register(&amp;quot;YOUR_ID&amp;quot;, (state, args) =&amp;gt; {&lt;br /&gt;
  console.log(args);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in your patch file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;CALL&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;YOUR_ID&amp;quot;,&lt;br /&gt;
    &amp;quot;args&amp;quot;: {&lt;br /&gt;
        &amp;quot;someArg&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would log &amp;lt;code&amp;gt;{ someArg: 1 }&amp;lt;/code&amp;gt; to the console whenever the step is called.&lt;br /&gt;
&lt;br /&gt;
If you think patch steps are lacking in some way, &amp;lt;code&amp;gt;CALL&amp;lt;/code&amp;gt; allows you to define your own steps that process your args in some way without having to contribute back to the library.&lt;br /&gt;
&lt;br /&gt;
=== DEBUG ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: false&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PatchStep turns Debug Mode on or off.&lt;br /&gt;
&lt;br /&gt;
=== COMMENT ===&lt;br /&gt;
&lt;br /&gt;
Debug mode must be on for this PatchStep to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;This is a comment&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
        &amp;quot;data&amp;quot;: 3&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will first display &amp;lt;code&amp;gt;This is a comment&amp;lt;/code&amp;gt; in the DevTools console. It will then display &amp;lt;code&amp;gt;{data: 3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note/doc&amp;diff=246</id>
		<title>Template:Note/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note/doc&amp;diff=246"/>
		<updated>2023-05-25T19:48:06Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add documentation for the Note template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&lt;br /&gt;
{{TemplateData header}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Show a note in a box (e.g. a top-of-the-page warning).&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;text&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Text&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Informative note.&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;inline&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Inline formatting&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Show the template without line breaks before and after it.&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;2&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Type&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;One of “info”, “reminder”, “warn”, or “error”. This setting affects the color and icon.&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;info&amp;quot;,&lt;br /&gt;
				&amp;quot;reminder&amp;quot;,&lt;br /&gt;
				&amp;quot;warn&amp;quot;,&lt;br /&gt;
				&amp;quot;error&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;inline&amp;quot;,&lt;br /&gt;
		&amp;quot;type&amp;quot;,&lt;br /&gt;
		&amp;quot;1&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Notice templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Documentation_subpage&amp;diff=245</id>
		<title>Template:Documentation subpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Documentation_subpage&amp;diff=245"/>
		<updated>2023-05-25T19:46:42Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}&lt;br /&gt;
     | &amp;lt;!--(this template has been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#ifeq:{{{doc-notice|show}}} |show&lt;br /&gt;
          | {{Note&lt;br /&gt;
             |&lt;br /&gt;
&#039;&#039;&#039;This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]] for {{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}&#039;&#039;&#039;.&amp;lt;br /&amp;gt;It contains usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}. &lt;br /&gt;
            }}&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#if:{{{inhibit|}}} |&amp;lt;!--(don&#039;t categorize)--&amp;gt;&lt;br /&gt;
          |   &amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
               --&amp;gt;{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}&lt;br /&gt;
                   | [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]&lt;br /&gt;
                   | [[Category:Documentation subpages without corresponding pages]]&lt;br /&gt;
                  }}&amp;lt;!--&lt;br /&gt;
           --&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
(completing initial #ifeq: at start of template:)&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
     | &amp;lt;!--(this template has not been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
    }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note&amp;diff=244</id>
		<title>Template:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note&amp;diff=244"/>
		<updated>2023-05-25T19:43:58Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Created page with &amp;quot;&amp;lt;onlyinclude&amp;gt;{{#if: {{#if:{{{1|{{{text|}}}}}}|{{{1|{{{text|}}}}}}|{{#if:&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;|demo|{{{demo|}}}}} }} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}     |gotcha=error     |=info     |#default={{{2|{{{type|}}}}}}     }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;{{{1|{{{text}}}}}}&amp;lt;/div&amp;gt;   | link=&amp;amp;nbsp;&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; }}&amp;lt;!-- --&amp;gt;&amp;lt;/onlyinclude&amp;gt; {{documentation|...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if: {{#if:{{{1|{{{text|}}}}}}|{{{1|{{{text|}}}}}}|{{#if:&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;|demo|{{{demo|}}}}} }} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;{{{1|{{{text}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:Ui note reminder.svg|18px|alt=Note|link=]]&amp;amp;nbsp;&#039;&#039;&#039;Note:&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|Foo}}&lt;br /&gt;
{{Note|Foo|info}}&lt;br /&gt;
{{Note|Foo|reminder}}&lt;br /&gt;
{{Note|Foo|alert}}&lt;br /&gt;
{{Note|Foo|error}}&lt;br /&gt;
{{Note}} Loose test&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|Foo|inline=1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|Foo}}&lt;br /&gt;
{{Note|Foo|info}}&lt;br /&gt;
{{Note|Foo|reminder}}&lt;br /&gt;
{{Note|Foo|warn}}&lt;br /&gt;
{{Note|Foo|error}}&lt;br /&gt;
{{Note}} Loose test&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|Foo|inline=1}}&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
{{Note/doc}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Templates:{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Test_Template_Info-Icon_-_Version_(2).svg&amp;diff=243</id>
		<title>File:Test Template Info-Icon - Version (2).svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Test_Template_Info-Icon_-_Version_(2).svg&amp;diff=243"/>
		<updated>2023-05-25T19:26:27Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add the license&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (CC0) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Creative Commons Legal Code&lt;br /&gt;
&lt;br /&gt;
CC0 1.0 Universal&lt;br /&gt;
&lt;br /&gt;
    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE&lt;br /&gt;
    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN&lt;br /&gt;
    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS&lt;br /&gt;
    INFORMATION ON AN &amp;quot;AS-IS&amp;quot; BASIS. CREATIVE COMMONS MAKES NO WARRANTIES&lt;br /&gt;
    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS&lt;br /&gt;
    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM&lt;br /&gt;
    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED&lt;br /&gt;
    HEREUNDER.&lt;br /&gt;
&lt;br /&gt;
Statement of Purpose&lt;br /&gt;
&lt;br /&gt;
The laws of most jurisdictions throughout the world automatically confer&lt;br /&gt;
exclusive Copyright and Related Rights (defined below) upon the creator&lt;br /&gt;
and subsequent owner(s) (each and all, an &amp;quot;owner&amp;quot;) of an original work of&lt;br /&gt;
authorship and/or a database (each, a &amp;quot;Work&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Certain owners wish to permanently relinquish those rights to a Work for&lt;br /&gt;
the purpose of contributing to a commons of creative, cultural and&lt;br /&gt;
scientific works (&amp;quot;Commons&amp;quot;) that the public can reliably and without fear&lt;br /&gt;
of later claims of infringement build upon, modify, incorporate in other&lt;br /&gt;
works, reuse and redistribute as freely as possible in any form whatsoever&lt;br /&gt;
and for any purposes, including without limitation commercial purposes.&lt;br /&gt;
These owners may contribute to the Commons to promote the ideal of a free&lt;br /&gt;
culture and the further production of creative, cultural and scientific&lt;br /&gt;
works, or to gain reputation or greater distribution for their Work in&lt;br /&gt;
part through the use and efforts of others.&lt;br /&gt;
&lt;br /&gt;
For these and/or other purposes and motivations, and without any&lt;br /&gt;
expectation of additional consideration or compensation, the person&lt;br /&gt;
associating CC0 with a Work (the &amp;quot;Affirmer&amp;quot;), to the extent that he or she&lt;br /&gt;
is an owner of Copyright and Related Rights in the Work, voluntarily&lt;br /&gt;
elects to apply CC0 to the Work and publicly distribute the Work under its&lt;br /&gt;
terms, with knowledge of his or her Copyright and Related Rights in the&lt;br /&gt;
Work and the meaning and intended legal effect of CC0 on those rights.&lt;br /&gt;
&lt;br /&gt;
1. Copyright and Related Rights. A Work made available under CC0 may be&lt;br /&gt;
protected by copyright and related or neighboring rights (&amp;quot;Copyright and&lt;br /&gt;
Related Rights&amp;quot;). Copyright and Related Rights include, but are not&lt;br /&gt;
limited to, the following:&lt;br /&gt;
&lt;br /&gt;
  i. the right to reproduce, adapt, distribute, perform, display,&lt;br /&gt;
     communicate, and translate a Work;&lt;br /&gt;
 ii. moral rights retained by the original author(s) and/or performer(s);&lt;br /&gt;
iii. publicity and privacy rights pertaining to a person&#039;s image or&lt;br /&gt;
     likeness depicted in a Work;&lt;br /&gt;
 iv. rights protecting against unfair competition in regards to a Work,&lt;br /&gt;
     subject to the limitations in paragraph 4(a), below;&lt;br /&gt;
  v. rights protecting the extraction, dissemination, use and reuse of data&lt;br /&gt;
     in a Work;&lt;br /&gt;
 vi. database rights (such as those arising under Directive 96/9/EC of the&lt;br /&gt;
     European Parliament and of the Council of 11 March 1996 on the legal&lt;br /&gt;
     protection of databases, and under any national implementation&lt;br /&gt;
     thereof, including any amended or successor version of such&lt;br /&gt;
     directive); and&lt;br /&gt;
vii. other similar, equivalent or corresponding rights throughout the&lt;br /&gt;
     world based on applicable law or treaty, and any national&lt;br /&gt;
     implementations thereof.&lt;br /&gt;
&lt;br /&gt;
2. Waiver. To the greatest extent permitted by, but not in contravention&lt;br /&gt;
of, applicable law, Affirmer hereby overtly, fully, permanently,&lt;br /&gt;
irrevocably and unconditionally waives, abandons, and surrenders all of&lt;br /&gt;
Affirmer&#039;s Copyright and Related Rights and associated claims and causes&lt;br /&gt;
of action, whether now known or unknown (including existing as well as&lt;br /&gt;
future claims and causes of action), in the Work (i) in all territories&lt;br /&gt;
worldwide, (ii) for the maximum duration provided by applicable law or&lt;br /&gt;
treaty (including future time extensions), (iii) in any current or future&lt;br /&gt;
medium and for any number of copies, and (iv) for any purpose whatsoever,&lt;br /&gt;
including without limitation commercial, advertising or promotional&lt;br /&gt;
purposes (the &amp;quot;Waiver&amp;quot;). Affirmer makes the Waiver for the benefit of each&lt;br /&gt;
member of the public at large and to the detriment of Affirmer&#039;s heirs and&lt;br /&gt;
successors, fully intending that such Waiver shall not be subject to&lt;br /&gt;
revocation, rescission, cancellation, termination, or any other legal or&lt;br /&gt;
equitable action to disrupt the quiet enjoyment of the Work by the public&lt;br /&gt;
as contemplated by Affirmer&#039;s express Statement of Purpose.&lt;br /&gt;
&lt;br /&gt;
3. Public License Fallback. Should any part of the Waiver for any reason&lt;br /&gt;
be judged legally invalid or ineffective under applicable law, then the&lt;br /&gt;
Waiver shall be preserved to the maximum extent permitted taking into&lt;br /&gt;
account Affirmer&#039;s express Statement of Purpose. In addition, to the&lt;br /&gt;
extent the Waiver is so judged Affirmer hereby grants to each affected&lt;br /&gt;
person a royalty-free, non transferable, non sublicensable, non exclusive,&lt;br /&gt;
irrevocable and unconditional license to exercise Affirmer&#039;s Copyright and&lt;br /&gt;
Related Rights in the Work (i) in all territories worldwide, (ii) for the&lt;br /&gt;
maximum duration provided by applicable law or treaty (including future&lt;br /&gt;
time extensions), (iii) in any current or future medium and for any number&lt;br /&gt;
of copies, and (iv) for any purpose whatsoever, including without&lt;br /&gt;
limitation commercial, advertising or promotional purposes (the&lt;br /&gt;
&amp;quot;License&amp;quot;). The License shall be deemed effective as of the date CC0 was&lt;br /&gt;
applied by Affirmer to the Work. Should any part of the License for any&lt;br /&gt;
reason be judged legally invalid or ineffective under applicable law, such&lt;br /&gt;
partial invalidity or ineffectiveness shall not invalidate the remainder&lt;br /&gt;
of the License, and in such case Affirmer hereby affirms that he or she&lt;br /&gt;
will not (i) exercise any of his or her remaining Copyright and Related&lt;br /&gt;
Rights in the Work or (ii) assert any associated claims and causes of&lt;br /&gt;
action with respect to the Work, in either case contrary to Affirmer&#039;s&lt;br /&gt;
express Statement of Purpose.&lt;br /&gt;
&lt;br /&gt;
4. Limitations and Disclaimers.&lt;br /&gt;
&lt;br /&gt;
 a. No trademark or patent rights held by Affirmer are waived, abandoned,&lt;br /&gt;
    surrendered, licensed or otherwise affected by this document.&lt;br /&gt;
 b. Affirmer offers the Work as-is and makes no representations or&lt;br /&gt;
    warranties of any kind concerning the Work, express, implied,&lt;br /&gt;
    statutory or otherwise, including without limitation warranties of&lt;br /&gt;
    title, merchantability, fitness for a particular purpose, non&lt;br /&gt;
    infringement, or the absence of latent or other defects, accuracy, or&lt;br /&gt;
    the present or absence of errors, whether or not discoverable, all to&lt;br /&gt;
    the greatest extent permissible under applicable law.&lt;br /&gt;
 c. Affirmer disclaims responsibility for clearing rights of other persons&lt;br /&gt;
    that may apply to the Work or any use thereof, including without&lt;br /&gt;
    limitation any person&#039;s Copyright and Related Rights in the Work.&lt;br /&gt;
    Further, Affirmer disclaims responsibility for obtaining any necessary&lt;br /&gt;
    consents, permissions or other rights required for any use of the&lt;br /&gt;
    Work.&lt;br /&gt;
 d. Affirmer understands and acknowledges that Creative Commons is not a&lt;br /&gt;
    party to this document and has no duty or obligation with respect to&lt;br /&gt;
    this CC0 or use of the Work.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Test_Template_Info-Icon_-_Version_(2).svg&amp;diff=242</id>
		<title>File:Test Template Info-Icon - Version (2).svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Test_Template_Info-Icon_-_Version_(2).svg&amp;diff=242"/>
		<updated>2023-05-25T19:21:14Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=241</id>
		<title>Template:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=241"/>
		<updated>2023-05-25T19:13:03Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Update the icon URLs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Taken from https://www.mediawiki.org/w/index.php?title=Template:Note/styles.css&amp;amp;oldid=4199118 */&lt;br /&gt;
.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #f6efe5;&lt;br /&gt;
	/* [[File:Ui note info.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/a/a7/Ui_note_info.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #ac6600;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	/* [[File:Ui note reminder.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/f/fd/Ui_note_reminder.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	/* [[File:Ui note alert.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/0/04/Ui_note_alert.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	/* [[File:Ui note notice.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/3/39/Ui_note_notice.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=236</id>
		<title>Template:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Note/styles.css&amp;diff=236"/>
		<updated>2023-05-25T18:52:55Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add the MediaWiki note styles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Taken from https://www.mediawiki.org/w/index.php?title=Template:Note/styles.css&amp;amp;oldid=4199118 */&lt;br /&gt;
.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #f6efe5;&lt;br /&gt;
	/* [[File:Ui note info.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/3/39/Ui_note_info.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #ac6600;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	/* [[File:Ui note reminder.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/3/39/Ui_note_reminder.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	/* [[File:Ui note alert.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/3/39/Ui_note_alert.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	/* [[File:Ui note notice.svg]] */&lt;br /&gt;
	background-image: url(https://wiki.c2dl.info/w/images/3/39/Ui_note_notice.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 28px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:Documentation/styles.css&amp;diff=235</id>
		<title>Module:Documentation/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:Documentation/styles.css&amp;diff=235"/>
		<updated>2023-05-25T18:50:00Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add Wikipedia&amp;#039;s documentation styles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.documentation,&lt;br /&gt;
.documentation-metadata {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	background-color: #ecfcf4;&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.documentation {&lt;br /&gt;
	margin: 1em 0 0 0;&lt;br /&gt;
	padding: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.documentation-metadata {&lt;br /&gt;
	margin: 0.2em 0; /* same margin left-right as .documentation */&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    padding: 0.4em 1em; /* same padding left-right as .documentation */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.documentation-startbox {&lt;br /&gt;
	padding-bottom: 3px;&lt;br /&gt;
	border-bottom: 1px solid #aaa;&lt;br /&gt;
	margin-bottom: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.documentation-heading {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.documentation-clear { /* Don&#039;t want things to stick out where they shouldn&#039;t. */&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.documentation-toolbar {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	font-size: 85%;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_error.svg&amp;diff=234</id>
		<title>File:Ui note error.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_error.svg&amp;diff=234"/>
		<updated>2023-05-25T18:32:00Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_warn.svg&amp;diff=233</id>
		<title>File:Ui note warn.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_warn.svg&amp;diff=233"/>
		<updated>2023-05-25T18:31:33Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=CCLoader&amp;diff=230</id>
		<title>CCLoader</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=CCLoader&amp;diff=230"/>
		<updated>2023-05-25T13:43:19Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Move the codeblock to the not-deprecated syntaxhighlight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;CCLoader&#039;&#039;&#039; is the de facto modloader for CrossCode and obviously a prerequisite for playing the CrossCode with mods. Really, it is the only actively developed modloader intended for use by both mod users and mod developers (RIP [https://github.com/20kdc/decrossfuscator/blob/master/lib/rapture.js Rapture] + [https://github.com/20kdc/decrossfuscator/tree/master/mods pre-1.1.0 mods], [[Dorito]] and [[CCInjector]]).&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
There are three ways to perform CCLoader installation, they are both described in this document. But before we continue:&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VERY IMPORTANT NOTE:&#039;&#039;&#039; Don&#039;t use the green &amp;quot;clone or download&amp;quot; button! ==&lt;br /&gt;
&lt;br /&gt;
[[File:Clone-or-download.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
This button downloads the source code, not the compiled files! In the case of CCLoader you can&#039;t just download the source code and run it because CCLoader is not written in JavaScript! While this doesn&#039;t apply to all CrossCode mods out there as most of them are written in plain JS and as such don&#039;t need to be compiled, &#039;&#039;&#039;you should get used to looking at the &amp;quot;Releases&amp;quot; page first before trying to download the source code&#039;&#039;&#039;. In the new redesigned GitHub UI the link to it became more apparent:&lt;br /&gt;
&lt;br /&gt;
[[File:Github-project-frontpage-releases.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
== Method 1: Quick-installation archive ==&lt;br /&gt;
&lt;br /&gt;
This method is recommended for most users (at least right now because the mod manager is not stable enough for a public release and has a few critical bugs) and will very likely remain the primary installation method because of its simplicity.&lt;br /&gt;
&lt;br /&gt;
# Obviously, &#039;&#039;&#039;first of all you have to locate the [[Locations of CrossCode files#Game files folder|CrossCode game files folder]].&#039;&#039;&#039;&lt;br /&gt;
# Go to the [https://github.com/CCDirectLink/CCLoader/releases/latest latest release page] of CCLoader.&lt;br /&gt;
# In the &amp;quot;Assets&amp;quot; list at the bottom of the release click the link which says &#039;&#039;&#039;Source code (zip)&#039;&#039;&#039; (a &amp;lt;code&amp;gt;tar.gz&amp;lt;/code&amp;gt; download also exist for GNU/Linux and macOS users). This will download a quick installation archive.&lt;br /&gt;
# Extract this archive somewhere:&amp;lt;br&amp;gt;[[File:Extract-ccloader-quick-install.png|class=block-img]]&lt;br /&gt;
# Copy the files inside the archive directly into the game folder, like this:&amp;lt;br&amp;gt;[[File:Ccloader-quick-install.png|class=block-img]]&amp;lt;br&amp;gt;The only file you&#039;ll have to overwrite in a clean CrossCode installation is the &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;:&amp;lt;br&amp;gt;[[File:Ccloader-quick-install-overwrite-package-json.png|class=block-img]]&lt;br /&gt;
# You&#039;ve now successfully installed CCLoader! The end result should look like (notice the new &amp;lt;code&amp;gt;ccloader&amp;lt;/code&amp;gt; folder):&amp;lt;br&amp;gt;[[File:Ccloader-installation-end-result.png|class=block-img]]&lt;br /&gt;
# Mods can be installed into the &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt; folder located inside &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;, for more information on that see the [[Installing mods|relevant guide]].&lt;br /&gt;
&lt;br /&gt;
=== Bonus for Linux users ===&lt;br /&gt;
&lt;br /&gt;
On Linux this entire process can be performed with two commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /path/to/CrossCode&lt;br /&gt;
# Replace the version in the URL here with the latest one:&lt;br /&gt;
curl --location --fail &#039;https://github.com/CCDirectLink/CCLoader/archive/refs/tags/v2.20.2/v2.10.1.zip&#039; \&lt;br /&gt;
  | tar --extract --gzip --verbose --file -&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verifying a successful CCLoader installation ===&lt;br /&gt;
&lt;br /&gt;
Upon launching the game you&#039;ll see the CCLoader version in the bottom right corner of the title screen and at the top of the pause screen (where the game version is) if CCLoader was installed correctly. You&#039;ll also be able to see the following tab in the options menu:&lt;br /&gt;
&lt;br /&gt;
[[File:Ccloader-mod-settings-menu.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
It will obviously be empty if you haven&#039;t [[Installing mods|installed any mods]].&lt;br /&gt;
&lt;br /&gt;
== Method 2: Using the automatic installer ==&lt;br /&gt;
&lt;br /&gt;
See https://github.com/CCDirectLink/ccloader-installer. It may be broken though.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modloaders]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=229</id>
		<title>Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=229"/>
		<updated>2023-05-25T13:41:16Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Move codeblocks to the not-deprecated syntaxhighlight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This article needs editing!!!&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is patching? =&lt;br /&gt;
&lt;br /&gt;
In the scope modding, patching is changing the original game content in any way.&lt;br /&gt;
&lt;br /&gt;
= How do I patch game files? =&lt;br /&gt;
&lt;br /&gt;
There is more than one way to patch the game. This page will walk you through the various ways to patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Asset Replacement =&lt;br /&gt;
&lt;br /&gt;
This is the most basic type of patching (anyone can do it).&lt;br /&gt;
&lt;br /&gt;
This is a standard modloader feature that allows you to replace any file the game loads with your own.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Inside your mod folder, create a folder called &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mod-assets-folder.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Decide what file you want to replace. For this tutorial, I will be showing you how to replace Lea&#039;s portraits.&lt;br /&gt;
&lt;br /&gt;
Find the original relative path to asset of interest.&lt;br /&gt;
&lt;br /&gt;
[[File:Lea-face-path.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
All you have to do is now mimic the folder structure.&lt;br /&gt;
&lt;br /&gt;
In this example, two folders need to be created.&lt;br /&gt;
&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; folder in your mod, create a &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder. Inside the &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder, create a &amp;lt;code&amp;gt;face&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Finally, add the file you want to replace (your own &amp;lt;code&amp;gt;lea.png&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
It should end up looking something like this.&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-path-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-folder-contents-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
That is it!&lt;br /&gt;
&lt;br /&gt;
You can find more examples in the [[github:CCDirectLink/CCAssetSwaps]] repo.&lt;br /&gt;
&lt;br /&gt;
* Used faceless Lea mod for some of the demonstration&lt;br /&gt;
&lt;br /&gt;
= JSON Patching (Object Patching) =&lt;br /&gt;
&lt;br /&gt;
Note: This requires some know of the JSON format and some programming concepts&lt;br /&gt;
&lt;br /&gt;
As the majority of the game assets are json files, this is really useful to know about.&lt;br /&gt;
&lt;br /&gt;
What this allows you to do is modify any json file without doing a file replacement.&lt;br /&gt;
&lt;br /&gt;
The same ideas apply as assets override, except the file will have &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; added to the full file name.&lt;br /&gt;
&lt;br /&gt;
You need to have file extensions visible in order to modify it.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you want to patch a file &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt; with this as the contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;xp&amp;quot;: 500&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your mod is located at &amp;lt;code&amp;gt;assets/mods/my-mod/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would create a file with the filepath &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To replace &amp;quot;storage.level&amp;quot; with 200, &amp;lt;code&amp;gt;test.json.patch&amp;lt;/code&amp;gt; would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add &amp;quot;storage.name&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Shizuka&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object patching is useful for adding new properties and modifying existing ones.&lt;br /&gt;
&lt;br /&gt;
Weakness: - Inability to removal properties - Arrays are hard to patch&lt;br /&gt;
&lt;br /&gt;
= Patch Steps =&lt;br /&gt;
&lt;br /&gt;
Patch Steps is another way to perform json file Patching. It is more powerful than Object Patching.&lt;br /&gt;
&lt;br /&gt;
The only difference between Object Patching and Patch Steps is the format of the &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
We will be using the same sample json file used to demonstrate how Object Patching works.&lt;br /&gt;
&lt;br /&gt;
Location: &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Appliers ==&lt;br /&gt;
&lt;br /&gt;
An Applier is a Patch Step command.&lt;br /&gt;
&lt;br /&gt;
== Patch Step Appliers ==&lt;br /&gt;
&lt;br /&gt;
=== ENTER ===&lt;br /&gt;
&lt;br /&gt;
This changes the context of a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
    &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
        &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;saves&amp;quot;, 0]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXIT ===&lt;br /&gt;
&lt;br /&gt;
For every &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;, there should be at least one &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; undos an &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 1&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For demonstration purposes, this is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;user&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step will produce the internal result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: 20&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second step will undo the first leading to the initial state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SET_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INIT_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change to the data because &amp;quot;storage&amp;quot; already exists.&lt;br /&gt;
&lt;br /&gt;
Changing &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage2&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;storage2&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REMOVE_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;REMOVE_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the patch will result in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ADD_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;a&amp;quot;&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 4&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 0&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first step, the internal state will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the second step, the number 4 will be pushed to the end of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3,4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the third step, the number 0 will be added to the start of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[0,1,2,3,4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step will revert the value of focus to the initial object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [0,1,2,3,4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IMPORT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;game:data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step would load &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; then merge it with the current value resulting in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    ,&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; had patches associated with it, it would be applied before being merged.&lt;br /&gt;
&lt;br /&gt;
Another feature is loading json files inside the mod directory and merging. No patches to the loaded file will be done if &amp;lt;code&amp;gt;mod:&amp;lt;/code&amp;gt; is specified.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: [&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;],&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First it will load &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then it will walk the path specified.&lt;br /&gt;
&lt;br /&gt;
Initial loaded file internal representation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
        &amp;quot;3&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;2&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;3&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;3&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, it will add a key &amp;quot;y&amp;quot; with the value that resulted from the path walk (4).&lt;br /&gt;
&lt;br /&gt;
So the overall result will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;y&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;index&amp;quot; and &amp;quot;path&amp;quot; options are optional.&lt;br /&gt;
&lt;br /&gt;
=== INCLUDE ===&lt;br /&gt;
&lt;br /&gt;
The purpose of &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is to allow external Object Patching or PatchSteps to be performed.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is like setting the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is used as an organization method.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;b&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [1,2,3]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;a&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of PatchStep files as its own room. What include does is generate a new room to perform some special operation. Rooms do not intefere with each other, they just modify the data.&lt;br /&gt;
&lt;br /&gt;
=== FOR_IN ===&lt;br /&gt;
&lt;br /&gt;
This PatchStep is useful for combining repeated set of PatchSteps with only slightly variations in input.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__INDEX__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [1,2,3,4],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__INDEX__-id&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__INDEX__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1-id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;2-id&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
    &amp;quot;3-id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;4-id&amp;quot;: &amp;quot;4&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;values&amp;quot;: [{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Bob&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Joe&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 2&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Bob&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;Joe&amp;quot;: &amp;quot;2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
    }, {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change. All this will do is create an internal key-value storage that looks like this:&lt;br /&gt;
&lt;br /&gt;
{ &amp;quot;alias-a&amp;quot;: 2, &amp;quot;alias-b&amp;quot;: [3], &amp;quot;alias-c&amp;quot;: { &amp;quot;d&amp;quot;: 4 } }&lt;br /&gt;
&lt;br /&gt;
=== MERGE_CONTENT ===&lt;br /&gt;
&lt;br /&gt;
With the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following patch step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;MERGE_CONTENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;c&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MERGE_CONTENT&amp;lt;/code&amp;gt; would modify the data to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For an array, it would work the same way - effectively acting as multiple &amp;lt;code&amp;gt;ADD_ARRAY_ELEMENT&amp;lt;/code&amp;gt; steps being executed at the end of the array.&lt;br /&gt;
&lt;br /&gt;
=== PASTE ===&lt;br /&gt;
&lt;br /&gt;
This command relies on COPY.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {}&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;PASTE&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;saved&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
        &amp;quot;c&amp;quot;: {&lt;br /&gt;
            &amp;quot;d&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CALL ===&lt;br /&gt;
&lt;br /&gt;
This step allows you to call a custom step.&lt;br /&gt;
&lt;br /&gt;
First, you define a custom step. In a CCLoader2 mod:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
// NOTE: This MUST be done BEFORE prestart! That being: plugin, preload, postload&lt;br /&gt;
simplifyResources.patchSteps.callable.register(&amp;quot;YOUR_ID&amp;quot;, (state, args) =&amp;gt; {&lt;br /&gt;
  console.log(args);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in your patch file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;CALL&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;YOUR_ID&amp;quot;,&lt;br /&gt;
    &amp;quot;args&amp;quot;: {&lt;br /&gt;
        &amp;quot;someArg&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would log &amp;lt;code&amp;gt;{ someArg: 1 }&amp;lt;/code&amp;gt; to the console whenever the step is called.&lt;br /&gt;
&lt;br /&gt;
If you think patch steps are lacking in some way, &amp;lt;code&amp;gt;CALL&amp;lt;/code&amp;gt; allows you to define your own steps that process your args in some way without having to contribute back to the library.&lt;br /&gt;
&lt;br /&gt;
=== DEBUG ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: false&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PatchStep turns Debug Mode on or off.&lt;br /&gt;
&lt;br /&gt;
=== COMMENT ===&lt;br /&gt;
&lt;br /&gt;
Debug mode must be on for this PatchStep to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;This is a comment&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
        &amp;quot;data&amp;quot;: 3&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will first display &amp;lt;code&amp;gt;This is a comment&amp;lt;/code&amp;gt; in the DevTools console. It will then display &amp;lt;code&amp;gt;{data: 3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=228</id>
		<title>Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=228"/>
		<updated>2023-05-25T13:16:27Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add documentation for the CALL step&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This article needs editing!!!&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is patching? =&lt;br /&gt;
&lt;br /&gt;
In the scope modding, patching is changing the original game content in any way.&lt;br /&gt;
&lt;br /&gt;
= How do I patch game files? =&lt;br /&gt;
&lt;br /&gt;
There is more than one way to patch the game. This page will walk you through the various ways to patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Asset Replacement =&lt;br /&gt;
&lt;br /&gt;
This is the most basic type of patching (anyone can do it).&lt;br /&gt;
&lt;br /&gt;
This is a standard modloader feature that allows you to replace any file the game loads with your own.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Inside your mod folder, create a folder called &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mod-assets-folder.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Decide what file you want to replace. For this tutorial, I will be showing you how to replace Lea&#039;s portraits.&lt;br /&gt;
&lt;br /&gt;
Find the original relative path to asset of interest.&lt;br /&gt;
&lt;br /&gt;
[[File:Lea-face-path.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
All you have to do is now mimic the folder structure.&lt;br /&gt;
&lt;br /&gt;
In this example, two folders need to be created.&lt;br /&gt;
&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; folder in your mod, create a &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder. Inside the &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder, create a &amp;lt;code&amp;gt;face&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Finally, add the file you want to replace (your own &amp;lt;code&amp;gt;lea.png&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
It should end up looking something like this.&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-path-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-folder-contents-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
That is it!&lt;br /&gt;
&lt;br /&gt;
You can find more examples in the [[github:CCDirectLink/CCAssetSwaps]] repo.&lt;br /&gt;
&lt;br /&gt;
* Used faceless Lea mod for some of the demonstration&lt;br /&gt;
&lt;br /&gt;
= JSON Patching (Object Patching) =&lt;br /&gt;
&lt;br /&gt;
Note: This requires some know of the JSON format and some programming concepts&lt;br /&gt;
&lt;br /&gt;
As the majority of the game assets are json files, this is really useful to know about.&lt;br /&gt;
&lt;br /&gt;
What this allows you to do is modify any json file without doing a file replacement.&lt;br /&gt;
&lt;br /&gt;
The same ideas apply as assets override, except the file will have &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; added to the full file name.&lt;br /&gt;
&lt;br /&gt;
You need to have file extensions visible in order to modify it.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you want to patch a file &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt; with this as the contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;xp&amp;quot;: 500&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your mod is located at &amp;lt;code&amp;gt;assets/mods/my-mod/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would create a file with the filepath &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To replace &amp;quot;storage.level&amp;quot; with 200, &amp;lt;code&amp;gt;test.json.patch&amp;lt;/code&amp;gt; would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add &amp;quot;storage.name&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Shizuka&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object patching is useful for adding new properties and modifying existing ones.&lt;br /&gt;
&lt;br /&gt;
Weakness: - Inability to removal properties - Arrays are hard to patch&lt;br /&gt;
&lt;br /&gt;
= Patch Steps =&lt;br /&gt;
&lt;br /&gt;
Patch Steps is another way to perform json file Patching. It is more powerful than Object Patching.&lt;br /&gt;
&lt;br /&gt;
The only difference between Object Patching and Patch Steps is the format of the &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
We will be using the same sample json file used to demonstrate how Object Patching works.&lt;br /&gt;
&lt;br /&gt;
Location: &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Appliers ==&lt;br /&gt;
&lt;br /&gt;
An Applier is a Patch Step command.&lt;br /&gt;
&lt;br /&gt;
== Patch Step Appliers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ENTER ===&lt;br /&gt;
&lt;br /&gt;
This changes the context of a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
    &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
        &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;saves&amp;quot;, 0]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXIT ===&lt;br /&gt;
&lt;br /&gt;
For every &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;, there should be at least one &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; undos an &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 1&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For demonstration purposes, this is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;user&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step will produce the internal result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: 20&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second step will undo the first leading to the initial state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SET_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INIT_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change to the data because &amp;quot;storage&amp;quot; already exists.&lt;br /&gt;
&lt;br /&gt;
Changing &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage2&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;storage2&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REMOVE_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;REMOVE_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the patch will result in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ADD_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;a&amp;quot;&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 4&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 0&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first step, the internal state will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the second step, the number 4 will be pushed to the end of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3,4]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the third step, the number 0 will be added to the start of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[0,1,2,3,4]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step will revert the value of focus to the initial object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [0,1,2,3,4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IMPORT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;game:data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step would load &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; then merge it with the current value resulting in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    ,&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; had patches associated with it, it would be applied before being merged.&lt;br /&gt;
&lt;br /&gt;
Another feature is loading json files inside the mod directory and merging. No patches to the loaded file will be done if &amp;lt;code&amp;gt;mod:&amp;lt;/code&amp;gt; is specified.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: [&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;],&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First it will load &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then it will walk the path specified.&lt;br /&gt;
&lt;br /&gt;
Initial loaded file internal representation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
        &amp;quot;3&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;2&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;3&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;3&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, it will add a key &amp;quot;y&amp;quot; with the value that resulted from the path walk (4).&lt;br /&gt;
&lt;br /&gt;
So the overall result will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;y&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;index&amp;quot; and &amp;quot;path&amp;quot; options are optional.&lt;br /&gt;
&lt;br /&gt;
=== INCLUDE ===&lt;br /&gt;
&lt;br /&gt;
The purpose of &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is to allow external Object Patching or PatchSteps to be performed.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is like setting the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is used as an organization method.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;b&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [1,2,3]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;a&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of PatchStep files as its own room. What include does is generate a new room to perform some special operation. Rooms do not intefere with each other, they just modify the data.&lt;br /&gt;
&lt;br /&gt;
=== FOR_IN ===&lt;br /&gt;
&lt;br /&gt;
This PatchStep is useful for combining repeated set of PatchSteps with only slightly variations in input.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__INDEX__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [1,2,3,4],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__INDEX__-id&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__INDEX__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1-id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;2-id&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
    &amp;quot;3-id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;4-id&amp;quot;: &amp;quot;4&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;values&amp;quot;: [{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Bob&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Joe&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 2&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Bob&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;Joe&amp;quot;: &amp;quot;2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
    }, {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change. All this will do is create an internal key-value storage that looks like this:&lt;br /&gt;
&lt;br /&gt;
{ &amp;quot;alias-a&amp;quot;: 2, &amp;quot;alias-b&amp;quot;: [3], &amp;quot;alias-c&amp;quot;: { &amp;quot;d&amp;quot;: 4 } }&lt;br /&gt;
&lt;br /&gt;
=== MERGE_CONTENT ===&lt;br /&gt;
&lt;br /&gt;
With the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following patch step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;MERGE_CONTENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;c&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MERGE_CONTENT&amp;lt;/code&amp;gt; would modify the data to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For an array, it would work the same way - effectively acting as multiple &amp;lt;code&amp;gt;ADD_ARRAY_ELEMENT&amp;lt;/code&amp;gt; steps being executed at the end of the array.&lt;br /&gt;
&lt;br /&gt;
=== PASTE ===&lt;br /&gt;
&lt;br /&gt;
This command relies on COPY.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {}&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;PASTE&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;saved&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
        &amp;quot;c&amp;quot;: {&lt;br /&gt;
            &amp;quot;d&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CALL ===&lt;br /&gt;
&lt;br /&gt;
This step allows you to call a custom step.&lt;br /&gt;
&lt;br /&gt;
First, you define a custom step. In a CCLoader2 mod:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
// NOTE: This MUST be done BEFORE prestart! That being: plugin, preload, postload&lt;br /&gt;
simplifyResources.patchSteps.callable.register(&amp;quot;YOUR_ID&amp;quot;, (state, args) =&amp;gt; {&lt;br /&gt;
  console.log(args);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in your patch file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;CALL&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;YOUR_ID&amp;quot;,&lt;br /&gt;
    &amp;quot;args&amp;quot;: {&lt;br /&gt;
        &amp;quot;someArg&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would log &amp;lt;code&amp;gt;{ someArg: 1 }&amp;lt;/code&amp;gt; to the console whenever the step is called.&lt;br /&gt;
&lt;br /&gt;
If you think patch steps are lacking in some way, &amp;lt;code&amp;gt;CALL&amp;lt;/code&amp;gt; allows you to define your own steps that process your args in some way without having to contribute back to the library.&lt;br /&gt;
&lt;br /&gt;
=== DEBUG ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: false&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PatchStep turns Debug Mode on or off.&lt;br /&gt;
&lt;br /&gt;
=== COMMENT ===&lt;br /&gt;
&lt;br /&gt;
Debug mode must be on for this PatchStep to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;This is a comment&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
        &amp;quot;data&amp;quot;: 3&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will first display &amp;lt;code&amp;gt;This is a comment&amp;lt;/code&amp;gt; in the DevTools console. It will then display &amp;lt;code&amp;gt;{data: 3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Installing_mods&amp;diff=227</id>
		<title>Installing mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Installing_mods&amp;diff=227"/>
		<updated>2023-04-07T08:19:18Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Also explain installation of .ccmod files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide describes the most common way of installation of perfectly regular CrossCode mods. Granted, not every mod is equal, some may require additional setup before or after installation, but that must be described in mod&#039;s README document. If not - well, this is most likely the mod author&#039;s problem. Note that you don&#039;t have to read this guide each time you download a new mod as this page is intended for absolute beginners.&lt;br /&gt;
&lt;br /&gt;
=== Short note about upgrading mods ===&lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;can&#039;&#039;&#039; perform mod upgrades by performing the steps described in this guide, but replacing all previous files when unpacking the downloaded mod. However, &#039;&#039;&#039;this is not recommended&#039;&#039;&#039; (by me at least) - instead you should first delete the folder with the previous version of the mod you are upgrading and only then unpack the new version, just in case.&lt;br /&gt;
&lt;br /&gt;
== Step 1. Install [[CCLoader]] ==&lt;br /&gt;
&lt;br /&gt;
CCLoader (aka the &#039;&#039;&#039;C&#039;&#039;&#039;ross&#039;&#039;&#039;C&#039;&#039;&#039;ode mod&#039;&#039;&#039;loader&#039;&#039;&#039;) is required for most mods nowadays to work. Well, it is possible to &amp;lt;s&amp;gt;ab&amp;lt;/s&amp;gt;use the DLC/extension system for creating simple asset swaps, but these are its limits - it&#039;s &#039;&#039;definitely&#039;&#039; not designed for full-fledged modding. CCLoader also provides various tooling for mod authors for selectively patching game content, so that mod authors can put just the changed bits of game files in their mods instead of copying them entirely. The guide about CCLoader installation can be found [[CCLoader#Installation|here]].&lt;br /&gt;
&lt;br /&gt;
== Step 2. Get the mod files ==&lt;br /&gt;
&lt;br /&gt;
Most mods are distributed as zip archives. There are two ways to obtain those:&lt;br /&gt;
&lt;br /&gt;
=== Downloading releases ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See also [[CCLoader#VERY IMPORTANT NOTE: Don&#039;t use the green &amp;quot;clone or download&amp;quot; button!|this section]] of the CCLoader installation guide&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless explicitly stated otherwise in the mod&#039;s README, &#039;&#039;&#039;when actually downloading mods you should always check first for released versions&#039;&#039;&#039;, or &amp;quot;releases&amp;quot; for short. Most mod authors use GitHub for storing source code and distributing releases where you can access the page with changelogs and downloads through these links:&lt;br /&gt;
&lt;br /&gt;
[[File:Github-mod-releases.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Pressing on the version marked as &amp;quot;latest&amp;quot; will take you to, unsurprisingly, the page of the latest release, pressing on the &amp;lt;code&amp;gt;Releases (N)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;+N releases&amp;lt;/code&amp;gt; links at the top and bottom (where &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is some number) will take you to a list of all available versions. Mods also often include the following badge in their README which takes you directly to downloads:&lt;br /&gt;
&lt;br /&gt;
[https://raw.githubusercontent.com/CCDirectLink/organization/master/assets/badges/releases@2x.png https://raw.githubusercontent.com/CCDirectLink/organization/master/assets/badges/releases@2x.png]&lt;br /&gt;
&lt;br /&gt;
On the release page you&#039;ll see the section named &amp;quot;Assets&amp;quot;. It always includes at least two entries: &amp;quot;Source code (zip)&amp;quot; and &amp;quot;Source code (tar.gz)&amp;quot;. If only links for downloading source code are present - don&#039;t worry, you can use those to install the mod. Just download whichever archive format you prefer. Otherwise mod authors upload at least zip archives on the downloads page, usually the file name of those includes the mod ID and version.&lt;br /&gt;
&lt;br /&gt;
=== Downloading source code ===&lt;br /&gt;
&lt;br /&gt;
Most of the time mod authors publish the releases properly, but when the &amp;quot;releases&amp;quot; page is empty or the link is hidden it can mean one of three things:&lt;br /&gt;
&lt;br /&gt;
# The project is dead.&lt;br /&gt;
# The mod is work-in-progress project, or WIP for short. Such mods usually don&#039;t have a proper README file. In this case you should contact the author to ask if the mod is usable. You can also potentially help with the development - sometimes mods may need testers.&lt;br /&gt;
# The author was just lazy to publish releases properly. Most mods don&#039;t require compilation or preprocessing of assets or scripts to be loaded into the game and work, so in such cases you can try to download the mod&#039;s source code. On GitHub this can be done by pressing the green &amp;quot;code&amp;quot; button with a download icon to the left, and then pressing &amp;quot;download ZIP&amp;quot; in the opened popup:&amp;lt;br&amp;gt;[[File:Mod-download-source-code.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beware, however, that sometimes the source code of mods is structured in a weird way&#039;&#039;&#039;, mostly in mods made by ac2pic aka Emileyah, so sometimes you can&#039;t just put files of the downloaded archive into your mods folder and call it a day. As a rule of thumb, a folder which contains a file named &amp;lt;code&amp;gt;ccmod.json&amp;lt;/code&amp;gt; is most likely a mod. In the case of ac2pic&#039;s mods, the mod is usually located in a subfolder named similarly to the mod itself.&lt;br /&gt;
&lt;br /&gt;
== Step 3. Unpack the downloaded mod into your mods folder ==&lt;br /&gt;
&lt;br /&gt;
The title of this step is a bit misleading, because depending on the type of mod you downloaded, you may not even have to extract it.&lt;br /&gt;
&lt;br /&gt;
To locate your mods folder you first need to find the [[Locations of CrossCode files#Game files folder|CrossCode game files folder]], then go to &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt;. If the folder &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt; doesn&#039;t exist - create it.&lt;br /&gt;
&lt;br /&gt;
=== Is your mod a &amp;lt;code&amp;gt;.ccmod&amp;lt;/code&amp;gt; file? ===&lt;br /&gt;
&lt;br /&gt;
Worry not! All you have to do is move the file into the &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
=== Is your mod a &amp;lt;code&amp;gt;.zip&amp;lt;/code&amp;gt; file? ===&lt;br /&gt;
&lt;br /&gt;
Unpack the mod folder contained in the archive you downloaded there. Be sure to put the mod folder in &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt;, not the files inside because &#039;&#039;&#039;each mod lives in its own separate folder&#039;&#039;&#039;! You can also ensure that the folder you unpacked contains a file named &amp;lt;code&amp;gt;ccmod.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mods-dir-structure-separate-folders.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; these screenshots are a bit outdated (TODO update, include multiple mods to better demonstrate the idea), for example because they doesn&#039;t contain &amp;lt;code&amp;gt;ccmod.json&amp;lt;/code&amp;gt;, but I hope you get the correct idea.&lt;br /&gt;
&lt;br /&gt;
== Step 4. PROFIT!!! ==&lt;br /&gt;
&lt;br /&gt;
This basically concludes installation of perfectly regular mods.&lt;br /&gt;
&lt;br /&gt;
== Common mod installation problems ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Problem with requirements of mod&amp;quot; errors are printed and the mod isn&#039;t loaded ===&lt;br /&gt;
&lt;br /&gt;
Some mods work only on certain versions of CrossCode or CCLoader and some mods require other mods to function (so-called libraries). If these requirements of a given mod aren&#039;t met when the game is loaded, the modloader will simply skip this mod and proceed to start the game without it.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Requirement problem&lt;br /&gt;
!width=&amp;quot;75%&amp;quot;| Explanation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; is not installed&amp;lt;/code&amp;gt;&lt;br /&gt;
| The mod &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; is a so-called &amp;quot;dependency&amp;quot; of the mod you installed and you should install it as well. Usually dependencies are listed in the mod&#039;s README.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; is disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
| Unsurprisingly, you have to enable the mod &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; to get the installed mod working.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; is not loaded&amp;lt;/code&amp;gt;&lt;br /&gt;
| If there is a problem in the chain of dependencies, then all mods in that chain aren&#039;t loaded. See the error which caused &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; to not be loaded.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;version of xyz is not in range abc&amp;lt;/code&amp;gt;&lt;br /&gt;
| The installed mod is compatible with a specific range of versions of &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;, try downgrading or upgrading &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; doesn&#039;t have a version&amp;lt;/code&amp;gt;&lt;br /&gt;
| The developer of the mod you are installing likely made a mistake or you downloaded a very old development version of &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides for mod users]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=2767mr%27s_code_pearls&amp;diff=225</id>
		<title>2767mr&#039;s code pearls</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=2767mr%27s_code_pearls&amp;diff=225"/>
		<updated>2022-10-01T12:22:50Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add the game ratio pearl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A simple hello world mod:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
export default class HelloWorld extends Plugin {&lt;br /&gt;
  prestart() {&lt;br /&gt;
    console.log(&#039;Hello world!&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How to get your mod directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
export default class ModFolder extends Plugin {&lt;br /&gt;
  constructor(mod) {&lt;br /&gt;
     this.dir = mod.baseDirectory;&lt;br /&gt;
  }&lt;br /&gt;
  prestart() {&lt;br /&gt;
    console.log(`Your mod directory is ${this.dir}`);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check if code is running in the browser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ig.platform === ig.PLATFORM_TYPES.BROWSER&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Double all CP gain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
sc.PlayerModel.inject({&lt;br /&gt;
  addSkillPoints(points, element, all, extra) {&lt;br /&gt;
    this.parent(points*2, element, all, extra);&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Register preupdate calls:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
export default class UpdateCall extends Plugin {&lt;br /&gt;
    prestart() {&lt;br /&gt;
        const self = this;&lt;br /&gt;
        sc.CrossCode.inject({&lt;br /&gt;
            init(...args) {&lt;br /&gt;
                this.parent(...args);&lt;br /&gt;
                this.addons.preUpdate.push(self);&lt;br /&gt;
            }&lt;br /&gt;
        })&lt;br /&gt;
    }&lt;br /&gt;
    onPreUpdate() {&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable new game+ early:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
sc.TitleScreenButtonGui.inject({&lt;br /&gt;
    checkClearSaveFiles: function() {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open devtools for a background page:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
chrome.developerPrivate.openDevTools({&lt;br /&gt;
    renderViewId: -1,&lt;br /&gt;
    renderProcessId: -1,&lt;br /&gt;
    extensionId: chrome.runtime.id&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Instant respawn for enemies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ig.ENTITY.EnemySpawner.inject({&lt;br /&gt;
    update(...args) {&lt;br /&gt;
        this.respawnTimer = 0;&lt;br /&gt;
        return this.parent(...args);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lot of trophy points:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
sc.TrophyManager.inject({&lt;br /&gt;
    getTotalPoints() {&lt;br /&gt;
        return 100000000;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enables witch times for all controlled characters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ig.ENTITY.Player.inject({&lt;br /&gt;
  onPerfectDash() {&lt;br /&gt;
    this.parent();&lt;br /&gt;
    if (!this.dashPerfect &amp;amp;&amp;amp; this.model.name != &amp;quot;Lea&amp;quot;&lt;br /&gt;
        &amp;amp;&amp;amp; this.model.name == sc.model.player.name &amp;amp;&amp;amp; sc.newgame.get(&amp;quot;witch-time&amp;quot;) &amp;amp;&amp;amp; !ig.vars.get(&amp;quot;tmp.slowMotionActive&amp;quot;)) {&lt;br /&gt;
      sc.combat.showPerfectDashEffect(this);&lt;br /&gt;
      const proxy = sc.ProxyTools.getProxy(&amp;quot;evadeSloMo&amp;quot;, this);&lt;br /&gt;
      if (proxy)&lt;br /&gt;
        proxy.spawn(this.coll.pos.x, this.coll.pos.y, this.coll.pos.z, this, this.face, true);&lt;br /&gt;
      this.invincibleTimer = 4;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes game ratio from 16:9 to 21:9: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
export default class Widescreen {&lt;br /&gt;
    prestart() {&lt;br /&gt;
        const factor = 21 / 16;&lt;br /&gt;
        window.IG_WIDTH *= factor;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=224</id>
		<title>Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=224"/>
		<updated>2022-10-01T12:04:54Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Add MERGE_CONTENT step&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This article needs editing!!!&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is patching? =&lt;br /&gt;
&lt;br /&gt;
In the scope modding, patching is changing the original game content in any way.&lt;br /&gt;
&lt;br /&gt;
= How do I patch game files? =&lt;br /&gt;
&lt;br /&gt;
There is more than one way to patch the game. This page will walk you through the various ways to patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Asset Replacement =&lt;br /&gt;
&lt;br /&gt;
This is the most basic type of patching (anyone can do it).&lt;br /&gt;
&lt;br /&gt;
This is a standard modloader feature that allows you to replace any file the game loads with your own.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Inside your mod folder, create a folder called &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mod-assets-folder.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Decide what file you want to replace. For this tutorial, I will be showing you how to replace Lea&#039;s portraits.&lt;br /&gt;
&lt;br /&gt;
Find the original relative path to asset of interest.&lt;br /&gt;
&lt;br /&gt;
[[File:Lea-face-path.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
All you have to do is now mimic the folder structure.&lt;br /&gt;
&lt;br /&gt;
In this example, two folders need to be created.&lt;br /&gt;
&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; folder in your mod, create a &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder. Inside the &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder, create a &amp;lt;code&amp;gt;face&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Finally, add the file you want to replace (your own &amp;lt;code&amp;gt;lea.png&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
It should end up looking something like this.&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-path-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-folder-contents-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
That is it!&lt;br /&gt;
&lt;br /&gt;
You can find more examples in the [[github:CCDirectLink/CCAssetSwaps]] repo.&lt;br /&gt;
&lt;br /&gt;
* Used faceless Lea mod for some of the demonstration&lt;br /&gt;
&lt;br /&gt;
= JSON Patching (Object Patching) =&lt;br /&gt;
&lt;br /&gt;
Note: This requires some know of the JSON format and some programming concepts&lt;br /&gt;
&lt;br /&gt;
As the majority of the game assets are json files, this is really useful to know about.&lt;br /&gt;
&lt;br /&gt;
What this allows you to do is modify any json file without doing a file replacement.&lt;br /&gt;
&lt;br /&gt;
The same ideas apply as assets override, except the file will have &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; added to the full file name.&lt;br /&gt;
&lt;br /&gt;
You need to have file extensions visible in order to modify it.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you want to patch a file &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt; with this as the contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;xp&amp;quot;: 500&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your mod is located at &amp;lt;code&amp;gt;assets/mods/my-mod/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would create a file with the filepath &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To replace &amp;quot;storage.level&amp;quot; with 200, &amp;lt;code&amp;gt;test.json.patch&amp;lt;/code&amp;gt; would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add &amp;quot;storage.name&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Shizuka&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object patching is useful for adding new properties and modifying existing ones.&lt;br /&gt;
&lt;br /&gt;
Weakness: - Inability to removal properties - Arrays are hard to patch&lt;br /&gt;
&lt;br /&gt;
= Patch Steps =&lt;br /&gt;
&lt;br /&gt;
Patch Steps is another way to perform json file Patching. It is more powerful than Object Patching.&lt;br /&gt;
&lt;br /&gt;
The only difference between Object Patching and Patch Steps is the format of the &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
We will be using the same sample json file used to demonstrate how Object Patching works.&lt;br /&gt;
&lt;br /&gt;
Location: &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Appliers ==&lt;br /&gt;
&lt;br /&gt;
An Applier is a Patch Step command.&lt;br /&gt;
&lt;br /&gt;
== Patch Step Appliers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ENTER ===&lt;br /&gt;
&lt;br /&gt;
This changes the context of a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
    &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
        &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;saves&amp;quot;, 0]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXIT ===&lt;br /&gt;
&lt;br /&gt;
For every &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;, there should be at least one &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; undos an &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 1&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For demonstration purposes, this is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;user&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step will produce the internal result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: 20&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second step will undo the first leading to the initial state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SET_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INIT_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change to the data because &amp;quot;storage&amp;quot; already exists.&lt;br /&gt;
&lt;br /&gt;
Changing &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage2&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;storage2&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REMOVE_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;REMOVE_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the patch will result in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ADD_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;a&amp;quot;&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 4&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 0&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first step, the internal state will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the second step, the number 4 will be pushed to the end of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3,4]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the third step, the number 0 will be added to the start of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[0,1,2,3,4]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step will revert the value of focus to the initial object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [0,1,2,3,4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IMPORT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;game:data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step would load &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; then merge it with the current value resulting in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    ,&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; had patches associated with it, it would be applied before being merged.&lt;br /&gt;
&lt;br /&gt;
Another feature is loading json files inside the mod directory and merging. No patches to the loaded file will be done if &amp;lt;code&amp;gt;mod:&amp;lt;/code&amp;gt; is specified.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: [&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;],&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First it will load &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then it will walk the path specified.&lt;br /&gt;
&lt;br /&gt;
Initial loaded file internal representation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
        &amp;quot;3&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;2&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;3&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;3&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, it will add a key &amp;quot;y&amp;quot; with the value that resulted from the path walk (4).&lt;br /&gt;
&lt;br /&gt;
So the overall result will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;y&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;index&amp;quot; and &amp;quot;path&amp;quot; options are optional.&lt;br /&gt;
&lt;br /&gt;
=== INCLUDE ===&lt;br /&gt;
&lt;br /&gt;
The purpose of &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is to allow external Object Patching or PatchSteps to be performed.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is like setting the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is used as an organization method.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;b&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [1,2,3]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;a&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of PatchStep files as its own room. What include does is generate a new room to perform some special operation. Rooms do not intefere with each other, they just modify the data.&lt;br /&gt;
&lt;br /&gt;
=== FOR_IN ===&lt;br /&gt;
&lt;br /&gt;
This PatchStep is useful for combining repeated set of PatchSteps with only slightly variations in input.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__INDEX__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [1,2,3,4],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__INDEX__-id&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__INDEX__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1-id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;2-id&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
    &amp;quot;3-id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;4-id&amp;quot;: &amp;quot;4&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;values&amp;quot;: [{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Bob&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Joe&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 2&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Bob&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;Joe&amp;quot;: &amp;quot;2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
    }, {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change. All this will do is create an internal key-value storage that looks like this:&lt;br /&gt;
&lt;br /&gt;
{ &amp;quot;alias-a&amp;quot;: 2, &amp;quot;alias-b&amp;quot;: [3], &amp;quot;alias-c&amp;quot;: { &amp;quot;d&amp;quot;: 4 } }&lt;br /&gt;
&lt;br /&gt;
=== MERGE_CONTENT ===&lt;br /&gt;
&lt;br /&gt;
With the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following patch step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;MERGE_CONTENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;c&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MERGE_CONTENT&amp;lt;/code&amp;gt; would modify the data to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For an array, it would work the same way - effectively acting as multiple &amp;lt;code&amp;gt;ADD_ARRAY_ELEMENT&amp;lt;/code&amp;gt; steps being executed at the end of the array.&lt;br /&gt;
&lt;br /&gt;
=== PASTE ===&lt;br /&gt;
&lt;br /&gt;
This command relies on COPY.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {}&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;PASTE&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;saved&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
        &amp;quot;c&amp;quot;: {&lt;br /&gt;
            &amp;quot;d&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DEBUG ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: false&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PatchStep turns Debug Mode on or off.&lt;br /&gt;
&lt;br /&gt;
=== COMMENT ===&lt;br /&gt;
&lt;br /&gt;
Debug mode must be on for this PatchStep to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;This is a comment&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
        &amp;quot;data&amp;quot;: 3&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will first display &amp;lt;code&amp;gt;This is a comment&amp;lt;/code&amp;gt; in the DevTools console. It will then display &amp;lt;code&amp;gt;{data: 3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=223</id>
		<title>Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Patching&amp;diff=223"/>
		<updated>2022-10-01T11:59:05Z</updated>

		<summary type="html">&lt;p&gt;Lexisother: Capitalize all step names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This article needs editing!!!&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is patching? =&lt;br /&gt;
&lt;br /&gt;
In the scope modding, patching is changing the original game content in any way.&lt;br /&gt;
&lt;br /&gt;
= How do I patch game files? =&lt;br /&gt;
&lt;br /&gt;
There is more than one way to patch the game. This page will walk you through the various ways to patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Asset Replacement =&lt;br /&gt;
&lt;br /&gt;
This is the most basic type of patching (anyone can do it).&lt;br /&gt;
&lt;br /&gt;
This is a standard modloader feature that allows you to replace any file the game loads with your own.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Inside your mod folder, create a folder called &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mod-assets-folder.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
Decide what file you want to replace. For this tutorial, I will be showing you how to replace Lea&#039;s portraits.&lt;br /&gt;
&lt;br /&gt;
Find the original relative path to asset of interest.&lt;br /&gt;
&lt;br /&gt;
[[File:Lea-face-path.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
All you have to do is now mimic the folder structure.&lt;br /&gt;
&lt;br /&gt;
In this example, two folders need to be created.&lt;br /&gt;
&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; folder in your mod, create a &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder. Inside the &amp;lt;code&amp;gt;media&amp;lt;/code&amp;gt; folder, create a &amp;lt;code&amp;gt;face&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Finally, add the file you want to replace (your own &amp;lt;code&amp;gt;lea.png&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
It should end up looking something like this.&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-path-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
[[File:Faceless-mod-folder-contents-example.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
That is it!&lt;br /&gt;
&lt;br /&gt;
You can find more examples in the [[github:CCDirectLink/CCAssetSwaps]] repo.&lt;br /&gt;
&lt;br /&gt;
* Used faceless Lea mod for some of the demonstration&lt;br /&gt;
&lt;br /&gt;
= JSON Patching (Object Patching) =&lt;br /&gt;
&lt;br /&gt;
Note: This requires some know of the JSON format and some programming concepts&lt;br /&gt;
&lt;br /&gt;
As the majority of the game assets are json files, this is really useful to know about.&lt;br /&gt;
&lt;br /&gt;
What this allows you to do is modify any json file without doing a file replacement.&lt;br /&gt;
&lt;br /&gt;
The same ideas apply as assets override, except the file will have &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; added to the full file name.&lt;br /&gt;
&lt;br /&gt;
You need to have file extensions visible in order to modify it.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you want to patch a file &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt; with this as the contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;xp&amp;quot;: 500&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your mod is located at &amp;lt;code&amp;gt;assets/mods/my-mod/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You would create a file with the filepath &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To replace &amp;quot;storage.level&amp;quot; with 200, &amp;lt;code&amp;gt;test.json.patch&amp;lt;/code&amp;gt; would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add &amp;quot;storage.name&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Shizuka&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object patching is useful for adding new properties and modifying existing ones.&lt;br /&gt;
&lt;br /&gt;
Weakness: - Inability to removal properties - Arrays are hard to patch&lt;br /&gt;
&lt;br /&gt;
= Patch Steps =&lt;br /&gt;
&lt;br /&gt;
Patch Steps is another way to perform json file Patching. It is more powerful than Object Patching.&lt;br /&gt;
&lt;br /&gt;
The only difference between Object Patching and Patch Steps is the format of the &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
We will be using the same sample json file used to demonstrate how Object Patching works.&lt;br /&gt;
&lt;br /&gt;
Location: &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Appliers ==&lt;br /&gt;
&lt;br /&gt;
An Applier is a Patch Step command.&lt;br /&gt;
&lt;br /&gt;
== Patch Step Appliers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ENTER ===&lt;br /&gt;
&lt;br /&gt;
This changes the context of a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
    &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
        &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;saves&amp;quot;, 0]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would change the internal view of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot; : {&lt;br /&gt;
        &amp;quot;level&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;saves&amp;quot;: [{&lt;br /&gt;
            &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
        }]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;data&amp;quot;: &amp;quot;blob&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXIT ===&lt;br /&gt;
&lt;br /&gt;
For every &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;, there should be at least one &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; undos an &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 1&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For demonstration purposes, this is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;storage&amp;quot;, &amp;quot;user&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step will produce the internal result of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: 20&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second step will undo the first leading to the initial state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SET_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INIT_KEY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change to the data because &amp;quot;storage&amp;quot; already exists.&lt;br /&gt;
&lt;br /&gt;
Changing &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INIT_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;storage2&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would result in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;storage&amp;quot;: {&lt;br /&gt;
        &amp;quot;user&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: 20&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;storage2&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REMOVE_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;REMOVE_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applying the patch will result in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ADD_ARRAY_ELEMENT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;a&amp;quot;&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 4&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ADD_ARRAY_ELEMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 0&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first step, the internal state will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the second step, the number 4 will be pushed to the end of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[1,2,3,4]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the third step, the number 0 will be added to the start of the array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[0,1,2,3,4]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step will revert the value of focus to the initial object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: [0,1,2,3,4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IMPORT ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;game:data/test2.json&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first step would load &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; then merge it with the current value resulting in this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    ,&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 3&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;d&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;assets/data/test2.json&amp;lt;/code&amp;gt; had patches associated with it, it would be applied before being merged.&lt;br /&gt;
&lt;br /&gt;
Another feature is loading json files inside the mod directory and merging. No patches to the loaded file will be done if &amp;lt;code&amp;gt;mod:&amp;lt;/code&amp;gt; is specified.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;IMPORT&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: [&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;],&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First it will load &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then it will walk the path specified.&lt;br /&gt;
&lt;br /&gt;
Initial loaded file internal representation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
        &amp;quot;3&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;2&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;3&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After entering &amp;quot;3&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, it will add a key &amp;quot;y&amp;quot; with the value that resulted from the path walk (4).&lt;br /&gt;
&lt;br /&gt;
So the overall result will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;y&amp;quot;: 4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;index&amp;quot; and &amp;quot;path&amp;quot; options are optional.&lt;br /&gt;
&lt;br /&gt;
=== INCLUDE ===&lt;br /&gt;
&lt;br /&gt;
The purpose of &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is to allow external Object Patching or PatchSteps to be performed.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is like setting the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
        &amp;quot;2&amp;quot;: {&lt;br /&gt;
            &amp;quot;3&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; is used as an organization method.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;INCLUDE&amp;quot;,&lt;br /&gt;
    &amp;quot;src&amp;quot;: &amp;quot;mod:patches/data/test.json&amp;quot;,&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;b&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [1,2,3]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/patches/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;a&amp;quot;]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: {&lt;br /&gt;
        &amp;quot;b&amp;quot;: 2&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;b&amp;quot;: [1,2,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of PatchStep files as its own room. What include does is generate a new room to perform some special operation. Rooms do not intefere with each other, they just modify the data.&lt;br /&gt;
&lt;br /&gt;
=== FOR_IN ===&lt;br /&gt;
&lt;br /&gt;
This PatchStep is useful for combining repeated set of PatchSteps with only slightly variations in input.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__INDEX__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [1,2,3,4],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__INDEX__-id&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__INDEX__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;1-id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;2-id&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
    &amp;quot;3-id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;4-id&amp;quot;: &amp;quot;4&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;values&amp;quot;: [{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Bob&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Joe&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 2&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__NAME__&amp;quot;,&lt;br /&gt;
        &amp;quot;content&amp;quot;: &amp;quot;__ID__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Bob&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;Joe&amp;quot;: &amp;quot;2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
    }, {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing will change. All this will do is create an internal key-value storage that looks like this:&lt;br /&gt;
&lt;br /&gt;
{ &amp;quot;alias-a&amp;quot;: 2, &amp;quot;alias-b&amp;quot;: [3], &amp;quot;alias-c&amp;quot;: { &amp;quot;d&amp;quot;: 4 } }&lt;br /&gt;
&lt;br /&gt;
=== PASTE ===&lt;br /&gt;
&lt;br /&gt;
This command relies on COPY.&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/data/test.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
    &amp;quot;c&amp;quot;: {&lt;br /&gt;
        &amp;quot;d&amp;quot;: 4&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the contents of &amp;lt;code&amp;gt;assets/mods/my-mod/assets/data/test.json.patch&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;COPY&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;&lt;br /&gt;
    },{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: {}&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;saved&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;FOR_IN&amp;quot;,&lt;br /&gt;
    &amp;quot;keyword&amp;quot;: &amp;quot;__VAR__&amp;quot;,&lt;br /&gt;
    &amp;quot;values&amp;quot;: [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
    &amp;quot;body&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;PASTE&amp;quot;,&lt;br /&gt;
        &amp;quot;alias&amp;quot;: &amp;quot;alias-__VAR__&amp;quot;,&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;__VAR__&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;saved&amp;quot;: {&lt;br /&gt;
        &amp;quot;a&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;b&amp;quot;: [3],&lt;br /&gt;
        &amp;quot;c&amp;quot;: {&lt;br /&gt;
            &amp;quot;d&amp;quot;: 4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DEBUG ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: false&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This PatchStep turns Debug Mode on or off.&lt;br /&gt;
&lt;br /&gt;
=== COMMENT ===&lt;br /&gt;
&lt;br /&gt;
Debug mode must be on for this PatchStep to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;DEBUG&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: true&lt;br /&gt;
},{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;This is a comment&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;COMMENT&amp;quot;,&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
        &amp;quot;data&amp;quot;: 3&lt;br /&gt;
    }&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will first display &amp;lt;code&amp;gt;This is a comment&amp;lt;/code&amp;gt; in the DevTools console. It will then display &amp;lt;code&amp;gt;{data: 3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Lexisother</name></author>
	</entry>
</feed>