<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wolfire.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mng</id>
	<title>Wolfire Games Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wolfire.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mng"/>
	<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Special:Contributions/Mng"/>
	<updated>2026-05-04T18:10:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=File:N-Tab-anim-controls.PNG&amp;diff=6048</id>
		<title>File:N-Tab-anim-controls.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=File:N-Tab-anim-controls.PNG&amp;diff=6048"/>
		<updated>2018-07-20T13:34:12Z</updated>

		<summary type="html">&lt;p&gt;Mng: Mng uploaded a new version of File:N-Tab-anim-controls.PNG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=File:N-Tab-anim-controls.PNG&amp;diff=6047</id>
		<title>File:N-Tab-anim-controls.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=File:N-Tab-anim-controls.PNG&amp;diff=6047"/>
		<updated>2018-07-20T13:29:27Z</updated>

		<summary type="html">&lt;p&gt;Mng: Mng uploaded a new version of File:N-Tab-anim-controls.PNG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=File:N-Tab-anim-controls.PNG&amp;diff=6046</id>
		<title>File:N-Tab-anim-controls.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=File:N-Tab-anim-controls.PNG&amp;diff=6046"/>
		<updated>2018-07-20T13:20:43Z</updated>

		<summary type="html">&lt;p&gt;Mng: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Animations&amp;diff=6045</id>
		<title>Custom Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Animations&amp;diff=6045"/>
		<updated>2018-07-20T13:15:53Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Event Keyframes */ Removed almost definitely redundant table columns. Removed TODOs. Added more events to table.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Animations for rigged objects in Overgrowth are stored with one of the Phoenix Engine&#039;s custom [[Binary_File_Formats|binary file formats]], namely the [[Binary_File_Formats#PHXANM|PHXANM (Phoenix Animation) format]]. To export an animation to a PHXANM (File mask: .anm) file you need to use Wolfire&#039;s custom export addon for Blender. A repackaged version of Blender for Windows with the export addon and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here].&lt;br /&gt;
&lt;br /&gt;
===Exporting an animation===&lt;br /&gt;
&lt;br /&gt;
# Create your custom animation in Blender&lt;br /&gt;
# Set the metadata for your animation in the properties sidebar of the skeleton &#039;&#039;&#039;TODO: ADD IMAGE&#039;&#039;&#039;&lt;br /&gt;
#* Click the &#039;&#039;&#039;From Timeline&#039;&#039;&#039; button to set the timeline&#039;s start &amp;amp; end frames as the start &amp;amp; end points of your animation; &#039;&#039;&#039;Note:&#039;&#039;&#039; Keyframes outside of this time frame won&#039;t be exported.&lt;br /&gt;
#* Set the &#039;&#039;&#039;Looping&#039;&#039;&#039; value to 0 if you don&#039;t want your animation to loop. Set it to 1 if you want it to loop. &#039;&#039;&#039;Todo: If the value is higher, will it do sth different, like play the animation n times?&#039;&#039;&#039;&lt;br /&gt;
# With the skeleton selected(&#039;&#039;&#039;TODO: Is that important?&#039;&#039;&#039;), press &#039;&#039;&#039;File &amp;gt; Export &amp;gt; Phoenix Animation (.anm)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Event Keyframes==&lt;br /&gt;
Event keyframes are used to tell the game at which moment of an animation an event is going to happen. This is used to trigger attack impacts and footstep sounds among other things.&lt;br /&gt;
An event is saved as a &#039;&#039;Custom Property&#039;&#039; of a bone in the Blender files shipped with the game.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Event Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| event_attackimpact || Will trigger the actual impact while attacking a character&lt;br /&gt;
|-&lt;br /&gt;
|event_attackblocked||&lt;br /&gt;
|-&lt;br /&gt;
|event_rightcrouchwalkstep||&lt;br /&gt;
|-&lt;br /&gt;
|event_rightrunstep||Will trigger footstepsound, particles and IK ?&lt;br /&gt;
|-&lt;br /&gt;
|event_rightwalkstep||&lt;br /&gt;
|-&lt;br /&gt;
|event_rightwallstep||&lt;br /&gt;
|-&lt;br /&gt;
|event_golimp||&lt;br /&gt;
|-&lt;br /&gt;
|event_grabitem||&lt;br /&gt;
|-&lt;br /&gt;
|event_heldweaponswap||&lt;br /&gt;
|-&lt;br /&gt;
|event_rightweaponrelease||&lt;br /&gt;
|-&lt;br /&gt;
|event_sheatherighthandlefthip||&lt;br /&gt;
|-&lt;br /&gt;
|event_sheatherighthandrighthip||&lt;br /&gt;
|-&lt;br /&gt;
|event_throatcut||&lt;br /&gt;
|-&lt;br /&gt;
|event_unsheatherighthandlefthip||&lt;br /&gt;
|-&lt;br /&gt;
|event_unsheatherighthandrighthi||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Adding an event Keyframe to your animation===&lt;br /&gt;
# Select the 3rd of the rig&#039;s layers from the bottom right.&#039;&#039;&#039;TODO: ADD IMAGE&#039;&#039;&#039; The bones should be named &amp;lt;code&amp;gt;DEF-&amp;lt;Bonename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Select the appropriate bone for the event you want to trigger while being in pose mode&lt;br /&gt;
# Set the playhead in the timeline to the moment you want the event to happen&lt;br /&gt;
# In the &#039;&#039;&#039;Properties&#039;&#039;&#039; editor, press &#039;&#039;&#039;Bone&#039;&#039;&#039; and scroll down to &#039;&#039;&#039;Custom Properties&#039;&#039;&#039;&lt;br /&gt;
# Hover over the property that corresponds to the event you want to trigger and press &#039;&#039;&#039;I&#039;&#039;&#039; to add a keyframe. (Value doesn&#039;t matter)&lt;br /&gt;
&lt;br /&gt;
==Animating Morph Targets==&lt;br /&gt;
&#039;&#039;&#039;Todo: Add this section&#039;&#039;&#039;&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Dialogue_Editor&amp;diff=6043</id>
		<title>Dialogue Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Dialogue_Editor&amp;diff=6043"/>
		<updated>2018-06-16T08:07:38Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Depth of Field */ Added Note.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;TODO: Figure out how to best cover all the missing send_level_message and send_character_message commands.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the technical documentation for the dialogue editor. It&#039;s used to create scenes with different camera angles, text and poses. It is commonly used to give context and progress the story in a level.&lt;br /&gt;
&lt;br /&gt;
Before reading this article it&#039;s recommended that you read the [[Dialogue]] article to get a basic understanding of how dialogues work.&lt;br /&gt;
&lt;br /&gt;
== General Dialogue Functions ==&lt;br /&gt;
&lt;br /&gt;
=== Set Dialogue Name ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;#name &amp;quot;$&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;#name &amp;quot;chat_with_villager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the name of the current dialogue to whatever is written in &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;. This can be used by some other hotspots to start the dialogue.&lt;br /&gt;
&lt;br /&gt;
=== Set Number of Participants ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;#participants $&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;#participants 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the number of participants in the dialogue to the number written in &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Dialogue ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;say # &amp;quot;n&amp;quot; &amp;quot;m&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;say 1 &amp;quot;Turner&amp;quot; &amp;quot;Hello, I am participant 1 in the dialogue and my name is Turner.&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Makes participant &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; say &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; while the name tag shows &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Waiting ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;[wait $]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;say 1 &amp;quot;Turner&amp;quot; &amp;quot;Hmm... [wait 0.5]I should eat some carrots!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put somewhere in the middle of a say command to pause the text printing for &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; seconds.&lt;br /&gt;
&lt;br /&gt;
=== Wait For Click ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;[wait_for_click]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;say 1 &amp;quot;Turner&amp;quot; &amp;quot;But why!? [wait_for_click]Why did you burn all the lettuce!?&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put somewhere in the middle of a say command to pause the text printing until the player left clicks.&lt;br /&gt;
&lt;br /&gt;
=== Name Tag Color ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;set_dialogue_color # r g b&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;set_dialogue_color 2 0.8 0 0.8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When participant &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; says something, their name tag will have the color specified by the float values in &amp;lt;code&amp;gt;r, g, b&amp;lt;/code&amp;gt; (red, green, blue).&lt;br /&gt;
&lt;br /&gt;
=== Voice ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;set_dialogue_voice # i&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;set_dialogue_voice 2 8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the voice of participant &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the menu bar of the dialogue editor, go to &#039;&#039;Edit → Preview Voice&#039;&#039; and click and drag through the slider to hear previews of all the different voices. &lt;br /&gt;
&lt;br /&gt;
=== Camera Position ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;set_cam tx ty tz rx ry rz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;set_cam 5.0 3.1 2.5 0.0 0.0 0.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the location of the camera for the next &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; command to &amp;lt;code&amp;gt;tx, ty, tz&amp;lt;/code&amp;gt; (translation x, y, z), and sets the rotation to &amp;lt;code&amp;gt;rx, ry, rz&amp;lt;/code&amp;gt; (rotation x, y, z).&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to set this manually in the script because this line will be generated automatically when you move the camera object that is located on the dialogue hotspot by default when editing a dialogue. Keep in mind that when you do this you need to first select the &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; command in the script that you want to change the camera angle for, as the &amp;lt;code&amp;gt;set_cam&amp;lt;/code&amp;gt; line will be put before that line.&lt;br /&gt;
&lt;br /&gt;
However, in some cases it can be very useful to be able to copy a &amp;lt;code&amp;gt;set_cam&amp;lt;/code&amp;gt; line from one place to another and things like that.&lt;br /&gt;
&lt;br /&gt;
=== Character Position ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;set_character_pos # x y z r&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;set_character_pos 1 3.0 0.0 5.0 30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the location of participant &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;x, y, z&amp;lt;/code&amp;gt;, and rotates them around the vertical axis &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; degrees.&lt;br /&gt;
&lt;br /&gt;
Just like with [[#Camera_Position|camera positions]] you don&#039;t need to manually set character positions in the script since the appropriate line of code will be automatically generated when you move one of the character position boxes that can be found by default on each participant&#039;s spawn box. As with camera positions, you need to make sure to select the &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; line that you want to edit before making any changes.&lt;br /&gt;
&lt;br /&gt;
Copying and pasting &amp;lt;code&amp;gt;set_character_pos&amp;lt;/code&amp;gt; lines can be useful to reuse positions in cutscenes without having to set them up again.&lt;br /&gt;
&lt;br /&gt;
=== Pose ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;send_character_message # &amp;quot;set_animation \&amp;quot;$\&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;send_character_message 1 &amp;quot;set_animation \&amp;quot;Data/Animations/r_dialogue_shade.anm\&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Makes participant &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; play the animation at &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;. Note that we&#039;re using &#039;&#039;\&amp;quot;&#039;&#039; to &amp;quot;escape&amp;quot; the &amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; characters.&lt;br /&gt;
&lt;br /&gt;
You don&#039;t have to write this line manually because it can be generated for you if you do the following:&lt;br /&gt;
&lt;br /&gt;
# Click on the &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; line in the dialogue that you want the animation to play for&lt;br /&gt;
# Select the dialogue character position box in the 3D view for the character you want to play an animation&lt;br /&gt;
# In the dialogue editor&#039;s menu bar, press &#039;&#039;File → Load Pose&#039;&#039; and load the animation you want&lt;br /&gt;
&lt;br /&gt;
All animations can be found in the &#039;&#039;../Overgrowth/Data/Animations/&#039;&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Eye, Head &amp;amp; Torso Movement ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;send_character_message # &amp;quot;$ x y z i&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;send_character_message 2 &amp;quot;set_head_target 5.0 3.2 1.1 0.8&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Makes participant &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; turn their &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; towards location &amp;lt;code&amp;gt;x, y, z&amp;lt;/code&amp;gt;, with the influence &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;. If &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, it will face as much towards &amp;lt;code&amp;gt;x, y, z&amp;lt;/code&amp;gt; as possible, and if it&#039;s 0 the command has no effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; Can be set to &amp;lt;code&amp;gt;set_head_target&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;set_torso_target&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;set_eye_dir&amp;lt;/code&amp;gt; used to work, but currently dosn&#039;t.&lt;br /&gt;
&lt;br /&gt;
This command doesn&#039;t need to be written manually, because it will be automatically set for the currently selected &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; line when you move one of the eye, head or torso targets. Scale the targets to change the influence.&lt;br /&gt;
&lt;br /&gt;
=== Depth of Field ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;send_level_message &amp;quot;set_camera_dof cs cd cg fs fd fg&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;send_level_message &amp;quot;set_camera_dof 0.3 5.0 10.0 0.3 20.0 10.0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The player character needs to be connected to the dialogue for it to work.&lt;br /&gt;
&lt;br /&gt;
* cs = Close blur strength&lt;br /&gt;
* cd = Anything closer than this value will be blurred&lt;br /&gt;
* cg = How gradual the transition for close dof should be, 0 = infinite blur&lt;br /&gt;
* fs = Far blur strength&lt;br /&gt;
* fd = Anything further than this value will be blurred&lt;br /&gt;
* fg = How gradual the transition for far dof should be, 0 = infinite blur&lt;br /&gt;
&lt;br /&gt;
The depth of field is split into two parts with three parts in each, the close blur and the far blur. First in each part is how strong the blur should be (&amp;lt;code&amp;gt;xs&amp;lt;/code&amp;gt;), then at what distance it should end/start (&amp;lt;code&amp;gt;xd&amp;lt;/code&amp;gt;), and then how long the transition from/to the blur should be (&amp;lt;code&amp;gt;cg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Fade to Black ===&lt;br /&gt;
Command: &amp;lt;code&amp;gt;fade_to_black $&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;fade_to_black 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; can be set to 1 to make the view fade to black on the next &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt; command. If you set it to 0 afterwards, you get some visual bugs in the dialogue.&lt;br /&gt;
&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Wolfire_Games_Wiki:About&amp;diff=6042</id>
		<title>Wolfire Games Wiki:About</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Wolfire_Games_Wiki:About&amp;diff=6042"/>
		<updated>2018-06-09T17:56:33Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added template, but maybe this should just redirect to the front page? Or it could be it&amp;#039;s own page, of course.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wolfire Wiki Header}}&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Animations&amp;diff=5992</id>
		<title>Custom Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Animations&amp;diff=5992"/>
		<updated>2018-04-10T21:46:29Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Exporting an animation */ added TODO: Is that important?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Animations for rigged objects in Overgrowth are stored with one of the Phoenix Engine&#039;s custom [[Binary_File_Formats|binary file formats]], namely the [[Binary_File_Formats#PHXANM|PHXANM (Phoenix Animation) format]]. To export an animation to a PHXANM (File mask: .anm) file you need to use Wolfire&#039;s custom export addon for Blender. A repackaged version of Blender for Windows with the export addon and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here].&lt;br /&gt;
&lt;br /&gt;
===Exporting an animation===&lt;br /&gt;
&lt;br /&gt;
# Create your custom animation in Blender&lt;br /&gt;
# Set the metadata for your animation in the properties sidebar of the skeleton &#039;&#039;&#039;TODO: ADD IMAGE&#039;&#039;&#039;&lt;br /&gt;
#* Click the &#039;&#039;&#039;From Timeline&#039;&#039;&#039; button to set the timeline&#039;s start &amp;amp; end frames as the start &amp;amp; end points of your animation; &#039;&#039;&#039;Note:&#039;&#039;&#039; Keyframes outside of this time frame won&#039;t be exported.&lt;br /&gt;
#* Set the &#039;&#039;&#039;Looping&#039;&#039;&#039; value to 0 if you don&#039;t want your animation to loop. Set it to 1 if you want it to loop. &#039;&#039;&#039;Todo: If the value is higher, will it do sth different, like play the animation n times?&#039;&#039;&#039;&lt;br /&gt;
# With the skeleton selected(&#039;&#039;&#039;TODO: Is that important?&#039;&#039;&#039;), press &#039;&#039;&#039;File &amp;gt; Export &amp;gt; Phoenix Animation (.anm)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Event Keyframes==&lt;br /&gt;
Event keyframes are used to tell the game at which moment of an animation an event is going to happen. This is used to trigger attack impacts and footstep sounds among other things.&lt;br /&gt;
An event is saved as a &#039;&#039;Custom Property&#039;&#039; of a bone in the Blender files shipped with the game.&lt;br /&gt;
&#039;&#039;&#039;TODO: Maybe a list with event keyframes could be helpful? &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Event !! Applyable to !! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| attackimpact || every bone || Doesn&#039;t matter ? || Will trigger the actual impact while attacking a character&lt;br /&gt;
|-&lt;br /&gt;
| rightrunstep || every bone || Doesn&#039;t matter ? Sound volume ?|| Will trigger footstepsound, particles and IK ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Adding an event Keyframe to your animation===&lt;br /&gt;
# Select the 3rd of the rig&#039;s layers from the bottom right.&#039;&#039;&#039;TODO: ADD IMAGE&#039;&#039;&#039; The bones should be named &amp;lt;code&amp;gt;DEF-&amp;lt;Bonename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Select the appropriate bone for the event you want to trigger while being in pose mode&lt;br /&gt;
# Set the playhead in the timeline to the moment you want the event to happen&lt;br /&gt;
# In the &#039;&#039;&#039;Properties&#039;&#039;&#039; &amp;quot;editor type&amp;quot;, (&#039;&#039;&#039;TODO: Better name for this? If not, remove&#039;&#039;&#039;) press &#039;&#039;&#039;Bone&#039;&#039;&#039; and scroll down to &#039;&#039;&#039;Custom Properties&#039;&#039;&#039;&lt;br /&gt;
# Hover over the property that corresponds to the event you want to trigger and press &#039;&#039;&#039;I&#039;&#039;&#039; to add a keyframe. (Value doesn&#039;t matter &#039;&#039;&#039;TODO: is this true for every event keyframe? Or at all?&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Animating Morph Targets==&lt;br /&gt;
&#039;&#039;&#039;Todo: Add this section&#039;&#039;&#039;&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Animations&amp;diff=5991</id>
		<title>Custom Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Animations&amp;diff=5991"/>
		<updated>2018-04-10T21:36:52Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added basic layout &amp;amp; text.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Animations for rigged objects in Overgrowth are stored with one of the Phoenix Engine&#039;s custom [[Binary_File_Formats|binary file formats]], namely the [[Binary_File_Formats#PHXANM|PHXANM (Phoenix Animation) format]]. To export an animation to a PHXANM (File mask: .anm) file you need to use Wolfire&#039;s custom export addon for Blender. A repackaged version of Blender for Windows with the export addon and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here].&lt;br /&gt;
&lt;br /&gt;
===Exporting an animation===&lt;br /&gt;
&lt;br /&gt;
# Create your custom animation in Blender&lt;br /&gt;
# Set the metadata for your animation in the properties sidebar of the skeleton &#039;&#039;&#039;TODO: ADD IMAGE&#039;&#039;&#039;&lt;br /&gt;
#* Click the &#039;&#039;&#039;From Timeline&#039;&#039;&#039; button to set the timeline&#039;s start &amp;amp; end frames as the start &amp;amp; end points of your animation; &#039;&#039;&#039;Note:&#039;&#039;&#039; Keyframes outside of this time frame won&#039;t be exported.&lt;br /&gt;
#* Set the &#039;&#039;&#039;Looping&#039;&#039;&#039; value to 0 if you don&#039;t want your animation to loop. Set it to 1 if you want it to loop. &#039;&#039;&#039;Todo: If the value is higher, will it do sth different, like play the animation n times?&#039;&#039;&#039;&lt;br /&gt;
# With the skeleton selected, press &#039;&#039;&#039;File &amp;gt; Export &amp;gt; Phoenix Animation (.anm)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Event Keyframes==&lt;br /&gt;
Event keyframes are used to tell the game at which moment of an animation an event is going to happen. This is used to trigger attack impacts and footstep sounds among other things.&lt;br /&gt;
An event is saved as a &#039;&#039;Custom Property&#039;&#039; of a bone in the Blender files shipped with the game.&lt;br /&gt;
&#039;&#039;&#039;TODO: Maybe a list with event keyframes could be helpful? &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Event !! Applyable to !! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| attackimpact || every bone || Doesn&#039;t matter ? || Will trigger the actual impact while attacking a character&lt;br /&gt;
|-&lt;br /&gt;
| rightrunstep || every bone || Doesn&#039;t matter ? Sound volume ?|| Will trigger footstepsound, particles and IK ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Adding an event Keyframe to your animation===&lt;br /&gt;
# Select the 3rd of the rig&#039;s layers from the bottom right.&#039;&#039;&#039;TODO: ADD IMAGE&#039;&#039;&#039; The bones should be named &amp;lt;code&amp;gt;DEF-&amp;lt;Bonename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Select the appropriate bone for the event you want to trigger while being in pose mode&lt;br /&gt;
# Set the playhead in the timeline to the moment you want the event to happen&lt;br /&gt;
# In the &#039;&#039;&#039;Properties&#039;&#039;&#039; &amp;quot;editor type&amp;quot;, (&#039;&#039;&#039;TODO: Better name for this? If not, remove&#039;&#039;&#039;) press &#039;&#039;&#039;Bone&#039;&#039;&#039; and scroll down to &#039;&#039;&#039;Custom Properties&#039;&#039;&#039;&lt;br /&gt;
# Hover over the property that corresponds to the event you want to trigger and press &#039;&#039;&#039;I&#039;&#039;&#039; to add a keyframe. (Value doesn&#039;t matter &#039;&#039;&#039;TODO: is this true for every event keyframe? Or at all?&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==Animating Morph Targets==&lt;br /&gt;
&#039;&#039;&#039;Todo: Add this section&#039;&#039;&#039;&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5990</id>
		<title>Custom Characters</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5990"/>
		<updated>2018-04-10T20:09:18Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Rigging the Character */ Removed &amp;#039;&amp;#039;&amp;#039;TODO: What file is supposed to be used as a base?...; Removed TODO: Is this correct?; Changed Text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{About||custom character scripts|Character_Scripting}}&lt;br /&gt;
&#039;&#039;&#039;TODO: Put this link graciously provided by Markuss in its appropriate section:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
https://cdn.wolfire.com/techsupport/ExampleMan.zip&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Write introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[[Image:custom_character_file_structure.png|right|thumb|caption|All required files and what they contain]]&lt;br /&gt;
&lt;br /&gt;
Characters in overgrowth consist of the following files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! File format !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Script&lt;br /&gt;
| XML || Links the character xml with an AI script&lt;br /&gt;
|-&lt;br /&gt;
! Character&lt;br /&gt;
| XML || Links an object xml with rigging data, animations and attacks&lt;br /&gt;
|-&lt;br /&gt;
! Object&lt;br /&gt;
| XML || A regular object xml file, links to a model and textures&lt;br /&gt;
|-&lt;br /&gt;
! Rigging data&lt;br /&gt;
| XML || Links a model and a skeleton together so the model can be animated&lt;br /&gt;
|-&lt;br /&gt;
! Textures&lt;br /&gt;
| TGA || The textures used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Model&lt;br /&gt;
| OBJ || The 3D mesh used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Hull&lt;br /&gt;
| OBJ || The simplified collision to use for the character&lt;br /&gt;
|-&lt;br /&gt;
! Skeleton&lt;br /&gt;
| PHXBN || The bone structure used by the character for animation&lt;br /&gt;
|-&lt;br /&gt;
! Ragdoll collision&lt;br /&gt;
| FZX || Convex hulls used for ragdoll physics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create a character for Overgrowth you need to...&lt;br /&gt;
# Model and texture the character; [[#Model_and_Texture_Considerations|be sure to get these points right]]&lt;br /&gt;
# &#039;&#039;&#039;Optional:&#039;&#039;&#039; Create a simplified hull model for collision&lt;br /&gt;
:::&#039;&#039;&#039;Note:&#039;&#039;&#039; Thrown weapons won&#039;t collide with characters if they don&#039;t have a hull-object.&lt;br /&gt;
# [[#Rigging_the_Character|Rig the character using one of the included skeletons and export it to the &#039;&#039;&#039;.phxbn&#039;&#039;&#039; format]]&lt;br /&gt;
# [[#Object_XML|Create an object XML linking the model and the texture]]&lt;br /&gt;
# [[#Rigging_data_XML|Create a rigging data XML linking the model and the skeleton]]&lt;br /&gt;
# [[#Character_XML|Create a character XML linking the rigging data XML and the object XML with a set of attacks and animations the character should use]]&lt;br /&gt;
# [[#Script_XML|Create a script XML linking the character XML with an AI script]]&lt;br /&gt;
&lt;br /&gt;
The final script XML is the file that&#039;s actually loaded in the game to create the character. This article goes through all the above steps.&lt;br /&gt;
&lt;br /&gt;
== Model and Texture Considerations ==&lt;br /&gt;
[[Image:ExampleMan_mesh.jpg|thumb|Character Model Faces Z-axis and has reset ]]&lt;br /&gt;
The model and textures for the character have the same requirements as when creating any other [[3D Objects|3D Object]], but with a few extra considerations.&lt;br /&gt;
&lt;br /&gt;
It&#039;s extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: &#039;&#039;../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the [[3D_Objects#Shaders|3D Objects]] article.&lt;br /&gt;
&lt;br /&gt;
[[Image:ExampleMan_Norm.jpg|thumb|This is what a Blank/Flat object-space normal map might look like]]&lt;br /&gt;
&lt;br /&gt;
=== Fur Fins ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Write about how fur fins work&lt;br /&gt;
&lt;br /&gt;
== Rigging the Character ==&lt;br /&gt;
Overgrowth uses one of the custom [[Binary_File_Formats|binary file formats]], namely the [[Binary_File_Formats#PHXBN|PHXBN (Phoenix Bones) format]] to store skeletons. To export a skeleton to a PHXBN file you need to use Wolfire&#039;s custom export addon for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here]. You may need to restart the program once to get the export options to show up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: How do you set this up yourself, if you&#039;re not using Windows for instance?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This article won&#039;t teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, [https://cgcookie.com CG Cookie] has a good free video tutorial series that introduces you to the software.&lt;br /&gt;
&lt;br /&gt;
Here are the steps you need to take in Blender to create the PHXBN file:&lt;br /&gt;
&lt;br /&gt;
# Open &#039;&#039;&#039;Data\BlendFiles\rabbit_rig.blend&#039;&#039;&#039; in Blender 2.55 with the PHXBN-add-on installed&lt;br /&gt;
:::&#039;&#039;&#039;Note:&#039;&#039;&#039; If you download Blender from the link provided at the top of this page, the right file is already loaded.&lt;br /&gt;
# Replace the white/pink rabbit&lt;br /&gt;
#* Press &#039;&#039;&#039;File &amp;gt; Import &amp;gt; Wavefront (.obj)&#039;&#039;&#039; to import an obj file.&lt;br /&gt;
# Bind your own mesh to the skeleton&lt;br /&gt;
#* First select the mesh, then shift-select the skeleton to add it to your selection before you press Ctrl + P and select &#039;&#039;&#039;Armature Deform → With Empty Groups/With Envelope Weights/With Automatic Weights&#039;&#039;&#039; depending on what you want to bind them.&lt;br /&gt;
# Paint weights if you need to, or use the automatic weights&lt;br /&gt;
#* You may want to look up a tutorial on painting weights in blender.&lt;br /&gt;
#* It is recommended that you test your character in engine with automatic weights to check that you have no errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on if the character is going to work in the engine.&lt;br /&gt;
# Export your files&lt;br /&gt;
#* With skeleton selected in object mode, export as .PHXBN, same for mesh but as .OBJ. Your model needs to be in rest position when doing this.&lt;br /&gt;
&lt;br /&gt;
== Object XML ==&lt;br /&gt;
This is a regular object file as described in the [[3D_Objects#Basics | 3D reference guide]]. Note that the ShaderName flags (like #TANGENT for instance) don&#039;t make any difference for characters since they use a pre-detemined path through the uber shader.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Object&amp;gt;&lt;br /&gt;
    &amp;lt;Model&amp;gt;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;lt;/Model&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;envobject&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/Object&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rigging data XML ==&lt;br /&gt;
Links to the .OBJ and .PHXBN files that the engine needs to rig the character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;rig bone_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.phxbn&amp;quot;&lt;br /&gt;
     model_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Character XML ==&lt;br /&gt;
Links to the object XML and rigging data XML files as well as the animations and attacks the character will use.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;character&amp;gt;&lt;br /&gt;
    &amp;lt;appearance obj_path = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_Object.xml&amp;quot;&lt;br /&gt;
                skeleton = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_RigFiles.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;animations idle = &amp;quot;Data/Animations/r_idle2.xml&amp;quot;&lt;br /&gt;
                jump = &amp;quot;Data/Animations/r_jump.xml&amp;quot;&lt;br /&gt;
                roll = &amp;quot;Data/Animations/r_roll.xml&amp;quot;&lt;br /&gt;
                movement = &amp;quot;Data/Animations/r_movement.xml&amp;quot;&lt;br /&gt;
                wall = &amp;quot;Data/Animations/r_wall.xml&amp;quot;&lt;br /&gt;
                ledge = &amp;quot;Data/Animations/r_ledge.anm&amp;quot;&lt;br /&gt;
                medrightblock = &amp;quot;Data/Animations/r_activeblockmedright.anm&amp;quot;&lt;br /&gt;
                medleftblock = &amp;quot;Data/Animations/r_activeblockmedleft.anm&amp;quot;&lt;br /&gt;
                highrightblock = &amp;quot;Data/Animations/r_activeblockhighright.anm&amp;quot;&lt;br /&gt;
                highleftblock = &amp;quot;Data/Animations/r_activeblockhighleft.anm&amp;quot;&lt;br /&gt;
                lowrightblock = &amp;quot;Data/Animations/r_activeblocklowright.anm&amp;quot;&lt;br /&gt;
                lowleftblock = &amp;quot;Data/Animations/r_activeblocklowleft.anm&amp;quot;&lt;br /&gt;
                blockflinch = &amp;quot;Data/Animations/r_activeblockflinch.anm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;attacks moving_close = &amp;quot;Data/Attacks/haymaker.xml&amp;quot;&lt;br /&gt;
             stationary_close = &amp;quot;Data/Attacks/thrustpunch.xml&amp;quot;&lt;br /&gt;
             moving = &amp;quot;Data/Attacks/spinkick.xml&amp;quot;&lt;br /&gt;
             stationary = &amp;quot;Data/Attacks/frontkick.xml&amp;quot;&lt;br /&gt;
             moving_low = &amp;quot;Data/Attacks/soccerkick.xml&amp;quot;&lt;br /&gt;
             low = &amp;quot;Data/Attacks/sweep.xml&amp;quot;&lt;br /&gt;
             air = &amp;quot;Data/Attacks/legcannon.xml&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/character&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script XML ==&lt;br /&gt;
Links to the character XML file and an AI script, this is the file you choose when loading a character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Actor&amp;gt;&lt;br /&gt;
    &amp;lt;Character&amp;gt;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_AnimList.xml&amp;lt;/Character&amp;gt;&lt;br /&gt;
    &amp;lt;ControlScript&amp;gt;enemycontrol.as&amp;lt;/ControlScript&amp;gt;&lt;br /&gt;
&amp;lt;/Actor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding Characters to the spawner menu ==&lt;br /&gt;
&lt;br /&gt;
Short version:&lt;br /&gt;
* You must add it in a mod.&lt;br /&gt;
* You can add as many characters to the spawner menu as you want in a single mod, you just need to follow the below instructions for each, and add multiple &amp;lt;code&amp;gt;&amp;lt;Item&amp;gt;&amp;lt;/code&amp;gt; tags to your mod.xml file.&lt;br /&gt;
&lt;br /&gt;
In your mod.xml file, add this xml tag:&lt;br /&gt;
(&#039;&#039;&#039;TODO&#039;&#039;&#039;: Make these paths more specific to characters)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;Item category=&amp;quot;My Custom Mod Characters&amp;quot;&lt;br /&gt;
      title=&amp;quot;Some Character To Spawn&amp;quot;&lt;br /&gt;
      path=&amp;quot;Data/Objects/example_item_pack/mod_item_example.xml&amp;quot;&lt;br /&gt;
      thumbnail=&amp;quot;Data/UI/example_item_pack/thumbs/mod_item_example.png&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the top level category where the character will show up, in the &#039;&#039;&#039;Load&#039;&#039;&#039; menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the name of the character, as it will show up in the spawner menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the path to the character XML that will get spawned. See [[#How_to_create_a_character|the &#039;&#039;&#039;How to create a character&#039;&#039;&#039; section]] for which XML file to target (either the character XML itself, or a version you saved off that has modified default parameters).  &#039;&#039;&#039;TODO&#039;&#039;&#039;: Be careful to advise &#039;&#039;which&#039;&#039; character XML to add to the spawner - there are multiple character XML files!&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;thumbnail&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the image that will be used for a tooltip when you hover over your character in the spawner menu.&lt;br /&gt;
&lt;br /&gt;
See &#039;&#039;&#039;&amp;lt;code&amp;gt;GameInstallDir/Data/ExampleMods/mod_xml_specification.txt&amp;lt;/code&amp;gt;&#039;&#039;&#039; for full information.&lt;br /&gt;
&lt;br /&gt;
== TODOs ==&lt;br /&gt;
&#039;&#039;&#039;TODO: Make sure all these headings are covered in this or some other article that we link to&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== File path conventions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Description of where to add files in mods so they don&#039;t conflict. Ala [[Hotspots#File_path_conventions]]&lt;br /&gt;
&lt;br /&gt;
=== Hull ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on character hulls&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on animations and export, tagging, etc&lt;br /&gt;
&lt;br /&gt;
=== Morph targets ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for hands, face, etc&lt;br /&gt;
&lt;br /&gt;
=== Eyes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)&lt;br /&gt;
&lt;br /&gt;
=== Attacks ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on attacks system and export, tagging, etc - related partly to animations.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Possibly also scripting attacks and animations, and character-bound input, etc - though maybe that should be in a different section?&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5989</id>
		<title>Custom Characters</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5989"/>
		<updated>2018-04-10T19:43:35Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Overview */ Removed   &amp;#039;&amp;#039;&amp;#039;TODO: Link all the below steps to parts of this page&amp;#039;&amp;#039;&amp;#039;; removed &amp;#039;&amp;#039;&amp;#039;TODO: What do you need to export? The skeleton? Only the weight painted mesh?&amp;#039;&amp;#039;&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{About||custom character scripts|Character_Scripting}}&lt;br /&gt;
&#039;&#039;&#039;TODO: Put this link graciously provided by Markuss in its appropriate section:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
https://cdn.wolfire.com/techsupport/ExampleMan.zip&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Write introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[[Image:custom_character_file_structure.png|right|thumb|caption|All required files and what they contain]]&lt;br /&gt;
&lt;br /&gt;
Characters in overgrowth consist of the following files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! File format !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Script&lt;br /&gt;
| XML || Links the character xml with an AI script&lt;br /&gt;
|-&lt;br /&gt;
! Character&lt;br /&gt;
| XML || Links an object xml with rigging data, animations and attacks&lt;br /&gt;
|-&lt;br /&gt;
! Object&lt;br /&gt;
| XML || A regular object xml file, links to a model and textures&lt;br /&gt;
|-&lt;br /&gt;
! Rigging data&lt;br /&gt;
| XML || Links a model and a skeleton together so the model can be animated&lt;br /&gt;
|-&lt;br /&gt;
! Textures&lt;br /&gt;
| TGA || The textures used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Model&lt;br /&gt;
| OBJ || The 3D mesh used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Hull&lt;br /&gt;
| OBJ || The simplified collision to use for the character&lt;br /&gt;
|-&lt;br /&gt;
! Skeleton&lt;br /&gt;
| PHXBN || The bone structure used by the character for animation&lt;br /&gt;
|-&lt;br /&gt;
! Ragdoll collision&lt;br /&gt;
| FZX || Convex hulls used for ragdoll physics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To create a character for Overgrowth you need to...&lt;br /&gt;
# Model and texture the character; [[#Model_and_Texture_Considerations|be sure to get these points right]]&lt;br /&gt;
# &#039;&#039;&#039;Optional:&#039;&#039;&#039; Create a simplified hull model for collision&lt;br /&gt;
:::&#039;&#039;&#039;Note:&#039;&#039;&#039; Thrown weapons won&#039;t collide with characters if they don&#039;t have a hull-object.&lt;br /&gt;
# [[#Rigging_the_Character|Rig the character using one of the included skeletons and export it to the &#039;&#039;&#039;.phxbn&#039;&#039;&#039; format]]&lt;br /&gt;
# [[#Object_XML|Create an object XML linking the model and the texture]]&lt;br /&gt;
# [[#Rigging_data_XML|Create a rigging data XML linking the model and the skeleton]]&lt;br /&gt;
# [[#Character_XML|Create a character XML linking the rigging data XML and the object XML with a set of attacks and animations the character should use]]&lt;br /&gt;
# [[#Script_XML|Create a script XML linking the character XML with an AI script]]&lt;br /&gt;
&lt;br /&gt;
The final script XML is the file that&#039;s actually loaded in the game to create the character. This article goes through all the above steps.&lt;br /&gt;
&lt;br /&gt;
== Model and Texture Considerations ==&lt;br /&gt;
[[Image:ExampleMan_mesh.jpg|thumb|Character Model Faces Z-axis and has reset ]]&lt;br /&gt;
The model and textures for the character have the same requirements as when creating any other [[3D Objects|3D Object]], but with a few extra considerations.&lt;br /&gt;
&lt;br /&gt;
It&#039;s extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: &#039;&#039;../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the [[3D_Objects#Shaders|3D Objects]] article.&lt;br /&gt;
&lt;br /&gt;
[[Image:ExampleMan_Norm.jpg|thumb|This is what a Blank/Flat object-space normal map might look like]]&lt;br /&gt;
&lt;br /&gt;
=== Fur Fins ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Write about how fur fins work&lt;br /&gt;
&lt;br /&gt;
== Rigging the Character ==&lt;br /&gt;
Overgrowth uses a custom skeleton format for characters with the PHXBN (Phoenix Bone &#039;&#039;&#039;TODO: Is this correct?&#039;&#039;&#039;) file ending. To create this file you need to use Wolfire&#039;s custom export addons for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here]. You may need to restart the program once to get the export options to show up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: How do you set this up yourself, if you&#039;re not using Windows for instance?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This article won&#039;t teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, [https://cgcookie.com CG Cookie] has a good free video tutorial series that introduces you to the software.&lt;br /&gt;
&lt;br /&gt;
Here are the steps you need to take in Blender to create the PHXBN file:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;TODO: What file is supposed to be used as a base? It&#039;s probably already loaded by default in the custom Blender version that can be downloaded above, but what file is that actually? So people can set this up on their own if they want.&#039;&#039;&#039;&lt;br /&gt;
# Replace the white rabbit&lt;br /&gt;
#* Press &#039;&#039;&#039;File &amp;gt; Import &amp;gt; Wavefront (.obj)&#039;&#039;&#039; to import an obj file.&lt;br /&gt;
# Bind your own mesh to the skeleton&lt;br /&gt;
#* First select the mesh, then shift-select the skeleton to add it to your selection before you press Ctrl + P and select &#039;&#039;&#039;Armature Deform → With Empty Groups/With Envelope Weights/With Automatic Weights&#039;&#039;&#039; depending on what you want to bind them.&lt;br /&gt;
# Paint weights if you need to, or use the automatic weights&lt;br /&gt;
#* You may want to look up a tutorial on painting weights in blender.&lt;br /&gt;
#* It is recommended that you test your character in engine with automatic weights to check that you have no errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on if the character is going to work in the engine.&lt;br /&gt;
# Export your files&lt;br /&gt;
#* With skeleton selected in object mode, export as .PHXBN, same for mesh but as .OBJ. Your model needs to be in rest position when doing this.&lt;br /&gt;
&lt;br /&gt;
== Object XML ==&lt;br /&gt;
This is a regular object file as described in the [[3D_Objects#Basics | 3D reference guide]]. Note that the ShaderName flags (like #TANGENT for instance) don&#039;t make any difference for characters since they use a pre-detemined path through the uber shader.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Object&amp;gt;&lt;br /&gt;
    &amp;lt;Model&amp;gt;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;lt;/Model&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;envobject&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/Object&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rigging data XML ==&lt;br /&gt;
Links to the .OBJ and .PHXBN files that the engine needs to rig the character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;rig bone_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.phxbn&amp;quot;&lt;br /&gt;
     model_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Character XML ==&lt;br /&gt;
Links to the object XML and rigging data XML files as well as the animations and attacks the character will use.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;character&amp;gt;&lt;br /&gt;
    &amp;lt;appearance obj_path = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_Object.xml&amp;quot;&lt;br /&gt;
                skeleton = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_RigFiles.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;animations idle = &amp;quot;Data/Animations/r_idle2.xml&amp;quot;&lt;br /&gt;
                jump = &amp;quot;Data/Animations/r_jump.xml&amp;quot;&lt;br /&gt;
                roll = &amp;quot;Data/Animations/r_roll.xml&amp;quot;&lt;br /&gt;
                movement = &amp;quot;Data/Animations/r_movement.xml&amp;quot;&lt;br /&gt;
                wall = &amp;quot;Data/Animations/r_wall.xml&amp;quot;&lt;br /&gt;
                ledge = &amp;quot;Data/Animations/r_ledge.anm&amp;quot;&lt;br /&gt;
                medrightblock = &amp;quot;Data/Animations/r_activeblockmedright.anm&amp;quot;&lt;br /&gt;
                medleftblock = &amp;quot;Data/Animations/r_activeblockmedleft.anm&amp;quot;&lt;br /&gt;
                highrightblock = &amp;quot;Data/Animations/r_activeblockhighright.anm&amp;quot;&lt;br /&gt;
                highleftblock = &amp;quot;Data/Animations/r_activeblockhighleft.anm&amp;quot;&lt;br /&gt;
                lowrightblock = &amp;quot;Data/Animations/r_activeblocklowright.anm&amp;quot;&lt;br /&gt;
                lowleftblock = &amp;quot;Data/Animations/r_activeblocklowleft.anm&amp;quot;&lt;br /&gt;
                blockflinch = &amp;quot;Data/Animations/r_activeblockflinch.anm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;attacks moving_close = &amp;quot;Data/Attacks/haymaker.xml&amp;quot;&lt;br /&gt;
             stationary_close = &amp;quot;Data/Attacks/thrustpunch.xml&amp;quot;&lt;br /&gt;
             moving = &amp;quot;Data/Attacks/spinkick.xml&amp;quot;&lt;br /&gt;
             stationary = &amp;quot;Data/Attacks/frontkick.xml&amp;quot;&lt;br /&gt;
             moving_low = &amp;quot;Data/Attacks/soccerkick.xml&amp;quot;&lt;br /&gt;
             low = &amp;quot;Data/Attacks/sweep.xml&amp;quot;&lt;br /&gt;
             air = &amp;quot;Data/Attacks/legcannon.xml&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/character&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script XML ==&lt;br /&gt;
Links to the character XML file and an AI script, this is the file you choose when loading a character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Actor&amp;gt;&lt;br /&gt;
    &amp;lt;Character&amp;gt;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_AnimList.xml&amp;lt;/Character&amp;gt;&lt;br /&gt;
    &amp;lt;ControlScript&amp;gt;enemycontrol.as&amp;lt;/ControlScript&amp;gt;&lt;br /&gt;
&amp;lt;/Actor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding Characters to the spawner menu ==&lt;br /&gt;
&lt;br /&gt;
Short version:&lt;br /&gt;
* You must add it in a mod.&lt;br /&gt;
* You can add as many characters to the spawner menu as you want in a single mod, you just need to follow the below instructions for each, and add multiple &amp;lt;code&amp;gt;&amp;lt;Item&amp;gt;&amp;lt;/code&amp;gt; tags to your mod.xml file.&lt;br /&gt;
&lt;br /&gt;
In your mod.xml file, add this xml tag:&lt;br /&gt;
(&#039;&#039;&#039;TODO&#039;&#039;&#039;: Make these paths more specific to characters)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;Item category=&amp;quot;My Custom Mod Characters&amp;quot;&lt;br /&gt;
      title=&amp;quot;Some Character To Spawn&amp;quot;&lt;br /&gt;
      path=&amp;quot;Data/Objects/example_item_pack/mod_item_example.xml&amp;quot;&lt;br /&gt;
      thumbnail=&amp;quot;Data/UI/example_item_pack/thumbs/mod_item_example.png&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the top level category where the character will show up, in the &#039;&#039;&#039;Load&#039;&#039;&#039; menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the name of the character, as it will show up in the spawner menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the path to the character XML that will get spawned. See [[#How_to_create_a_character|the &#039;&#039;&#039;How to create a character&#039;&#039;&#039; section]] for which XML file to target (either the character XML itself, or a version you saved off that has modified default parameters).  &#039;&#039;&#039;TODO&#039;&#039;&#039;: Be careful to advise &#039;&#039;which&#039;&#039; character XML to add to the spawner - there are multiple character XML files!&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;thumbnail&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the image that will be used for a tooltip when you hover over your character in the spawner menu.&lt;br /&gt;
&lt;br /&gt;
See &#039;&#039;&#039;&amp;lt;code&amp;gt;GameInstallDir/Data/ExampleMods/mod_xml_specification.txt&amp;lt;/code&amp;gt;&#039;&#039;&#039; for full information.&lt;br /&gt;
&lt;br /&gt;
== TODOs ==&lt;br /&gt;
&#039;&#039;&#039;TODO: Make sure all these headings are covered in this or some other article that we link to&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== File path conventions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Description of where to add files in mods so they don&#039;t conflict. Ala [[Hotspots#File_path_conventions]]&lt;br /&gt;
&lt;br /&gt;
=== Hull ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on character hulls&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on animations and export, tagging, etc&lt;br /&gt;
&lt;br /&gt;
=== Morph targets ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for hands, face, etc&lt;br /&gt;
&lt;br /&gt;
=== Eyes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)&lt;br /&gt;
&lt;br /&gt;
=== Attacks ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on attacks system and export, tagging, etc - related partly to animations.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Possibly also scripting attacks and animations, and character-bound input, etc - though maybe that should be in a different section?&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5988</id>
		<title>Custom Characters</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5988"/>
		<updated>2018-04-10T19:25:10Z</updated>

		<summary type="html">&lt;p&gt;Mng: /*Top*/ Added hatnote.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{About||custom character scripts|Character_Scripting}}&lt;br /&gt;
&#039;&#039;&#039;TODO: Put this link graciously provided by Markuss in its appropriate section:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
https://cdn.wolfire.com/techsupport/ExampleMan.zip&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Write introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[[Image:custom_character_file_structure.png|right|thumb|caption|All required files and what they contain]]&lt;br /&gt;
&lt;br /&gt;
Characters in overgrowth consist of the following files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! File format !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Script&lt;br /&gt;
| XML || Links the character xml with an AI script&lt;br /&gt;
|-&lt;br /&gt;
! Character&lt;br /&gt;
| XML || Links an object xml with rigging data, animations and attacks&lt;br /&gt;
|-&lt;br /&gt;
! Object&lt;br /&gt;
| XML || A regular object xml file, links to a model and textures&lt;br /&gt;
|-&lt;br /&gt;
! Rigging data&lt;br /&gt;
| XML || Links a model and a skeleton together so the model can be animated&lt;br /&gt;
|-&lt;br /&gt;
! Textures&lt;br /&gt;
| TGA || The textures used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Model&lt;br /&gt;
| OBJ || The 3D mesh used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Hull&lt;br /&gt;
| OBJ || The simplified collision to use for the character&lt;br /&gt;
|-&lt;br /&gt;
! Skeleton&lt;br /&gt;
| PHXBN || The bone structure used by the character for animation&lt;br /&gt;
|-&lt;br /&gt;
! Ragdoll collision&lt;br /&gt;
| FZX || Convex hulls used for ragdoll physics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Link all the below steps to parts of this page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To create a character for Overgrowth you need to..&lt;br /&gt;
# Model and texture the character&lt;br /&gt;
# &#039;&#039;&#039;Optional:&#039;&#039;&#039; Create a simplified hull model for collision. &lt;br /&gt;
:::&#039;&#039;&#039;Note:&#039;&#039;&#039; Thrown weapons won&#039;t collide with characters if they don&#039;t have a hull-object.&lt;br /&gt;
# Rig the character using one of the included skeletons&lt;br /&gt;
# &#039;&#039;&#039;TODO: What do you need to export? The skeleton? Only the weight painted mesh?&#039;&#039;&#039;&lt;br /&gt;
# Create an object XML linking the model and the texture&lt;br /&gt;
# Create a rigging data XML linking the model and the skeleton&lt;br /&gt;
# Create a character XML linking the rigging data XML and the object XML with a set of attacks and animations the character should use&lt;br /&gt;
# Create a script XML linking the character XML with an AI script&lt;br /&gt;
&lt;br /&gt;
The final script XML is the file that&#039;s actually loaded in the game to create the character. This article goes through all the above steps.&lt;br /&gt;
&lt;br /&gt;
== Model and Texture Considerations ==&lt;br /&gt;
[[Image:ExampleMan_mesh.jpg|thumb|Character Model Faces Z-axis and has reset ]]&lt;br /&gt;
The model and textures for the character have the same requirements as when creating any other [[3D Objects|3D Object]], but with a few extra considerations.&lt;br /&gt;
&lt;br /&gt;
It&#039;s extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: &#039;&#039;../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the [[3D_Objects#Shaders|3D Objects]] article.&lt;br /&gt;
&lt;br /&gt;
[[Image:ExampleMan_Norm.jpg|thumb|This is what a Blank/Flat object-space normal map might look like]]&lt;br /&gt;
&lt;br /&gt;
=== Fur Fins ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Write about how fur fins work&lt;br /&gt;
&lt;br /&gt;
== Rigging the Character ==&lt;br /&gt;
Overgrowth uses a custom skeleton format for characters with the PHXBN (Phoenix Bone &#039;&#039;&#039;TODO: Is this correct?&#039;&#039;&#039;) file ending. To create this file you need to use Wolfire&#039;s custom export addons for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here]. You may need to restart the program once to get the export options to show up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: How do you set this up yourself, if you&#039;re not using Windows for instance?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This article won&#039;t teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, [https://cgcookie.com CG Cookie] has a good free video tutorial series that introduces you to the software.&lt;br /&gt;
&lt;br /&gt;
Here are the steps you need to take in Blender to create the PHXBN file:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;TODO: What file is supposed to be used as a base? It&#039;s probably already loaded by default in the custom Blender version that can be downloaded above, but what file is that actually? So people can set this up on their own if they want.&#039;&#039;&#039;&lt;br /&gt;
# Replace the white rabbit&lt;br /&gt;
#* Press &#039;&#039;&#039;File &amp;gt; Import &amp;gt; Wavefront (.obj)&#039;&#039;&#039; to import an obj file.&lt;br /&gt;
# Bind your own mesh to the skeleton&lt;br /&gt;
#* First select the mesh, then shift-select the skeleton to add it to your selection before you press Ctrl + P and select &#039;&#039;&#039;Armature Deform → With Empty Groups/With Envelope Weights/With Automatic Weights&#039;&#039;&#039; depending on what you want to bind them.&lt;br /&gt;
# Paint weights if you need to, or use the automatic weights&lt;br /&gt;
#* You may want to look up a tutorial on painting weights in blender.&lt;br /&gt;
#* It is recommended that you test your character in engine with automatic weights to check that you have no errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on if the character is going to work in the engine.&lt;br /&gt;
# Export your files&lt;br /&gt;
#* With skeleton selected in object mode, export as .PHXBN, same for mesh but as .OBJ. Your model needs to be in rest position when doing this.&lt;br /&gt;
&lt;br /&gt;
== Object XML ==&lt;br /&gt;
This is a regular object file as described in the [[3D_Objects#Basics | 3D reference guide]]. Note that the ShaderName flags (like #TANGENT for instance) don&#039;t make any difference for characters since they use a pre-detemined path through the uber shader.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Object&amp;gt;&lt;br /&gt;
    &amp;lt;Model&amp;gt;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;lt;/Model&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;envobject&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/Object&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rigging data XML ==&lt;br /&gt;
Links to the .OBJ and .PHXBN files that the engine needs to rig the character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;rig bone_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.phxbn&amp;quot;&lt;br /&gt;
     model_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Character XML ==&lt;br /&gt;
Links to the object XML and rigging data XML files as well as the animations and attacks the character will use.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;character&amp;gt;&lt;br /&gt;
    &amp;lt;appearance obj_path = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_Object.xml&amp;quot;&lt;br /&gt;
                skeleton = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_RigFiles.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;animations idle = &amp;quot;Data/Animations/r_idle2.xml&amp;quot;&lt;br /&gt;
                jump = &amp;quot;Data/Animations/r_jump.xml&amp;quot;&lt;br /&gt;
                roll = &amp;quot;Data/Animations/r_roll.xml&amp;quot;&lt;br /&gt;
                movement = &amp;quot;Data/Animations/r_movement.xml&amp;quot;&lt;br /&gt;
                wall = &amp;quot;Data/Animations/r_wall.xml&amp;quot;&lt;br /&gt;
                ledge = &amp;quot;Data/Animations/r_ledge.anm&amp;quot;&lt;br /&gt;
                medrightblock = &amp;quot;Data/Animations/r_activeblockmedright.anm&amp;quot;&lt;br /&gt;
                medleftblock = &amp;quot;Data/Animations/r_activeblockmedleft.anm&amp;quot;&lt;br /&gt;
                highrightblock = &amp;quot;Data/Animations/r_activeblockhighright.anm&amp;quot;&lt;br /&gt;
                highleftblock = &amp;quot;Data/Animations/r_activeblockhighleft.anm&amp;quot;&lt;br /&gt;
                lowrightblock = &amp;quot;Data/Animations/r_activeblocklowright.anm&amp;quot;&lt;br /&gt;
                lowleftblock = &amp;quot;Data/Animations/r_activeblocklowleft.anm&amp;quot;&lt;br /&gt;
                blockflinch = &amp;quot;Data/Animations/r_activeblockflinch.anm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;attacks moving_close = &amp;quot;Data/Attacks/haymaker.xml&amp;quot;&lt;br /&gt;
             stationary_close = &amp;quot;Data/Attacks/thrustpunch.xml&amp;quot;&lt;br /&gt;
             moving = &amp;quot;Data/Attacks/spinkick.xml&amp;quot;&lt;br /&gt;
             stationary = &amp;quot;Data/Attacks/frontkick.xml&amp;quot;&lt;br /&gt;
             moving_low = &amp;quot;Data/Attacks/soccerkick.xml&amp;quot;&lt;br /&gt;
             low = &amp;quot;Data/Attacks/sweep.xml&amp;quot;&lt;br /&gt;
             air = &amp;quot;Data/Attacks/legcannon.xml&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/character&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script XML ==&lt;br /&gt;
Links to the character XML file and an AI script, this is the file you choose when loading a character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Actor&amp;gt;&lt;br /&gt;
    &amp;lt;Character&amp;gt;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_AnimList.xml&amp;lt;/Character&amp;gt;&lt;br /&gt;
    &amp;lt;ControlScript&amp;gt;enemycontrol.as&amp;lt;/ControlScript&amp;gt;&lt;br /&gt;
&amp;lt;/Actor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding Characters to the spawner menu ==&lt;br /&gt;
&lt;br /&gt;
Short version:&lt;br /&gt;
* You must add it in a mod.&lt;br /&gt;
* You can add as many characters to the spawner menu as you want in a single mod, you just need to follow the below instructions for each, and add multiple &amp;lt;code&amp;gt;&amp;lt;Item&amp;gt;&amp;lt;/code&amp;gt; tags to your mod.xml file.&lt;br /&gt;
&lt;br /&gt;
In your mod.xml file, add this xml tag:&lt;br /&gt;
(&#039;&#039;&#039;TODO&#039;&#039;&#039;: Make these paths more specific to characters)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;Item category=&amp;quot;My Custom Mod Characters&amp;quot;&lt;br /&gt;
      title=&amp;quot;Some Character To Spawn&amp;quot;&lt;br /&gt;
      path=&amp;quot;Data/Objects/example_item_pack/mod_item_example.xml&amp;quot;&lt;br /&gt;
      thumbnail=&amp;quot;Data/UI/example_item_pack/thumbs/mod_item_example.png&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the top level category where the character will show up, in the &#039;&#039;&#039;Load&#039;&#039;&#039; menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the name of the character, as it will show up in the spawner menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the path to the character XML that will get spawned. See [[#How_to_create_a_character|the &#039;&#039;&#039;How to create a character&#039;&#039;&#039; section]] for which XML file to target (either the character XML itself, or a version you saved off that has modified default parameters).  &#039;&#039;&#039;TODO&#039;&#039;&#039;: Be careful to advise &#039;&#039;which&#039;&#039; character XML to add to the spawner - there are multiple character XML files!&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;thumbnail&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the image that will be used for a tooltip when you hover over your character in the spawner menu.&lt;br /&gt;
&lt;br /&gt;
See &#039;&#039;&#039;&amp;lt;code&amp;gt;GameInstallDir/Data/ExampleMods/mod_xml_specification.txt&amp;lt;/code&amp;gt;&#039;&#039;&#039; for full information.&lt;br /&gt;
&lt;br /&gt;
== TODOs ==&lt;br /&gt;
&#039;&#039;&#039;TODO: Make sure all these headings are covered in this or some other article that we link to&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== File path conventions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Description of where to add files in mods so they don&#039;t conflict. Ala [[Hotspots#File_path_conventions]]&lt;br /&gt;
&lt;br /&gt;
=== Hull ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on character hulls&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on animations and export, tagging, etc&lt;br /&gt;
&lt;br /&gt;
=== Morph targets ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for hands, face, etc&lt;br /&gt;
&lt;br /&gt;
=== Eyes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)&lt;br /&gt;
&lt;br /&gt;
=== Attacks ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on attacks system and export, tagging, etc - related partly to animations.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Possibly also scripting attacks and animations, and character-bound input, etc - though maybe that should be in a different section?&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5951</id>
		<title>Custom Characters</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Characters&amp;diff=5951"/>
		<updated>2018-03-27T07:34:00Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Overview */ Removed &amp;#039;&amp;#039;&amp;#039;TODO: Is this required?&amp;#039;&amp;#039;&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;TODO: Put this link graciously provided by Markuss in its appropriate section:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
https://cdn.wolfire.com/techsupport/ExampleMan.zip&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Write introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[[Image:custom_character_file_structure.png|right|thumb|caption|All required files and what they contain]]&lt;br /&gt;
&lt;br /&gt;
Characters in overgrowth consist of the following files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! File format !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Script&lt;br /&gt;
| XML || Links the character xml with an AI script&lt;br /&gt;
|-&lt;br /&gt;
! Character&lt;br /&gt;
| XML || Links an object xml with rigging data, animations and attacks&lt;br /&gt;
|-&lt;br /&gt;
! Object&lt;br /&gt;
| XML || A regular object xml file, links to a model and textures&lt;br /&gt;
|-&lt;br /&gt;
! Rigging data&lt;br /&gt;
| XML || Links a model and a skeleton together so the model can be animated&lt;br /&gt;
|-&lt;br /&gt;
! Textures&lt;br /&gt;
| TGA || The textures used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Model&lt;br /&gt;
| OBJ || The 3D mesh used by the character&lt;br /&gt;
|-&lt;br /&gt;
! Hull&lt;br /&gt;
| OBJ || The simplified collision to use for the character&lt;br /&gt;
|-&lt;br /&gt;
! Skeleton&lt;br /&gt;
| PHXBN || The bone structure used by the character for animation&lt;br /&gt;
|-&lt;br /&gt;
! Ragdoll collision&lt;br /&gt;
| FZX || Convex hulls used for ragdoll physics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Link all the below steps to parts of this page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To create a character for Overgrowth you need to..&lt;br /&gt;
# Model and texture the character&lt;br /&gt;
# &#039;&#039;&#039;Optional:&#039;&#039;&#039; Create a simplified hull model for collision. &lt;br /&gt;
:::&#039;&#039;&#039;Note:&#039;&#039;&#039; Thrown weapons won&#039;t collide with characters if they don&#039;t have a hull-object.&lt;br /&gt;
# Rig the character using one of the included skeletons&lt;br /&gt;
# &#039;&#039;&#039;TODO: What do you need to export? The skeleton? Only the weight painted mesh?&#039;&#039;&#039;&lt;br /&gt;
# Create an object XML linking the model and the texture&lt;br /&gt;
# Create a rigging data XML linking the model and the skeleton&lt;br /&gt;
# Create a character XML linking the rigging data XML and the object XML with a set of attacks and animations the character should use&lt;br /&gt;
# Create a script XML linking the character XML with an AI script&lt;br /&gt;
&lt;br /&gt;
The final script XML is the file that&#039;s actually loaded in the game to create the character. This article goes through all the above steps.&lt;br /&gt;
&lt;br /&gt;
== Model and Texture Considerations ==&lt;br /&gt;
[[Image:ExampleMan_mesh.jpg|thumb|Character Model Faces Z-axis and has reset ]]&lt;br /&gt;
The model and textures for the character have the same requirements as when creating any other [[3D Objects|3D Object]], but with a few extra considerations.&lt;br /&gt;
&lt;br /&gt;
It&#039;s extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: &#039;&#039;../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the [[3D_Objects#Shaders|3D Objects]] article.&lt;br /&gt;
&lt;br /&gt;
[[Image:ExampleMan_Norm.jpg|thumb|This is what a Blank/Flat object-space normal map might look like]]&lt;br /&gt;
&lt;br /&gt;
=== Fur Fins ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Write about how fur fins work&lt;br /&gt;
&lt;br /&gt;
== Rigging the Character ==&lt;br /&gt;
Overgrowth uses a custom skeleton format for characters with the PHXBN (Phoenix Bone &#039;&#039;&#039;TODO: Is this correct?&#039;&#039;&#039;) file ending. To create this file you need to use Wolfire&#039;s custom export addons for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here]. You may need to restart the program once to get the export options to show up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: How do you set this up yourself, if you&#039;re not using Windows for instance?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This article won&#039;t teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, [https://cgcookie.com CG Cookie] has a good free video tutorial series that introduces you to the software.&lt;br /&gt;
&lt;br /&gt;
Here are the steps you need to take in Blender to create the PHXBN file:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;TODO: What file is supposed to be used as a base? It&#039;s probably already loaded by default in the custom Blender version that can be downloaded above, but what file is that actually? So people can set this up on their own if they want.&#039;&#039;&#039;&lt;br /&gt;
# Replace the white rabbit&lt;br /&gt;
#* Press &#039;&#039;&#039;File &amp;gt; Import &amp;gt; Wavefront (.obj)&#039;&#039;&#039; to import an obj file.&lt;br /&gt;
# Bind your own mesh to the skeleton&lt;br /&gt;
#* First select the mesh, then shift-select the skeleton to add it to your selection before you press Ctrl + P to bind them.&lt;br /&gt;
# Paint weights&lt;br /&gt;
#* You may want to look up a tutorial on painting weights in blender.&lt;br /&gt;
#* It is recommended that you test your character in engine with automatic weights to check that you have no errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on if the character is going to work in the engine.&lt;br /&gt;
# Export your files&lt;br /&gt;
#* With skeleton selected in object mode, export as .PHXBN, same for mesh but as .OBJ. Your model needs to be in rest position when doing this.&lt;br /&gt;
&lt;br /&gt;
== Object XML ==&lt;br /&gt;
- A regular object file as described in the [[3D_Objects#Basics | 3D reference guide]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Object&amp;gt;&lt;br /&gt;
    &amp;lt;Model&amp;gt;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;lt;/Model&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;cubemapobjchar&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/Object&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rigging data XML ==&lt;br /&gt;
- Links to the .OBJ and .PHXBN files that the engine needs to rig the character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;rig bone_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.phxbn&amp;quot;&lt;br /&gt;
     model_path = &amp;quot;Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Character XML ==&lt;br /&gt;
- Links to the first 2 files, and a load of animation files for each action.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;character&amp;gt;&lt;br /&gt;
    &amp;lt;appearance obj_path = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_Object.xml&amp;quot;&lt;br /&gt;
                skeleton = &amp;quot;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_RigFiles.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;animations idle = &amp;quot;Data/Animations/r_idle2.xml&amp;quot;&lt;br /&gt;
                jump = &amp;quot;Data/Animations/r_jump.xml&amp;quot;&lt;br /&gt;
                roll = &amp;quot;Data/Animations/r_roll.xml&amp;quot;&lt;br /&gt;
                movement = &amp;quot;Data/Animations/r_movement.xml&amp;quot;&lt;br /&gt;
                wall = &amp;quot;Data/Animations/r_wall.xml&amp;quot;&lt;br /&gt;
                ledge = &amp;quot;Data/Animations/r_ledge.anm&amp;quot;&lt;br /&gt;
                medrightblock = &amp;quot;Data/Animations/r_activeblockmedright.anm&amp;quot;&lt;br /&gt;
                medleftblock = &amp;quot;Data/Animations/r_activeblockmedleft.anm&amp;quot;&lt;br /&gt;
                highrightblock = &amp;quot;Data/Animations/r_activeblockhighright.anm&amp;quot;&lt;br /&gt;
                highleftblock = &amp;quot;Data/Animations/r_activeblockhighleft.anm&amp;quot;&lt;br /&gt;
                lowrightblock = &amp;quot;Data/Animations/r_activeblocklowright.anm&amp;quot;&lt;br /&gt;
                lowleftblock = &amp;quot;Data/Animations/r_activeblocklowleft.anm&amp;quot;&lt;br /&gt;
                blockflinch = &amp;quot;Data/Animations/r_activeblockflinch.anm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;attacks moving_close = &amp;quot;Data/Attacks/haymaker.xml&amp;quot;&lt;br /&gt;
             stationary_close = &amp;quot;Data/Attacks/thrustpunch.xml&amp;quot;&lt;br /&gt;
             moving = &amp;quot;Data/Attacks/spinkick.xml&amp;quot;&lt;br /&gt;
             stationary = &amp;quot;Data/Attacks/frontkick.xml&amp;quot;&lt;br /&gt;
             moving_low = &amp;quot;Data/Attacks/soccerkick.xml&amp;quot;&lt;br /&gt;
             low = &amp;quot;Data/Attacks/sweep.xml&amp;quot;&lt;br /&gt;
             air = &amp;quot;Data/Attacks/legcannon.xml&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/character&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script XML ==&lt;br /&gt;
- Links to the third file and an AI script, this is the file you choose when loading a character.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Actor&amp;gt;&lt;br /&gt;
    &amp;lt;Character&amp;gt;Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_AnimList.xml&amp;lt;/Character&amp;gt;&lt;br /&gt;
    &amp;lt;ControlScript&amp;gt;enemycontrol.as&amp;lt;/ControlScript&amp;gt;&lt;br /&gt;
&amp;lt;/Actor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding Characters to the spawner menu ==&lt;br /&gt;
&lt;br /&gt;
Short version:&lt;br /&gt;
* You must add it in a mod.&lt;br /&gt;
* You can add as many characters to the spawner menu as you want in a single mod, you just need to follow the below instructions for each, and add multiple &amp;lt;code&amp;gt;&amp;lt;Item&amp;gt;&amp;lt;/code&amp;gt; tags to your mod.xml file.&lt;br /&gt;
&lt;br /&gt;
In your mod.xml file, add this xml tag:&lt;br /&gt;
(&#039;&#039;&#039;TODO&#039;&#039;&#039;: Make these paths more specific to characters)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;Item category=&amp;quot;My Custom Mod Characters&amp;quot;&lt;br /&gt;
      title=&amp;quot;Some Character To Spawn&amp;quot;&lt;br /&gt;
      path=&amp;quot;Data/Objects/example_item_pack/mod_item_example.xml&amp;quot;&lt;br /&gt;
      thumbnail=&amp;quot;Data/UI/example_item_pack/thumbs/mod_item_example.png&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the top level category where the character will show up, in the &#039;&#039;&#039;Load&#039;&#039;&#039; menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the name of the character, as it will show up in the spawner menu.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the path to the character XML that will get spawned. See [[#How_to_create_a_character|the &#039;&#039;&#039;How to create a character&#039;&#039;&#039; section]] for which XML file to target (either the character XML itself, or a version you saved off that has modified default parameters).  &#039;&#039;&#039;TODO&#039;&#039;&#039;: Be careful to advise &#039;&#039;which&#039;&#039; character XML to add to the spawner - there are multiple character XML files!&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;thumbnail&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the image that will be used for a tooltip when you hover over your character in the spawner menu.&lt;br /&gt;
&lt;br /&gt;
See &#039;&#039;&#039;&amp;lt;code&amp;gt;GameInstallDir/Data/ExampleMods/mod_xml_specification.txt&amp;lt;/code&amp;gt;&#039;&#039;&#039; for full information.&lt;br /&gt;
&lt;br /&gt;
== TODOs ==&lt;br /&gt;
&#039;&#039;&#039;TODO: Make sure all these headings are covered in this or some other article that we link to&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== File path conventions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Description of where to add files in mods so they don&#039;t conflict. Ala [[Hotspots#File_path_conventions]]&lt;br /&gt;
&lt;br /&gt;
=== Hull ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on character hulls&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on animations and export, tagging, etc&lt;br /&gt;
&lt;br /&gt;
=== Morph targets ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for hands, face, etc&lt;br /&gt;
&lt;br /&gt;
=== Eyes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)&lt;br /&gt;
&lt;br /&gt;
=== Attacks ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Links to or docs on attacks system and export, tagging, etc - related partly to animations.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: Possibly also scripting attacks and animations, and character-bound input, etc - though maybe that should be in a different section?&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5846</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5846"/>
		<updated>2018-03-13T15:18:38Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Pre/post goal actions */ Added &amp;quot;music_layer_override action&amp;quot;; Added &amp;#039;&amp;#039;&amp;#039;Instructions:&amp;#039;&amp;#039;&amp;#039; to all actions /* Pre/post goal actions table */ Added link to &amp;quot;music_layer_override action&amp;quot;; Edited table contents.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
Removes some of the delay between when an objective is completed and when the next step is started. &#039;&#039;&#039;TODO: How/when is this useful?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; action to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and a space.&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &#039;&#039;&#039;no_delay&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade_if_not_hostile]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|[[#music_layer_override_action|music_layer_override]]&lt;br /&gt;
|force play of the given music track layer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the last two lines of dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions====&lt;br /&gt;
&lt;br /&gt;
Do all the same steps as for the [[#dialogue_action|dialogue action]], but at step 3 add &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade_if_not_hostile &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the value slot of the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; script parameter instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== music_layer_override action ===&lt;br /&gt;
&lt;br /&gt;
With this action you can set the music layer, tell the game to decide the layer based on activity in the level (is the player in combat or not?) or mute the music.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You can&#039;t change the music track specified with the &amp;lt;code&amp;gt;music&amp;lt;/code&amp;gt; script parameter in the overgrowth_level hotspot with this acton unless you add layers to a given track. &#039;&#039;&#039;TODO: Should this be written here?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;possible &amp;lt;code&amp;gt;music_layer_override &amp;lt;layer&amp;gt;&amp;lt;/code&amp;gt; values:&#039;&#039;&#039;&lt;br /&gt;
{| class = wikitable&lt;br /&gt;
!0, 1, 2, 3, 4 &lt;br /&gt;
| Sets the music layer (higher means more intense)&lt;br /&gt;
|-&lt;br /&gt;
! -1 &lt;br /&gt;
| Tells the game to set the music layer based on activity in the level&lt;br /&gt;
|-&lt;br /&gt;
! -2 &lt;br /&gt;
| Mutes the music&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_&amp;lt;post or pre&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;music_layer_override &amp;lt;layer&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;&#039;&#039;&#039;&amp;lt;layer&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; is the number of the music layer you want to be played (see table above).&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5845</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5845"/>
		<updated>2018-03-13T14:15:49Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* dialogue action */ Edited layout.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
Removes some of the delay between when an objective is completed and when the next step is started. &#039;&#039;&#039;TODO: How/when is this useful?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; action to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and a space.&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &#039;&#039;&#039;no_delay&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade_if_not_hostile]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the last two lines of dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions====&lt;br /&gt;
&lt;br /&gt;
Do all the same steps as for the [[#dialogue_action|dialogue action]], but at step 3 add &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade_if_not_hostile &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the value slot of the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; script parameter instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5844</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5844"/>
		<updated>2018-03-13T14:12:03Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Goals Table, no_delay modifier */  Removed &amp;quot; Useful in combination with the play_success_sting action.&amp;quot;; Added &amp;quot; TODO: How/when is this useful?&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
Removes some of the delay between when an objective is completed and when the next step is started. &#039;&#039;&#039;TODO: How/when is this useful?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; action to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and a space.&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &#039;&#039;&#039;no_delay&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade_if_not_hostile]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the last two lines of dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions====&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same steps as for the [[#dialogue_action|dialogue action]], but add &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade_if_not_hostile&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the value slot of the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; script parameter instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5843</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5843"/>
		<updated>2018-03-13T14:03:44Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions */ Edited Link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
Removes some of the delay between when an objective is completed and when the next step is started.&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; action to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and a space.&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &#039;&#039;&#039;no_delay&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade_if_not_hostile]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the last two lines of dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions====&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same steps as for the [[#dialogue_action|dialogue action]], but add &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade_if_not_hostile&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the value slot of the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; script parameter instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5842</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5842"/>
		<updated>2018-03-13T14:03:02Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Pre/post goal actions table */  Added links to &amp;quot;dialogue_fade &amp;amp; dialogue_fade_if_not_hostile action&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
Removes some of the delay between when an objective is completed and when the next step is started.&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; action to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and a space.&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &#039;&#039;&#039;no_delay&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue_fade_.26_dialogue_fade_if_not_hostile_actions|dialogue_fade_if_not_hostile]]&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the last two lines of dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions====&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same steps as for the [[Checkpoints#dialogue_action|dialogue action]], but add &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade_if_not_hostile&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the value slot of the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; script parameter instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5841</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5841"/>
		<updated>2018-03-13T13:59:01Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* dialogue action */ Added dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions reference; Edited dialogue action note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
Removes some of the delay between when an objective is completed and when the next step is started.&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; action to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and a space.&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &#039;&#039;&#039;no_delay&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the last two lines of dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== dialogue_fade &amp;amp; dialogue_fade_if_not_hostile actions====&lt;br /&gt;
&#039;&#039;&#039;Instructions:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same steps as for the [[Checkpoints#dialogue_action|dialogue action]], but add &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade_if_not_hostile&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the value slot of the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; script parameter instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot for the goal you want to add the success sting to and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5826</id>
		<title>Custom Decals</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5826"/>
		<updated>2018-03-10T17:18:45Z</updated>

		<summary type="html">&lt;p&gt;Mng: Removed all TODO&amp;#039;s: &amp;#039;&amp;#039;&amp;#039;TODO: is this necessary or are there fallback files?&amp;#039;&amp;#039;&amp;#039;; &amp;#039;&amp;#039;&amp;#039;TOOD: Confirm&amp;#039;&amp;#039;&amp;#039; (x 3); Must have the same dimensions as the texture file. &amp;#039;&amp;#039;&amp;#039;TODO: is this True?&amp;#039;&amp;#039;&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
&lt;br /&gt;
[[File:Decal blood.jpg|thumb|alt=Decal blood plats|Decal blood splats]]&lt;br /&gt;
Decals are textures which can be mapped to environment objects &amp;amp; terrain. Their main use is adding detail and variation to the scenery. Blood splats, [[Lighting#Shadow_decals|ambient shadows]] and footprints use them too.&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
To create a custom decal, the following files are needed:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#XML_File|XML File]]&#039;&#039;&#039; - What you select when loading the decal&lt;br /&gt;
* &#039;&#039;&#039;[[#ColorMap|ColorMap]]&#039;&#039;&#039; - The texture for the decal&lt;br /&gt;
* &#039;&#039;&#039;[[#NormalMap|NormalMap]]&#039;&#039;&#039; - Has normal information for the decal &lt;br /&gt;
&lt;br /&gt;
=== XML File ===&lt;br /&gt;
This file is what you load in the engine to make the decal show up. It links to a color texture and a normal texture that make up the decal. To avoid issues we recommend using .tga as texture format, though .png works most of the time as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;2.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Type&amp;gt;generic&amp;lt;/Type&amp;gt;&lt;br /&gt;
&amp;lt;DecalObject&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Textures/Decals/Rocky/black_dust_c.tga&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Textures/diffusebump.tga&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/DecalObject&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Tag !! Example use !! Description&lt;br /&gt;
|-&lt;br /&gt;
! ColorMap&lt;br /&gt;
| &amp;lt;ColorMap&amp;gt;Data/Textures/MyColorMap.tga&amp;lt;/ColorMap&amp;gt; || path to the color texture file (.tga, .tif or .png)&lt;br /&gt;
|-&lt;br /&gt;
! NormalMap&lt;br /&gt;
| &amp;lt;NormalMap&amp;gt;Data/Textures/MyNormalMap.tga&amp;lt;/NormalMap&amp;gt; || Path to the normal map texture file (.tga, .tif or .png)&lt;br /&gt;
|-&lt;br /&gt;
! ShaderName&lt;br /&gt;
| &amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt; || Name of shader to use from ../Overgrowth/Data/GLSL/ (.frag and .vert)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== ColorMap ===&lt;br /&gt;
Can be created with any image manipulation program. Should have sidelengths of a power of two pixels (e.g. 512px x 512px), else an error will appear.&lt;br /&gt;
&lt;br /&gt;
=== NormalMap ===&lt;br /&gt;
Can be created with any image manipulation program. It&#039;s dimensions must be of a power of two pixels (e.g. 512px x 512px).&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5825</id>
		<title>Custom Decals</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5825"/>
		<updated>2018-03-10T16:54:05Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* ColorMap */ Added power of two clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
&lt;br /&gt;
[[File:Decal blood.jpg|thumb|alt=Decal blood plats|Decal blood splats]]&lt;br /&gt;
Decals are textures which can be mapped to environment objects &amp;amp; terrain. Their main use is adding detail and variation to the scenery. Blood splats, [[Lighting#Shadow_decals|ambient shadows]] and footprints use them too.&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
To create a custom decal, the following files are needed:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#XML_File|XML File]]&#039;&#039;&#039; - What you select when loading the decal&lt;br /&gt;
* &#039;&#039;&#039;[[#ColorMap|ColorMap]]&#039;&#039;&#039; - The texture for the decal&lt;br /&gt;
* &#039;&#039;&#039;[[#NormalMap|NormalMap]]&#039;&#039;&#039; - Has normal information for the decal &#039;&#039;&#039;TODO: is this necessary or are there fallback files?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== XML File ===&lt;br /&gt;
This file is what you load in the engine to make the decal show up. It links to a color texture and a normal texture that make up the decal. To avoid issues we recommend using .tga as texture format, though .png works most of the time as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;2.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Type&amp;gt;generic&amp;lt;/Type&amp;gt;&lt;br /&gt;
&amp;lt;DecalObject&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Textures/Decals/Rocky/black_dust_c.tga&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Textures/diffusebump.tga&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/DecalObject&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Tag !! Example use !! Description&lt;br /&gt;
|-&lt;br /&gt;
! ColorMap&lt;br /&gt;
| &amp;lt;ColorMap&amp;gt;Data/Textures/MyColorMap.tga&amp;lt;/ColorMap&amp;gt; || path to the color texture file (.tga, .tif or .png)&#039;&#039;&#039;TOOD: Confirm&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! NormalMap&lt;br /&gt;
| &amp;lt;NormalMap&amp;gt;Data/Textures/MyNormalMap.tga&amp;lt;/NormalMap&amp;gt; || Path to the normal map texture file (.tga, .tif or .png)&#039;&#039;&#039;TOOD: Confirm&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ShaderName&lt;br /&gt;
| &amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt; || Name of shader to use from ../Overgrowth/Data/GLSL/ (.frag and .vert)&#039;&#039;&#039;TOOD: Confirm&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== ColorMap ===&lt;br /&gt;
Can be created with any image manipulation program. Should have sidelengths of a power of two pixels (e.g. 512px x 512px), else an error will appear.&lt;br /&gt;
&lt;br /&gt;
=== NormalMap ===&lt;br /&gt;
Can be created with any image manipulation program. Must have the same dimensions as the texture file. &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5824</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5824"/>
		<updated>2018-03-10T15:45:15Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* no_delay modifier */ Added TODO: COuldn&amp;#039;t confirm this sth&amp;#039;s wrong&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &#039;&#039;&#039;TODO: COuldn&#039;t confirm this sth&#039;s wrong --[[User:Mng|Mng]] 15:45, 10 March 2018 (UTC)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;font-size:15px&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.The goalnumber parameter is goal from step 1 that you want the action to be triggered after (or before)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If the success_sting is a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action and the the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action is &amp;quot;[[#dialogue_action|dialogue]]&amp;quot;, the [[#no_delay_modifier|no_delay modifier]] is needed in order to hear it before the dialogue starts. &#039;&#039;&#039;TODO: COuldn&#039;t confirm this, something&#039;s wrong. --[[User:Mng|Mng]] 15:43, 10 March 2018 (UTC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5823</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5823"/>
		<updated>2018-03-10T15:43:31Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* play_success_sting action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;font-size:15px&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.The goalnumber parameter is goal from step 1 that you want the action to be triggered after (or before)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If the success_sting is a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action and the the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action is &amp;quot;[[#dialogue_action|dialogue]]&amp;quot;, the [[#no_delay_modifier|no_delay modifier]] is needed in order to hear it before the dialogue starts. &#039;&#039;&#039;TODO: COuldn&#039;t confirm this, something&#039;s wrong. --[[User:Mng|Mng]] 15:43, 10 March 2018 (UTC)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5822</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5822"/>
		<updated>2018-03-10T13:57:03Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* play_success_sting action */ Added &amp;quot;You can combine this with other actions.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;font-size:15px&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.The goalnumber parameter is goal from step 1 that you want the action to be triggered after (or before)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If the success_sting is a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action and the the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action is &amp;quot;[[#dialogue_action|dialogue]]&amp;quot;, the [[#no_delay_modifier|no_delay modifier]] is needed in order to hear it before the dialogue starts.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5821</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5821"/>
		<updated>2018-03-10T13:54:31Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Pre/post goal actions */ Added play_success_sting action reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;font-size:15px&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|[[#play_success_sting_action|play_success_sting]]&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===play_success_sting action===&lt;br /&gt;
&lt;br /&gt;
This action is useful as a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action if the goal was particulary difficult to accomplish. It will play music that indicates success to the player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The success sting is different depending on the music specified in the overgrowth_level hotspot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Set up the goal that you want this action to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;play_success_sting&#039;&#039;&#039;&amp;lt;/code&amp;gt;.The goalnumber parameter is goal from step 1 that you want the action to be triggered after (or before)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If the success_sting is a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action and the the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action is &amp;quot;[[#dialogue_action|dialogue]]&amp;quot;, the [[#no_delay_modifier|no_delay modifier]] is needed in order to hear it before the dialogue starts.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5820</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5820"/>
		<updated>2018-03-10T13:26:59Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Goals */ Added link to #play_success_sting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered. Useful in combination with the [[#play_success_sting|play_success_sting]] action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;font-size:15px&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|play_success_sting&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5819</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5819"/>
		<updated>2018-03-10T13:22:07Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* no_delay modifier */ Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;font-size:15px&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|play_success_sting&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5818</id>
		<title>Custom Decals</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5818"/>
		<updated>2018-03-10T13:20:28Z</updated>

		<summary type="html">&lt;p&gt;Mng: Replaced tag desc with table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
&lt;br /&gt;
[[File:Decal blood.jpg|thumb|alt=Decal blood plats|Decal blood splats]]&lt;br /&gt;
Decals are textures which can be mapped to environment objects &amp;amp; terrain. Their main use is adding detail and variation to the scenery. Blood splats, [[Lighting#Shadow_decals|ambient shadows]] and footprints use them too.&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
To create a custom decal, the following files are needed:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#XML_File|XML File]]&#039;&#039;&#039; - What you select when loading the decal&lt;br /&gt;
* &#039;&#039;&#039;[[#ColorMap|ColorMap]]&#039;&#039;&#039; - The texture for the decal&lt;br /&gt;
* &#039;&#039;&#039;[[#NormalMap|NormalMap]]&#039;&#039;&#039; - Has normal information for the decal &#039;&#039;&#039;TODO: is this necessary or are there fallback files?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== XML File ===&lt;br /&gt;
This file is what you load in the engine to make the decal show up. It links to a color texture and a normal texture that make up the decal. To avoid issues we recommend using .tga as texture format, though .png works most of the time as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;2.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Type&amp;gt;generic&amp;lt;/Type&amp;gt;&lt;br /&gt;
&amp;lt;DecalObject&amp;gt;&lt;br /&gt;
    &amp;lt;ColorMap&amp;gt;Data/Textures/Decals/Rocky/black_dust_c.tga&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
    &amp;lt;NormalMap&amp;gt;Data/Textures/diffusebump.tga&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
    &amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/DecalObject&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Tag !! Example use !! Description&lt;br /&gt;
|-&lt;br /&gt;
! ColorMap&lt;br /&gt;
| &amp;lt;ColorMap&amp;gt;Data/Textures/MyColorMap.tga&amp;lt;/ColorMap&amp;gt; || path to the color texture file (.tga, .tif or .png)&#039;&#039;&#039;TOOD: Confirm&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! NormalMap&lt;br /&gt;
| &amp;lt;NormalMap&amp;gt;Data/Textures/MyNormalMap.tga&amp;lt;/NormalMap&amp;gt; || Path to the normal map texture file (.tga, .tif or .png)&#039;&#039;&#039;TOOD: Confirm&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ShaderName&lt;br /&gt;
| &amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt; || Name of shader to use from ../Overgrowth/Data/GLSL/ (.frag and .vert)&#039;&#039;&#039;TOOD: Confirm&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== ColorMap ===&lt;br /&gt;
Can be created with any image manipulation program.&lt;br /&gt;
&lt;br /&gt;
=== NormalMap ===&lt;br /&gt;
Can be created with any image manipulation program. Must have the same dimensions as the texture file. &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5811</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5811"/>
		<updated>2018-03-10T00:57:50Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Goals */ Added no_delay reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|[[#no_delay_modifier|no_delay]]&lt;br /&gt;
|this is a modifier that reduces the time of the current goal_post or next goal_pre being triggered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== no_delay modifier ===&lt;br /&gt;
&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; and two corresponding &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre/post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions to the overgrowth_level hotspot&lt;br /&gt;
# Add &amp;lt;code&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; Script Param&#039;s value slot, after the specified goal and with a one space wide gap to it &lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; &lt;br /&gt;
{| class = wikitable&lt;br /&gt;
! Script Param !! Value&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_pre || dialogue_fade &amp;amp;quot;Stranger&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2 || defeat 363 &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;&#039;no_delay&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|goal_2_post || play_success_sting&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you don&#039;t specify a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the modifier will shorten the time to the next &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action instead.&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|play_success_sting&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5810</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5810"/>
		<updated>2018-03-10T00:00:50Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Pre/post goal actions */ fixed table mess-up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|no_delay&lt;br /&gt;
|this is a modifier you can put after any &#039;&#039;&#039;defeat&#039;&#039;&#039; goal, to reduce the time to the current goal_post or next goal_pre being triggered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|-&lt;br /&gt;
|play_success_sting&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5809</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5809"/>
		<updated>2018-03-09T23:59:37Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Pre/post goal actions */ Added use of dialogue_fade_if_not_hostile; removed &amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039;: Not sure why this is useful?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|no_delay&lt;br /&gt;
|this is a modifier you can put after any &#039;&#039;&#039;defeat&#039;&#039;&#039; goal, to reduce the time to the current goal_post or next goal_pre being triggered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat. Useful to prevent enemys from attacking the player while in dialogue.&lt;br /&gt;
|play_success_sting&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5808</id>
		<title>Checkpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Checkpoints&amp;diff=5808"/>
		<updated>2018-03-09T23:51:16Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category Tutorials&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checkpoints allow you to set up goals that the player can achieve to advance progress in a level.&lt;br /&gt;
&lt;br /&gt;
With them you can move the player spawn point upon death and allow defeated enemies to remain dead.&lt;br /&gt;
&lt;br /&gt;
When the player advances progress, you can do nothing, play a dialogue, spawn new enemies, or trigger a level win (load the next level).&lt;br /&gt;
&lt;br /&gt;
You can make some of the checkpoints optional, so player progress is saved, but the player does not have to touch them to complete the level.&lt;br /&gt;
&lt;br /&gt;
== Using the checkpoint system ==&lt;br /&gt;
&lt;br /&gt;
Start by creating a new level, or opening an existing level, and activating the editor by hitting &amp;lt;kbd&amp;gt;&#039;&#039;&#039;F1&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You might want to enable the debug window &amp;lt;code&amp;gt;&#039;&#039;&#039;Settings → Debug → Draw In-Game Debug Window&#039;&#039;&#039;&amp;lt;/code&amp;gt; so you can see which is the current checkpoint, shown as &amp;lt;code&amp;gt;&#039;&#039;&#039;progress: #&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug keys (these will work once a level has checkpoints):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|reset the level to the currently achieved checkpoint&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|swap to the next checkpoint, or wrap around to the first (remember to hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; after to reset)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To add the checkpoint system to a level:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, set goals, and possibly pre/post goal actions.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
Goals must be accomplished by the player, in order.&lt;br /&gt;
&lt;br /&gt;
Some goals are optional, in which case the player may defeat later goals, and these goals will be considered &amp;quot;accomplished&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The table below shows the types of goals that can be used as checkpoints. Below the table are instructions for how to use each goal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach goal|reach]]&lt;br /&gt;
|when touched, moves the player spawn point and saves defeated enemies. must touch it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#reach_skippable goal|reach_skippable]]&lt;br /&gt;
|same as &amp;quot;reach&amp;quot; goal but the player never has to reach it to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat goal|defeat]]&lt;br /&gt;
|the player must defeat a list of enemies to complete the level/advance progress&lt;br /&gt;
|-&lt;br /&gt;
|[[#defeat_optional goal|defeat_optional]]&lt;br /&gt;
|the player may defeat a list of enemies to advance progress. If a further goal is accomplished first, these enemies are considered &amp;quot;defeated&amp;quot; when the character respawns&lt;br /&gt;
|-&lt;br /&gt;
|[[#spawn_defeat goal|spawn_defeat]]&lt;br /&gt;
|same as &amp;quot;defeat&amp;quot; goal but the enemies to defeat are spawned when that becomes the current goal (or on reset)&lt;br /&gt;
|-&lt;br /&gt;
|no_delay&lt;br /&gt;
|this is a modifier you can put after any &#039;&#039;&#039;defeat&#039;&#039;&#039; goal, to reduce the time to the current goal_post or next goal_pre being triggered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reach goal ===&lt;br /&gt;
&lt;br /&gt;
# Add the checkpoint hotspot to the scene. This is the trigger for the checkpoint. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load Item...&#039;&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;&#039;&#039;&#039;Data/Objects/Hotspots/overgrowth_level_checkpoint.xml&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the placeholder object to the scene. This is the player spawn. &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Utility&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Placeholder&#039;&#039;&#039; &lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value starting at &amp;lt;code&amp;gt;&#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &#039;&#039;increasing by 1&#039;&#039; for each checkpoint you add&lt;br /&gt;
# Set the checkpoint hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the &#039;&#039;object id&#039;&#039; of the overgrowth_level hotspot&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the number from step 3&lt;br /&gt;
# Add a value to the overgrowth_level hotspot &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter, delimited with spaces, with the id of the placeholder object from step 2 (&amp;lt;code&amp;gt;437 243 121&amp;lt;/code&amp;gt;). The order matters, and the id for checkpoint 0 should go in the first spot, checkpoint 1 in the second spot, etc. You can see that you&#039;ve written the correct ID if a transparent character model appears in the placeholder hotspot.&lt;br /&gt;
&lt;br /&gt;
The numbers in checkpoints are tricky to get right. To add an additional checkpoint:&lt;br /&gt;
&lt;br /&gt;
# Add another goal param to the overgrowth_level hotspot, and give it a number one higher than the previous goal. So if your previous goal was &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, you would add another one with the name &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the goal param&#039;s value to one higher than the previous goal. So if the previous one was &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 5&#039;&#039;&#039;&amp;lt;/code&amp;gt;, this new param&#039;s value would be &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Load a checkpoint object, and set its &amp;lt;code&amp;gt;&#039;&#039;&#039;checkpoint_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to a value that matches the reach goal in step #2. So, if the goal is &amp;lt;code&amp;gt;&#039;&#039;&#039;reach 6&#039;&#039;&#039;&amp;lt;/code&amp;gt;, then this would just be &amp;lt;code&amp;gt;&#039;&#039;&#039;6&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Set the checkpoint object&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;level_hotspot_id&#039;&#039;&#039;&amp;lt;/code&amp;gt; param&lt;br /&gt;
# Load a placeholder object for the player to spawn at&lt;br /&gt;
# Add the id of the placeholder object to the end of the overgrowth_level&#039;s &amp;lt;code&amp;gt;&#039;&#039;&#039;player_spawn&#039;&#039;&#039;&amp;lt;/code&amp;gt; param. So if it was previously &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456&#039;&#039;&#039;&amp;lt;/code&amp;gt; then it would now be something like &amp;lt;code&amp;gt;&#039;&#039;&#039;123 456 784&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reach_skippable goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a &amp;quot;reach&amp;quot; hotspot, but in step 5 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;reach_skippable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;reach &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== defeat goal ===&lt;br /&gt;
&lt;br /&gt;
# Add an enemy to the level&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the enemy from step 1&lt;br /&gt;
# Add additional enemy ids in the form of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;some_enemy_id&amp;gt; &amp;lt;other_enemy_id&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, just like in step two (e.g. &amp;lt;code&amp;gt;defeat 4 72 8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== defeat_optional goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat_optional &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== spawn_defeat goal ===&lt;br /&gt;
&lt;br /&gt;
Do all the same as a [[#defeat goal|defeat goal]], but in step 2 set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;spawn_defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&#039;&#039;&#039;defeat &amp;lt;numbers...&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pre/post goal actions ==&lt;br /&gt;
&lt;br /&gt;
You can trigger an action to happen, either when a goal is set as the &amp;quot;current&amp;quot; goal, or after a goal has been accomplished.&lt;br /&gt;
&lt;br /&gt;
Goal actions can be combined with each other. Just put a space between them (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 537 dialogue ShopkeeperBanter&#039;&#039;&#039;&amp;lt;/code&amp;gt;). Make sure to put them in the order you want them to happen (if that&#039;s important).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of actions that can be triggered:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[#activate action|activate]]&lt;br /&gt;
|make a character with the given id active. This removes the &amp;quot;static&amp;quot; flag from the character. Useful for reducing CPU utilization for characters you haven&#039;t reached yet&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|enable]]&lt;br /&gt;
|enable a game object with the given id. This can be any object type, not just a character. This will make it appear in game and activate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#enable.2Fdisable_actions|disable]]&lt;br /&gt;
|disable a game object with the given id. This can be any object type, not just a character. This will make it disappear in game and deactivate its behavior&lt;br /&gt;
|-&lt;br /&gt;
|[[#dialogue action|dialogue]]&lt;br /&gt;
|play a dialogue with the given dialogue name&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is faded in/out at the beginning and end (except on reset). Useful to make dialogue &amp;quot;teleportation&amp;quot; feel less jarring&lt;br /&gt;
|-&lt;br /&gt;
|dialogue_fade_if_not_hostile&lt;br /&gt;
|same as &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue_fade&#039;&#039;&#039;&amp;lt;/code&amp;gt; action but the dialogue is not triggered at all if you&#039;re currently still in combat (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Not sure why this is useful?)&lt;br /&gt;
|-&lt;br /&gt;
|play_success_sting&lt;br /&gt;
|play the success music track, since this was a particularly challenging goal. Usually done on a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_N_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; action&lt;br /&gt;
|-&lt;br /&gt;
|music_layer_override&lt;br /&gt;
|force play of the given music track layer. Set to the appropriate layer number to force a certain layer to be played, 0 is calmest, 1 is more intense and so on. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-1&#039;&#039;&#039;&amp;lt;/code&amp;gt; to let the game select based on the activity level. Set to &amp;lt;code&amp;gt;&#039;&#039;&#039;-2&#039;&#039;&#039;&amp;lt;/code&amp;gt; for silence (&#039;&#039;&#039;TODO&#039;&#039;&#039;: Is this correct for -2?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== activate action ===&lt;br /&gt;
&lt;br /&gt;
This action is mostly useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate static characters right before you come to them and interact with them. It is best used to conserve CPU power when more than 3 or 4 characters are in level.&lt;br /&gt;
&lt;br /&gt;
You can use these both for both enemies and allies, so you don&#039;t have to have this character in a [[#defeat goal|defeat goal]] in order to use it.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
# Add an NPC to the level (friend or enemy)&lt;br /&gt;
# Set up the NPC with a [[#defeat goal|defeat goal]] (optional, if this is an enemy you want to have to defeat this goal)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;activate &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id of the NPC from step 1. The character will be activated just a this goal as set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many characters as you want, separated with spaces, with a new &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;activate 127 activate 543&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== enable/disable actions ===&lt;br /&gt;
&lt;br /&gt;
These actions are useful for &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can enable objects (or characters) right before you come to them, or disable them at the end of a dialogue.&lt;br /&gt;
&lt;br /&gt;
(You could use them as &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, if it makes sense to, but I&#039;m not sure if that&#039;s going to be useful as frequently)&lt;br /&gt;
&lt;br /&gt;
You can use these for any type of object, so you don&#039;t need any particular goal type (e.g. a [[#defeat goal|defeat goal]]) in order to use this.&lt;br /&gt;
&lt;br /&gt;
You can combine these with other actions.&lt;br /&gt;
&lt;br /&gt;
# Spawn an object to the level (any kind)&lt;br /&gt;
# Set up the goal that you want to this object to be &amp;quot;enabled/disabled&amp;quot; by (it appears/disappears in level as soon as the goal is set to be active)&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;enable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&#039;&#039;&#039;disable &amp;lt;number&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;, with the object id from step 1. The object will be enabled/disabled (appear/disappear in level) just a this goal is set as the active goal.&lt;br /&gt;
# Repeat 1 and 3 for as many objects as you want, separated with spaces, with a new &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt; action for each (i.e. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_3_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;&#039;&#039;&#039;enable 127 enable 543 disable 443&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== dialogue action ===&lt;br /&gt;
&lt;br /&gt;
This action is useful for both &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; actions, so you can activate dialogues both to describe a goal when you get to it, and when a goal is completed.&lt;br /&gt;
&lt;br /&gt;
Note that for a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; action, the dialogue will be started again if you die and respawn. The player will also be placed wherever the dialogue placed them, rather than at their spawn point.&lt;br /&gt;
&lt;br /&gt;
You can combine this with other actions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instructions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Add a dialogue to the level and get it working with the dialogue editor. Note that the dialogue can affect the player&#039;s spawn point, so put the character where you want them to be after the dialogue finishes&lt;br /&gt;
# Set up the goal that you want this dialogue to be triggered by&lt;br /&gt;
# Add a &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;goalnumber&amp;gt;_pre&#039;&#039;&#039;&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;) parameter to the overgrowth_level hotspot and set the value to &amp;lt;code&amp;gt;&#039;&#039;&#039;dialogue &amp;lt;dialoguename&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;The dialoguename parameter should be set to dialogue name from step 1. The goalnumber parameter is goal from step 2 that you want the dialogue to be triggered before (or after).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To trigger a dialogue just after achieving a checkpoint goal (whether a &amp;quot;reach&amp;quot; or &amp;quot;defeat&amp;quot; checkpoint):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do all the same as a dialogue triggered before progressing to a given checkpoint, but name the parameter &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_&amp;lt;number&amp;gt;_post&#039;&#039;&#039;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;goal_5_post&#039;&#039;&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
Make sure you don&#039;t use a &amp;lt;code&amp;gt;start_dialogue&amp;lt;/code&amp;gt; hotspot on top of the player&#039;s spawn. Doing this will likely break the checkpoint system.&lt;br /&gt;
&lt;br /&gt;
If you need to start a dialogue at the beginning of the level, use a &amp;lt;code&amp;gt;goal_0_pre&amp;lt;/code&amp;gt; instead, with a value of &amp;lt;code&amp;gt;dialogue &#039;&#039;&#039;&amp;quot;dialogue name here&amp;quot;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Make sure you&#039;re setting the dialogue&#039;s name in the dialogue editor, and not in the script params or &amp;lt;code&amp;gt;&amp;quot;Selected&amp;quot;&amp;lt;/code&amp;gt; window.&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
&lt;br /&gt;
Open up all of your &amp;lt;code&amp;gt;overgrowth_level_checkpoint&amp;lt;/code&amp;gt; instances, and look at the script parameters for them.&lt;br /&gt;
&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt; starts at zero, and increases by 1 (&#039;&#039;and only by 1&#039;&#039;) for each subsequent checkpoint. This will be true even if the first &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goal isn&#039;t &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;!&lt;br /&gt;
* Make sure that &amp;lt;code&amp;gt;reach &#039;&#039;&#039;N&#039;&#039;&#039;&amp;lt;/code&amp;gt; values match the values for &amp;lt;code&amp;gt;checkpoint_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Example_checkpoint_id_and_reach_goal_index.jpg|400px|thumb|none|Example of matching up &amp;quot;reach&amp;quot; and &amp;quot;hotspot_id&amp;quot; values]]&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
&lt;br /&gt;
Open up the script parameters for the &amp;lt;code&amp;gt;overgrowth_level&amp;lt;/code&amp;gt; instance, and look at the script parameters.&lt;br /&gt;
&lt;br /&gt;
* The goals should start at &amp;lt;code&amp;gt;goal_0&amp;lt;/code&amp;gt;, not at &amp;lt;code&amp;gt;goal_1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Look at the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; property. Count up the number of Ids in there (separated with spaces), and count up the number of &amp;lt;code&amp;gt;reach&amp;lt;/code&amp;gt; goals you have. Those should be the same count.&lt;br /&gt;
* Make sure that each &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; id corresponds to a placeholder object in the world, and that you see a turner in a T-Pose inside each of them (which means that you typed them correctly in the &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; field).&lt;br /&gt;
&lt;br /&gt;
[[File:Example_player_spawn_for_checkpoints.jpg|400px|thumb|none|Example of matching up &amp;lt;code&amp;gt;player_spawn&amp;lt;/code&amp;gt; and placeholder object id values]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=My_First_Mod&amp;diff=5807</id>
		<title>My First Mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=My_First_Mod&amp;diff=5807"/>
		<updated>2018-03-09T23:00:01Z</updated>

		<summary type="html">&lt;p&gt;Mng: Abandoned, redirected to Creating a new Mod; removed &amp;quot;Lets make a mod where we create our own hotspot.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT[[Creating a new Mod]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Creating_a_new_Mod&amp;diff=5806</id>
		<title>Creating a new Mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Creating_a_new_Mod&amp;diff=5806"/>
		<updated>2018-03-09T22:58:20Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category Tutorials&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Folder structure ==&lt;br /&gt;
&lt;br /&gt;
Overgrowth has a powerful and simple system to allow the creation of mods by both &amp;quot;overshadowing&amp;quot; existing files, and by creating new files.&lt;br /&gt;
&lt;br /&gt;
Mods that are installed via the Steam workshop end up in &amp;lt;code&amp;gt;../Steam/steamapps/workshop/content/25000/&amp;lt;/code&amp;gt;. Each folder in there has a number assigned to it, so it can be hard to see which folder belongs to which mod. All other mods, such as manually installed ones, those from SUM Launcher and those you make yourself live in the &amp;lt;code&amp;gt;../Overgrowth/Data/Mods/&amp;lt;/code&amp;gt; folder. There, each mod folder has a readable name.&lt;br /&gt;
&lt;br /&gt;
The folder for a mod must contain at least a mod.xml file. Other data may be present as well, such as scripts, shaders, models, textures or levels. All these folders are contained in a Data folder inside the mod&#039;s folder, resulting in the following structure&lt;br /&gt;
&lt;br /&gt;
    Overgrowth/Data/Mods/&lt;br /&gt;
    └── my_mod/&lt;br /&gt;
        ├── mod.xml&lt;br /&gt;
        └── Data/&lt;br /&gt;
            ├── Scripts/&lt;br /&gt;
            ├── Shaders/&lt;br /&gt;
            ├── Models/&lt;br /&gt;
            ├── Textures/&lt;br /&gt;
            └── Levels/&lt;br /&gt;
&lt;br /&gt;
Note that your mod can be set up and kept in either YourPC/Documents/Wolfire/Overgrowth/Data/Mods, or in the actual program files, in YourPC/(C:)/Program Files(x86)/Steam/steamapps/common/Overgrowth/Data/Mods - both of these &amp;quot;Mods&amp;quot; folder locations will work. The folder called my_mod in the tree structure above is what is compressed into a zip file and distributed when a mod is released. You can also release the mod on Steam Workshop, which is a different process that you can read about [[#Steam_Workshop|a bit further down]].&lt;br /&gt;
&lt;br /&gt;
== The mod.xml file ==&lt;br /&gt;
&lt;br /&gt;
The mod.xml file contains the mod&#039;s meta data. The game uses this file to understand how to use the mod with the game. XML files can be written and modified using programs like Notepad++ and Sublime Text. Here is a complete example:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;? xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
    &amp;lt;Mod&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The ID is necessary and should never change between versions of the same mod --&amp;gt;&lt;br /&gt;
        &amp;lt;Id&amp;gt;unique-name&amp;lt;/Id&amp;gt; &lt;br /&gt;
        &amp;lt;!-- The human readable name is presented in UI&#039;s --&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Human Readable Name&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;!-- Version number, can have any formatting you wish. --&amp;gt;&lt;br /&gt;
        &amp;lt;Version&amp;gt;1.2.5&amp;lt;/Version&amp;gt;&lt;br /&gt;
        &amp;lt;SupportedVersion&amp;gt;b4&amp;lt;/SupportedVersion&amp;gt;&lt;br /&gt;
        &amp;lt;ModDependency&amp;gt;&lt;br /&gt;
            &amp;lt;Id&amp;gt;other-mod2&amp;lt;/Id&amp;gt;&lt;br /&gt;
            &amp;lt;Version&amp;gt;1.0.0&amp;lt;/Version&amp;gt; &lt;br /&gt;
        &amp;lt;/ModDependency&amp;gt;&lt;br /&gt;
    &amp;lt;/Mod&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can find all available tags and their uses under the [[#mod.xml_tags|mod.xml_tags]] heading below.&lt;br /&gt;
&lt;br /&gt;
== mod.xml tags ==&lt;br /&gt;
There are quite a few tags that can be used in the mod.xml file to set up your mod. Here we go through all of those tags.&lt;br /&gt;
&lt;br /&gt;
=== Id ===&lt;br /&gt;
&lt;br /&gt;
The unique ID for this mod that is not allowed to conflict with any other existing mod. One suggestion is to keep it the same as the folder name for the mod. The ID is not shown to the user, but it is used for instance when another mod wants to use this mod as a dependency. ID tag text must consist of letters and dashes only, with no uppercase.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Id&amp;gt;my-mod&amp;lt;/Id&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Name ===&lt;br /&gt;
&lt;br /&gt;
The name of the mod, shown in the mod menu.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Name&amp;gt;My Mod&amp;lt;/Name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
Required for a valid mod, but does not have any effect.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Category&amp;gt;Campaign&amp;lt;/Category&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Author ===&lt;br /&gt;
&lt;br /&gt;
Is shown in the user interface to tell the user who made the mod.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Author&amp;gt;John Doe&amp;lt;/Author&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
Is shown in the user interface to tell the user what this mod does.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Description&amp;gt;This is my really cool mod that adds some excellent functionality&amp;lt;/Description&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
&lt;br /&gt;
The version of the mod. It is both shown in the user interface, and is used by other mods that depend on this mod to make sure that the user has the right version of your mod installed. Does not need to follow any specific pattern.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Version&amp;gt;1.0.0&amp;lt;/Version&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Thumbnail ===&lt;br /&gt;
&lt;br /&gt;
The path to an image to show in the user interface for your mod when the user is browsing their installed mods. Make sure you include the supplied image in the mod folder.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Thumbnail&amp;gt;Data/Images/my-mod/thumb.jpg&amp;lt;/Thumbnail&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PreviewImage ===&lt;br /&gt;
&lt;br /&gt;
This image is used in Steam Workshop to represent the mod in search results, when browsing mods and on the mod&#039;s page.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;PreviewImage&amp;gt;Data/Images/my-mod/preview-image.jpg&amp;lt;/PreviewImage&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tag ===&lt;br /&gt;
&lt;br /&gt;
Once the mod is uploaded to Steam Workshop, you can search for the tags to find the mod. You can have as many tags as you want.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;Tag&amp;gt;Campaign&amp;lt;/Tag&amp;gt;&lt;br /&gt;
 &amp;lt;Tag&amp;gt;Parkour&amp;lt;/Tag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SupportedVersion ===&lt;br /&gt;
&lt;br /&gt;
Which version of the game this mod can be used in. Can be something like &amp;lt;code&amp;gt;1.2.0&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to indicate that it can be used with any version. Using &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; is useful for mods that don&#039;t rely on the game code as much, such as assets, levels and so on.&lt;br /&gt;
&lt;br /&gt;
To find out which version of the game you&#039;re running, in the top menu bar, press &amp;lt;code&amp;gt;Help → About...&amp;lt;/code&amp;gt;. Here you will see 4 lines of information, where the third line shows your version number. It starts with three numbers separated by periods, and this is the version you&#039;re running. It can for example be &amp;lt;code&amp;gt;1.2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;SupportedVersion&amp;gt;1.2.0&amp;lt;/SupportedVersion&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LevelHookFile ===&lt;br /&gt;
&lt;br /&gt;
Specifies a path to a script file. Functions in this script are run for every level in the game when the mod is active. Every mod can add their own level hook script. [[LevelScripts#Per-mod_Level_Script|Read this]] for more information.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;LevelHookFile&amp;gt;Scripts/my_mod/level_script.as&amp;lt;/LevelHookFile&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MenuItem ===&lt;br /&gt;
Deprecated, no longer works.&lt;br /&gt;
&lt;br /&gt;
Adds a campaign button to the Play menu which runs a script. The script type is a [[Scriptable Menu]].&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;MenuItem title=&amp;quot;My Menu&amp;quot; category=&amp;quot;My Category&amp;quot; thumbnail=&amp;quot;Data/Images/my_mod/my_item.png&amp;quot; path=&amp;quot;Data/Scripts/my_menu_script.as&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Campaign ===&lt;br /&gt;
&lt;br /&gt;
Describes a set of levels that belong together.&lt;br /&gt;
&lt;br /&gt;
Has a few attributes that describe the campaign:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribute !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! title&lt;br /&gt;
| The name of the campaign, shown in the menu.&lt;br /&gt;
|-&lt;br /&gt;
! type&lt;br /&gt;
| Deprecated, has no effect.&lt;br /&gt;
|-&lt;br /&gt;
! is_linear&lt;br /&gt;
| Sets if you need to finish the first level to unlock access to the second and so on.&lt;br /&gt;
|-&lt;br /&gt;
! thumbnail&lt;br /&gt;
| The path to the image to use for the campaign in the play menu.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Inside the campaign tag there are two or more &amp;quot;Level&amp;quot; tags in the desired order that make up the campaign. For more information about what is included in the &amp;quot;Level&amp;quot; tag, see the &amp;quot;Level&amp;quot; heading just below.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
    &amp;lt;Campaign title=&amp;quot;My Campaign&amp;quot;&lt;br /&gt;
              type=&amp;quot;general&amp;quot;&lt;br /&gt;
              is_linear=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Level title=&amp;quot;Intro&amp;quot; &lt;br /&gt;
               thumbnail=&amp;quot;Images/MyMod/intro_thumb.jpg&amp;quot;&amp;gt;&lt;br /&gt;
               MyMod/intro.xml&lt;br /&gt;
        &amp;lt;/Level&amp;gt;&lt;br /&gt;
        &amp;lt;Level title=&amp;quot;Big Challenge&amp;quot; &lt;br /&gt;
               thumbnail=&amp;quot;Images/MyMod/challenge_thumb.jpg&amp;quot;&amp;gt;&lt;br /&gt;
               MyMod/challenge.xml&lt;br /&gt;
        &amp;lt;/Level&amp;gt;&lt;br /&gt;
        &amp;lt;Level title=&amp;quot;Ending&amp;quot; &lt;br /&gt;
               thumbnail=&amp;quot;Images/MyMod/end_cutscene_thumb.jpg&amp;quot;&amp;gt;&lt;br /&gt;
               MyMod/end_cutscene.xml&lt;br /&gt;
        &amp;lt;/Level&amp;gt;&lt;br /&gt;
    &amp;lt;/Campaign&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Level ===&lt;br /&gt;
&lt;br /&gt;
Can be placed in the root &amp;quot;Mod&amp;quot; tag to make the specified levels show up under the play menu in the game. You can also place them in a &amp;quot;Campaign&amp;quot; tag to put them into a campaign, for more information on that, see the &amp;quot;Campaign&amp;quot; tag above.&lt;br /&gt;
&lt;br /&gt;
Each level has two attributes, and between the start and end tags you write the path to the level. The root for the path is in the /Data/Levels/ folder, so leave everything up to the Levels folder out of the path, and make sure the level is stored inside the &amp;lt;code&amp;gt;../Overgrowth/Data/Mods/my_mod/Data/Levels/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Attributes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribute !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! title&lt;br /&gt;
| The name of the level, shown in the menu.&lt;br /&gt;
|-&lt;br /&gt;
! thumbnail&lt;br /&gt;
| The path to the image to use for the level in the play menu. This attribute is not required.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Level title=&amp;quot;My Level&amp;quot; thumbnail=&amp;quot;Images/MyMod/my_level_thumb.jpg&amp;quot;&amp;gt;MyMod/my_level.xml&amp;lt;/Level&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NeedsRestart ===&lt;br /&gt;
&lt;br /&gt;
This tag is used to determine if the game should let the user know that they need to restart the game in order for the mod to function properly.&lt;br /&gt;
&lt;br /&gt;
Can be &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You need to manually test for if your mod works properly without a game restart, and then put true or false depending on the outcome.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;NeedsRestart&amp;gt;false&amp;lt;/NeedsRestart&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ModDependency ===&lt;br /&gt;
&lt;br /&gt;
This is a list of other mods that this mod depends on to work. Has two tags for each mod:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Tag !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! Id&lt;br /&gt;
| The unique ID for the other mod.&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
| The version of the other mod that this mod requires. Set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to accept any version of the other mod.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
    &amp;lt;ModDependency&amp;gt;&lt;br /&gt;
        &amp;lt;Id&amp;gt;other-mod&amp;lt;/Id&amp;gt;&lt;br /&gt;
        &amp;lt;Version&amp;gt;1.0.0&amp;lt;/Version&amp;gt; &lt;br /&gt;
    &amp;lt;/ModDependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item ===&lt;br /&gt;
&lt;br /&gt;
Allows you to add entries to the &amp;quot;Load Item&amp;quot; list in the editor. This is useful if the mod adds weapons, characters, static objects, decals and similar things.&lt;br /&gt;
&lt;br /&gt;
Has a few attributes for each entry:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribute !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! category&lt;br /&gt;
| Name of the sub-menu to add the item to. If the sub-menu does not exist it will automatically be created.&lt;br /&gt;
|-&lt;br /&gt;
! title&lt;br /&gt;
| Name of the item to display in the list.&lt;br /&gt;
|-&lt;br /&gt;
! path&lt;br /&gt;
| Path to the object file for this item.&lt;br /&gt;
|-&lt;br /&gt;
! thumbnail&lt;br /&gt;
| Path to image to use as a preview image for this item.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
    &amp;lt;Item category=&amp;quot;My Mod&amp;quot;&lt;br /&gt;
          title=&amp;quot;My item&amp;quot;&lt;br /&gt;
          path=&amp;quot;Data/Items/MyItem.xml&amp;quot;&lt;br /&gt;
          thumbnail=&amp;quot;Data/UI/spawner/MyItem.png&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advanced mod menu ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced_mod_menu.jpg|200px|thumb|right|The advanced mod menu]]&lt;br /&gt;
&lt;br /&gt;
To help modders validate their mods and upload them to the Steam Workshop there is a tool called the &amp;quot;Advanced mod menu&amp;quot;. Access it by going to the main menu, then in the top menu bar, click &amp;lt;code&amp;gt;Windows -&amp;gt; Mods&amp;lt;/code&amp;gt;. This brings up a simpler version of the mod menu. To activate the advanced mod menu, click &amp;lt;code&amp;gt;Menu -&amp;gt; Advanced&amp;lt;/code&amp;gt;. Make sure to increase the size of the window to see all the new information in the window.&lt;br /&gt;
&lt;br /&gt;
This shows all the available information for the selected mod.&lt;br /&gt;
&lt;br /&gt;
== Steam Workshop ==&lt;br /&gt;
&lt;br /&gt;
Overgrowth comes with built in tools for uploading your mods to the Steam Workshop.&lt;br /&gt;
&lt;br /&gt;
=== Uploading a Mod ===&lt;br /&gt;
&lt;br /&gt;
[[File:Steamworks_upload.jpg|200px|thumb|right|The Steamworks New Upload menu]]&lt;br /&gt;
&lt;br /&gt;
To release a mod on Steam Workshop, first create your mod and make sure it works as intended. Then open up the [[#Advanced_mod_menu|advanced mod menu]], make sure the &amp;quot;Valid&amp;quot; item says &amp;quot;Yes&amp;quot;, press &amp;quot;Upload To Steamworks...&amp;quot; and follow the instructions at the bottom.&lt;br /&gt;
&lt;br /&gt;
If it says something about needing to accept an agreement when you&#039;ve uploaded a mod, go to http://steamcommunity.com/sharedfiles/workshoplegalagreement, log in, read through and accept the agreement if you do.&lt;br /&gt;
&lt;br /&gt;
Any mod that has just been uploaded will be private. And before you make it public you should brush up the mod&#039;s page a bit. It&#039;s a good idea to add a video, some screenshots, a description that tells the user what makes the mod interesting, how to use it and so on.&lt;br /&gt;
&lt;br /&gt;
If the mod requires some other mod to work, make sure to specify that using the &amp;quot;Add/Remove Required Items&amp;quot; in the &amp;quot;Owner Controls&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Updating a Mod ===&lt;br /&gt;
&lt;br /&gt;
To update a mod that you&#039;ve already uploaded to Steam Workshop, start by opening up the [[#Advanced_mod_menu|advanced mod menu]]. Select the workshop mod you want to update under the &amp;quot;My Steam Workshop Mods&amp;quot; heading in the left column, and press &amp;quot;Upload Update...&amp;quot; under &amp;quot;Owner Controls&amp;quot; in the right column.&lt;br /&gt;
&lt;br /&gt;
This brings up a window where you can choose which local source mod to use as the updated version, you can control its visibility on the workshop and write an update message. After agreeing to the text at the bottom of the window you can upload the update.&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=NPC_Navigation&amp;diff=5805</id>
		<title>NPC Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=NPC_Navigation&amp;diff=5805"/>
		<updated>2018-03-09T22:54:44Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category: Modding, Overgrowth&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overgrowth will automatically make sure that there is a navigation mesh for a level when you start it. However, this mesh might not be like you want it. For instance, maybe the NPCs can run up places they shouldn&#039;t, or they can&#039;t access some place of the level because they don&#039;t know where to jump since there are no jump nodes. This article goes through the tools you can use improve the way NPCs navigate through your levels.&lt;br /&gt;
&lt;br /&gt;
= Visualizing Navigation =&lt;br /&gt;
[[Image:Nav_mesh_vis.jpg|right|thumb|caption|Nav mesh visualization]]&lt;br /&gt;
&lt;br /&gt;
There are a number of useful visualizations you can use to see what&#039;s going on with the nav mesh and jump nodes. These are all available in the top menu bar under &#039;&#039;View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Nav mesh&lt;br /&gt;
| The areas that are considered walkable&lt;br /&gt;
|-&lt;br /&gt;
! Collision&lt;br /&gt;
| What geometry the nav mesh generator took into consideration when the current nav mesh was generated&lt;br /&gt;
|-&lt;br /&gt;
! Nav hints&lt;br /&gt;
| Display [[#Nav_Hints|nav hints]]&lt;br /&gt;
|-&lt;br /&gt;
! Nav regions&lt;br /&gt;
| Display [[#Nav_Regions|nav regions]]&lt;br /&gt;
|-&lt;br /&gt;
! Jump nodes&lt;br /&gt;
| Display [[#Jump_Nodes|jump nodes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Generating The Nav Mesh =&lt;br /&gt;
In the editor, in the menu bar under &#039;&#039;Nav Mesh&#039;&#039; you have a button to create, save and load the nav mesh, as well as a number of parameters that decides how the nav mesh is generated.&lt;br /&gt;
&lt;br /&gt;
Overgrowth uses the Recast navigation mesh construction toolset to create it&#039;s nav meshes. The first step Recast takes when constructing the nav mesh is to create a voxel representation of the level geometry. It then uses that to figure out where a character should be able to walk.&lt;br /&gt;
&lt;br /&gt;
All distance values in the nav mesh parameters refer to meters.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nav Mesh Parameter !! Description !! Default value&lt;br /&gt;
|-&lt;br /&gt;
! Cell Size&lt;br /&gt;
| The width and depth of each voxel in the voxel step, a smaller number results in a more detailed and accurate nav mesh, but also increases generation time&lt;br /&gt;
| 0.30&lt;br /&gt;
|-&lt;br /&gt;
! Cell Height&lt;br /&gt;
| The height of each voxel in the voxel step, a smaller number results in a more detailed and accurate nav mesh, but also increases generation time&lt;br /&gt;
| 0.20&lt;br /&gt;
|-&lt;br /&gt;
! Agent Height&lt;br /&gt;
| How much ceiling height the characters in the game need&lt;br /&gt;
| 1.70&lt;br /&gt;
|-&lt;br /&gt;
! Agent Radius&lt;br /&gt;
| How wide the characters in the game are, this value higher than the characters in the game actually are (they are not actually 0.8m wide), because movement in OG has so much momentum that there needs to be some extra margin to ensure characters can navigate well&lt;br /&gt;
| 0.40&lt;br /&gt;
|-&lt;br /&gt;
! Agent Max Climb&lt;br /&gt;
| The tallest &amp;quot;stair&amp;quot; characters should be able to walk up, this is quite high by default to ensure the AI can get around easily by default, but once you start working on the nav mesh and jump nodes you can turn this down to around 0.70 and just make sure you handle all navigation issues that arise&lt;br /&gt;
| 1.50&lt;br /&gt;
|-&lt;br /&gt;
! Agent Max Slope&lt;br /&gt;
| The steepest angle that should be considered walkable&lt;br /&gt;
| 60.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Nav Hints =&lt;br /&gt;
[[Image:nav_hint.jpg|right|thumb|caption|Left side: nav hint and the resulting nav mesh, right side: what the nav generator sees]]&lt;br /&gt;
&lt;br /&gt;
Sometimes you want to stop the nav generator from creating a walkable area somewhere, like if you don&#039;t want your NPCs to think they can walk under water. Other times the nav generator doesn&#039;t create a walkable area somewhere where NPCs should clearly be able to walk, maybe because there is some complicated geometry there. These types of issues can be solved using nav hints.&lt;br /&gt;
&lt;br /&gt;
Nav hints are blocks that are only seen by the nav generator. So in the game they are invisible and passable, they ONLY matter when the nav mesh is generated.&lt;br /&gt;
&lt;br /&gt;
Create a nav hint by going to &#039;&#039;Load → Utility → nav hint&#039;&#039; in the top menu bar. Once you click to place it you&#039;ll see a purple wireframe box that you can translate, rotate and scale. When the nav mesh is being generated it will regard this wirefram box as a solid block, so use it to block off or bridge over problematic areas.&lt;br /&gt;
&lt;br /&gt;
Note that as with any box, navigation will still be generated inside the box, since Recast only considers the walls of any object solid.&lt;br /&gt;
&lt;br /&gt;
If you want to see exactly what the nav generator sees, generate the nav mesh and then activate &#039;&#039;View → Collision&#039;&#039;. This shows the collision the nav generator used the last time it generated the nav mesh.&lt;br /&gt;
&lt;br /&gt;
= Nav Regions =&lt;br /&gt;
[[Image:nav_region.jpg|right|thumb|caption|The nav region limits the nav mesh area, improving the nav mesh generation times significantly]]&lt;br /&gt;
&lt;br /&gt;
If you have a really big level, you might not want to generate navigation for all of it. Maybe the outer parts are an inaccessible backdrop or won&#039;t ever have any NPCs in it. This is where using a nav region is useful.&lt;br /&gt;
&lt;br /&gt;
Once a nav region is placed, the nav mesh will only be generated inside that region. This can cut down on nav generation times a lot, and so can also be used to temporarliy get quicker nav generation times while working on a specific part of a level. Keep in mind though that moving the nav region can slightly change how the mesh is generated.&lt;br /&gt;
&lt;br /&gt;
To create a nav region, go to &#039;&#039;Load → Utility → nav region&#039;&#039; in the top menu bar. It looks like a purple box, and can only be scaled and translated, not rotated. Simply scale and position the box so that all of the area you want to have nav mesh is covered.&lt;br /&gt;
&lt;br /&gt;
A level can only have one nav region, any extra nav regions are ignored.&lt;br /&gt;
&lt;br /&gt;
= Jump Nodes =&lt;br /&gt;
[[Image:jump_nodes.jpg|right|thumb|caption|Some connected jump nodes]]&lt;br /&gt;
&lt;br /&gt;
To tell NPCs to where they can jump you need to place jump nodes and connect them to each other.&lt;br /&gt;
&lt;br /&gt;
To create a jump connection, create a jump node via &#039;&#039;Load → Utility → nav connection&#039;&#039; in the top menu bar. Once you have two jump nodes, slect one of them and hold alt while left clicking on the other to connect them to each other. When you generate the nav mesh the next time, these nodes will be positions that NPCs can jump to and from.&lt;br /&gt;
&lt;br /&gt;
One jump node can have more than one connection.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that almost all jump nodes need to work both ways. If you make a really tall jump connection for instance, NPCs will be able to jump down, but since it&#039;s so tall, they will not be able to jump up. Since the connection is there, they will still try to jump up if it would be the fastest route. However, when they realize they can&#039;t jump that high, they will just stand on the jump node instead of trying to find anoter way. This is why you need to manually test your jump nodes to make sure they actually work both ways.&lt;br /&gt;
&lt;br /&gt;
There are some cases when jump nodes do not need to work both ways. For instance, if an NPC is spawned outside of the playable area, quite far up, where it will never have any possible reason to return, it could make sense to have a jump connection that only works in one direction. This is because then the NPC will never get stuck on the bottom jump node, because there will never be a case where the NPC would need to use it.&lt;br /&gt;
&lt;br /&gt;
= Testing Navigation =&lt;br /&gt;
[[Image:nav_testing.jpg|right|thumb|caption|AI path and jump visualization]]&lt;br /&gt;
&lt;br /&gt;
To ensure that your jump nodes and nav mesh works as you expect you&#039;ll want to test it using debug tools.&lt;br /&gt;
&lt;br /&gt;
To test navigation, in the top menu bar, press &#039;&#039;Settings → Debug → AI&#039;&#039; and activate &#039;&#039;Show AI Path&#039;&#039; to see where NPCs are going, &#039;&#039;Show AI Jump&#039;&#039; to see a visualization of where they are trying to jump, and &#039;&#039;AI Mouse Path Testing&#039;&#039; to be able to tell AI where to go.&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve activated the debug settings, select a character spawn point, point with the cursor where you want the character to go and press G.&lt;br /&gt;
&lt;br /&gt;
This allows you to easily test if your navigation is working as expected. This is an especially useful method to test jump connections with.&lt;br /&gt;
&lt;br /&gt;
You might want to deactivate the AI when doing this by pressing C. Otherwise the character you are testing with might get killed by some enemies in the level.&lt;br /&gt;
&lt;br /&gt;
Keeping the &#039;&#039;AI Mouse Path Testing&#039;&#039; setting activated can degrade performance in the editor quite a bit, so make sure to turn it off after you&#039;re done testing your nav mesh.&lt;br /&gt;
&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=How_To_Report_a_Bug_in_Overgrowth&amp;diff=5804</id>
		<title>How To Report a Bug in Overgrowth</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=How_To_Report_a_Bug_in_Overgrowth&amp;diff=5804"/>
		<updated>2018-03-09T22:52:57Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category: Overgrowth&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi! Thanks for giving us your time to report a bug in Overgrowth. To ensure that we get as much relevant information as possible, follow the following steps.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
To fix a bug, it&#039;s usually important that we are able to reproduce the problem in control circumstances. To help us achieve this we appreciate the following information in your mail.&lt;br /&gt;
&lt;br /&gt;
* What version of the game you&#039;re running, including where you downloaded the game and if you&#039;re running the stable release or some other test version.&lt;br /&gt;
* What you were doing when the game crashed, including how long the game as been running, what levels you&#039;ve been playing and what in-game features have been used in the editor (if any).&lt;br /&gt;
* What operating system you are running, and what version.&lt;br /&gt;
&lt;br /&gt;
== Files we are interested in ==&lt;br /&gt;
&lt;br /&gt;
While running, the game writes multiple files into a local cache directory, in those there is information that is useful to us when solving your issue.&lt;br /&gt;
&lt;br /&gt;
Depending on your operating system (Windows, Linux or Mac) the local cache directory will be in a different place, following are the directories for the respective operating system.&lt;br /&gt;
&lt;br /&gt;
* Mac: &amp;lt;code&amp;gt;Macintosh HD/Users/~/Library/Application Support/Overgrowth/&amp;lt;/code&amp;gt;. Where &#039;~&#039; is your username.&lt;br /&gt;
* Windows: &amp;lt;code&amp;gt;My Documents\Wolfire\Overgrowth\&amp;lt;/code&amp;gt;&lt;br /&gt;
* Linux: &amp;lt;code&amp;gt;~/.local/share/Overgrowth/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the cache directory there are primarily two files we are interested in.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data/hwreport.txt&#039;&#039;&#039; - Contains information about what hardware your computer contains.&lt;br /&gt;
* &#039;&#039;&#039;logfile.txt&#039;&#039;&#039; - Logfile of the games execution.&lt;br /&gt;
&lt;br /&gt;
If the problem occurred in relation to a crash, you will have gotten a &#039;&#039;&#039;.dmp&#039;&#039;&#039; file, please include it, it will be in a folder with the name crash and the date of the crash. Send all the contents.&lt;br /&gt;
&lt;br /&gt;
== Finally ==&lt;br /&gt;
&lt;br /&gt;
Note that we get multiple bug reports daily and we have a limited staff. This means we can&#039;t follow up on all bug reports, even less solve all of them. So don&#039;t feel offended if you don&#039;t get a response.&lt;br /&gt;
&lt;br /&gt;
We might call back on you to give us additional information, if so we&#039;ll contact you on the same email you initially reported from.&lt;br /&gt;
&lt;br /&gt;
And finally, thanks again for giving us the time to report bugs. It goes a far way to ensure we build the best product we can.&lt;br /&gt;
&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5803</id>
		<title>Custom Decals</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5803"/>
		<updated>2018-03-09T17:12:20Z</updated>

		<summary type="html">&lt;p&gt;Mng: /*Top*/ Added Image Decal_blood.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Decal blood.jpg|thumb|alt=Decal blood plats|Decal blood splats]]&lt;br /&gt;
Decals are textures which can be mapped to environment objects &amp;amp; terrain in Edit Mode. Their main use is adding detail to the scenary; bloodsplats, [[Lighting#Shadow_decals|shadows]] and footprints use them too.&lt;br /&gt;
&lt;br /&gt;
=Files=&lt;br /&gt;
To create a custom decal, the following files are needed:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#XML_File|XML File]]&#039;&#039;&#039; - What you select when loading the decal&lt;br /&gt;
** &#039;&#039;&#039;[[#Normal_Map_Image_File|Color Map File]]&#039;&#039;&#039; - The texture for  the decal&lt;br /&gt;
** &#039;&#039;&#039;[[#Texture_File|Normal Map File]]&#039;&#039;&#039; - Has normal information for the decal &#039;&#039;&#039;TODO: is this necessary or are there fallback files?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===XML File===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;2.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Type&amp;gt;generic&amp;lt;/Type&amp;gt;&lt;br /&gt;
&amp;lt;DecalObject&amp;gt;&lt;br /&gt;
	&amp;lt;ColorMap&amp;gt;Data/Textures/Decals/Rocky/black_dust_c.tga&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
	&amp;lt;NormalMap&amp;gt;Data/Textures/diffusebump.tga&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
	&amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/DecalObject&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#399c25&amp;quot;&amp;gt;&#039;&#039;&#039;ColorMap&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Path to the texture file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#399c25&amp;quot;&amp;gt;&#039;&#039;&#039;NormalMap&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Path to the Normal map image file.&lt;br /&gt;
&lt;br /&gt;
===Texture File===&lt;br /&gt;
Can be created with any image manipulation program. Has to be quadratic. &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;br /&gt;
The following file formats are supported:&lt;br /&gt;
* *.tga&lt;br /&gt;
* *.png&lt;br /&gt;
* *.jpeg &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;TODO: add the rest.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Normal Map Image File===&lt;br /&gt;
Can be created with any image manipulation program. Must have the same dimensions as the texture file. &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=File:Decal_blood.jpg&amp;diff=5802</id>
		<title>File:Decal blood.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=File:Decal_blood.jpg&amp;diff=5802"/>
		<updated>2018-03-09T17:04:58Z</updated>

		<summary type="html">&lt;p&gt;Mng: Decal bloodsplats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Decal bloodsplats&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5801</id>
		<title>Custom Decals</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Custom_Decals&amp;diff=5801"/>
		<updated>2018-03-09T14:30:33Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added basic layout; Removed &amp;quot;{{stub}}  Tutorial on how to create and import custom decals into Overgrowth: * http://forums.wolfire.com/viewtopic.php?f=13&amp;amp;t=5064&amp;amp;p=82123&amp;amp;hilit=custom+texture#p82123&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Decals are textures which can be mapped to environment objects &amp;amp; terrain in Edit Mode. Their main use is adding detail to the scenary; bloodsplats, [[Lighting#Shadow_decals|shadows]] and footprints use them too.&lt;br /&gt;
&lt;br /&gt;
=Files=&lt;br /&gt;
To create a custom decal, the following files are needed:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#XML_File|XML File]]&#039;&#039;&#039; - What you select when loading the decal&lt;br /&gt;
** &#039;&#039;&#039;[[#Normal_Map_Image_File|Color Map File]]&#039;&#039;&#039; - The texture for  the decal&lt;br /&gt;
** &#039;&#039;&#039;[[#Texture_File|Normal Map File]]&#039;&#039;&#039; - Has normal information for the decal &#039;&#039;&#039;TODO: is this necessary or are there fallback files?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===XML File===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;2.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Type&amp;gt;generic&amp;lt;/Type&amp;gt;&lt;br /&gt;
&amp;lt;DecalObject&amp;gt;&lt;br /&gt;
	&amp;lt;ColorMap&amp;gt;Data/Textures/Decals/Rocky/black_dust_c.tga&amp;lt;/ColorMap&amp;gt;&lt;br /&gt;
	&amp;lt;NormalMap&amp;gt;Data/Textures/diffusebump.tga&amp;lt;/NormalMap&amp;gt;&lt;br /&gt;
	&amp;lt;ShaderName&amp;gt;decal&amp;lt;/ShaderName&amp;gt;&lt;br /&gt;
&amp;lt;/DecalObject&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#399c25&amp;quot;&amp;gt;&#039;&#039;&#039;ColorMap&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Path to the texture file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#399c25&amp;quot;&amp;gt;&#039;&#039;&#039;NormalMap&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Path to the Normal map image file.&lt;br /&gt;
&lt;br /&gt;
===Texture File===&lt;br /&gt;
Can be created with any image manipulation program. Has to be quadratic. &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;br /&gt;
The following file formats are supported:&lt;br /&gt;
* *.tga&lt;br /&gt;
* *.png&lt;br /&gt;
* *.jpeg &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;TODO: add the rest.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Normal Map Image File===&lt;br /&gt;
Can be created with any image manipulation program. Must have the same dimensions as the texture file. &#039;&#039;&#039;TODO: is this True?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Lighting&amp;diff=5800</id>
		<title>Lighting</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Lighting&amp;diff=5800"/>
		<updated>2018-03-09T13:50:02Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Shadow decals */ Added Link to Custom Decals; Edited Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
== Sunlight ==&lt;br /&gt;
The sun allows you to cast dynamic, single-directional light throughout a level. You can use it to simulate either a sun (more direct light) or a moon (more ambient light)&lt;br /&gt;
&lt;br /&gt;
Double click the sun in the sky to select it.&lt;br /&gt;
Double click well outside of the sun editor to deselect it (the normal Q for &amp;quot;deselect all&amp;quot; isn&#039;t working right now)&lt;br /&gt;
&lt;br /&gt;
Move the sun by clicking on the middle of it and dragging it around the sky.&lt;br /&gt;
Change the sun color by dragging the dot around the outer ring.&lt;br /&gt;
Change the sun intensity by clicking &#039;&#039;just&#039;&#039; outside the outer ring and drag it.&lt;br /&gt;
&lt;br /&gt;
If you have problems clicking it, or would prefer a numeric editor, simply hit hit &amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt; to open the scenegraph. Expand &amp;quot;level&amp;quot; to find the Sun parameters.&lt;br /&gt;
&lt;br /&gt;
== Point lights ==&lt;br /&gt;
Point lights allow you to cast omni-directional light from a point in the level.&lt;br /&gt;
&lt;br /&gt;
Top Bar -&amp;gt; Load -&amp;gt; Lighting -&amp;gt; Dynamic Light. The cursor will turn into a plus symbol. Now click in level to place the dynamic light.&lt;br /&gt;
&lt;br /&gt;
To change the light&#039;s area of influence, double click it and hold E while clicking and dragging on its bounding box. Note that this only changes the light&#039;s area of influence, not how much light it outputs. So if you want to make the light cover a larger area you&#039;ll have to both make its area of influence larger, and also increase its brightness using its overbright slider.&lt;br /&gt;
&lt;br /&gt;
To change the color of the light, select it and hit CTRL + P to open the &amp;quot;color picker&amp;quot;. Adjust the color with the color selector, or RGB at the bottom. The &amp;quot;overbright&amp;quot; slider increases the brightness of the light.&lt;br /&gt;
&lt;br /&gt;
If you need an &amp;quot;area light&amp;quot; (non-spherical) effect, you can either use shadow decals to shape the light, or you can place multiple dynamic light objects, or some combination of both. Be careful to both look at how the lights affect static objects in the scene, and how they affect characters that walk through them.&lt;br /&gt;
&lt;br /&gt;
== Shadow decals ==&lt;br /&gt;
Shadows from sunlight are taken care of automatically. However this only allows one level of shadowing, and doesn&#039;t handle ambient occlusion (shadowing of indirect light reflections). Shadow [[Custom Decals|decals]] (&amp;quot;Ambient Shadows&amp;quot;) allow you to manually place decals which simulate this ambient occlusion effect. This can help you visually anchor objects more realistically in the scene, and replicate effects like darkening around corners, and inside cubbyholes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Top Bar -&amp;gt; Load -&amp;gt; Lighting -&amp;gt; Ambient Shadow&#039;&#039;. The cursor will turn into a plus symbol. Now click in level to place the ambient shadow decal.&lt;br /&gt;
&lt;br /&gt;
Double click the ambient shadow decal, and hold E while clicking and dragging on its bounding box (or while shift + right-clicking and dragging on a side to only stretch in that direction). This will let you increase the spread of its effect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Ambient shadow decals will not create shadows if they in direct light. This is because they&#039;re for simulating indirect shadowing. Direct shadowing is already handled by placing objects in the world.&lt;br /&gt;
&lt;br /&gt;
[[File:Ambient shadow decals.png|600px|Ambient Shadow Decals&#039;s effect on light]]&lt;br /&gt;
&lt;br /&gt;
=== Affect on dynamic lights ===&lt;br /&gt;
&lt;br /&gt;
By default, no objects cast shadows from dynamic point lights. This is for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Normally ambient shadow decals also will not create shadow from dynamic point lights, because that would be shading direct light, and they don&#039;t work that way.&lt;br /&gt;
&lt;br /&gt;
However you can use the &amp;lt;code&amp;gt;&#039;&#039;&#039;#SHADOW_POINT_LIGHTS&#039;&#039;&#039;&amp;lt;/code&amp;gt; level Custom Shader to make it so shadow decals can shape point lights, so you can manually simulate this shadowing.&lt;br /&gt;
&lt;br /&gt;
Hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;Y&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; to open the level&#039;s scenegraph, expand Script Params, and add a &amp;lt;code&amp;gt;&#039;&#039;&#039;Custom Shader&#039;&#039;&#039;&amp;lt;/code&amp;gt; param, and hit Enter. Then type &amp;lt;code&amp;gt;&#039;&#039;&#039;#SHADOW_POINT_LIGHTS&#039;&#039;&#039;&amp;lt;/code&amp;gt; in the value column and hit enter.  This will make ambient shadows affect the direct light from dynamic lights, an let you sculpt the light they cast, or let you create manual shadows.&lt;br /&gt;
&lt;br /&gt;
[[File:Shadow point lights shader disabled.png|400px|without #SHADOW_POINT_LIGHTS]]&lt;br /&gt;
[[File:Shadow_point_lights_shader.png|400px|#SHADOW_POINT_LIGHTS Custom Shader setting]]&lt;br /&gt;
[[File:Shadow_point_lights_shader_enabled.png|400px|with #SHADOW_POINT_LIGHTS]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Lighting&amp;diff=5799</id>
		<title>Lighting</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Lighting&amp;diff=5799"/>
		<updated>2018-03-09T13:47:53Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to categories: Tutorials | Modding | Overgrowth&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
== Sunlight ==&lt;br /&gt;
The sun allows you to cast dynamic, single-directional light throughout a level. You can use it to simulate either a sun (more direct light) or a moon (more ambient light)&lt;br /&gt;
&lt;br /&gt;
Double click the sun in the sky to select it.&lt;br /&gt;
Double click well outside of the sun editor to deselect it (the normal Q for &amp;quot;deselect all&amp;quot; isn&#039;t working right now)&lt;br /&gt;
&lt;br /&gt;
Move the sun by clicking on the middle of it and dragging it around the sky.&lt;br /&gt;
Change the sun color by dragging the dot around the outer ring.&lt;br /&gt;
Change the sun intensity by clicking &#039;&#039;just&#039;&#039; outside the outer ring and drag it.&lt;br /&gt;
&lt;br /&gt;
If you have problems clicking it, or would prefer a numeric editor, simply hit hit &amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt; to open the scenegraph. Expand &amp;quot;level&amp;quot; to find the Sun parameters.&lt;br /&gt;
&lt;br /&gt;
== Point lights ==&lt;br /&gt;
Point lights allow you to cast omni-directional light from a point in the level.&lt;br /&gt;
&lt;br /&gt;
Top Bar -&amp;gt; Load -&amp;gt; Lighting -&amp;gt; Dynamic Light. The cursor will turn into a plus symbol. Now click in level to place the dynamic light.&lt;br /&gt;
&lt;br /&gt;
To change the light&#039;s area of influence, double click it and hold E while clicking and dragging on its bounding box. Note that this only changes the light&#039;s area of influence, not how much light it outputs. So if you want to make the light cover a larger area you&#039;ll have to both make its area of influence larger, and also increase its brightness using its overbright slider.&lt;br /&gt;
&lt;br /&gt;
To change the color of the light, select it and hit CTRL + P to open the &amp;quot;color picker&amp;quot;. Adjust the color with the color selector, or RGB at the bottom. The &amp;quot;overbright&amp;quot; slider increases the brightness of the light.&lt;br /&gt;
&lt;br /&gt;
If you need an &amp;quot;area light&amp;quot; (non-spherical) effect, you can either use shadow decals to shape the light, or you can place multiple dynamic light objects, or some combination of both. Be careful to both look at how the lights affect static objects in the scene, and how they affect characters that walk through them.&lt;br /&gt;
&lt;br /&gt;
== Shadow decals ==&lt;br /&gt;
Shadows from sunlight are taken care of automatically. However this only allows one level of shadowing, and doesn&#039;t handle ambient occlusion (shadowing of indirect light reflections). Shadow decals (&amp;quot;Ambient Shadows&amp;quot;) allow you to manually place decals which simulate this ambient occlusion effect. This can help you visually anchor objects more realistically in the scene, and replicate effects like darkening around corners, and inside cubbyholes.&lt;br /&gt;
&lt;br /&gt;
Top Bar -&amp;gt; Load -&amp;gt; Lighting -&amp;gt; Ambient Shadow. The cursor will turn into a plus symbol. Now click in level to place the ambient shadow decal.&lt;br /&gt;
&lt;br /&gt;
Double click the ambient shadow decal, and hold E while clicking and dragging on its bounding box (or while shift + right-clicking and dragging on a side to only stretch in that direction). This will let you increase the spread of its effect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Ambient shadow decals will not create shadows if they in direct light. This is because they&#039;re for simulating indirect shadowing. Direct shadowing is already handled by placing objects in the world.&lt;br /&gt;
&lt;br /&gt;
[[File:Ambient shadow decals.png|600px|Ambient Shadow Decals&#039;s effect on light]]&lt;br /&gt;
&lt;br /&gt;
=== Affect on dynamic lights ===&lt;br /&gt;
&lt;br /&gt;
By default, no objects cast shadows from dynamic point lights. This is for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Normally ambient shadow decals also will not create shadow from dynamic point lights, because that would be shading direct light, and they don&#039;t work that way.&lt;br /&gt;
&lt;br /&gt;
However you can use the &amp;lt;code&amp;gt;&#039;&#039;&#039;#SHADOW_POINT_LIGHTS&#039;&#039;&#039;&amp;lt;/code&amp;gt; level Custom Shader to make it so shadow decals can shape point lights, so you can manually simulate this shadowing.&lt;br /&gt;
&lt;br /&gt;
Hit &amp;lt;kbd&amp;gt;&#039;&#039;&#039;Y&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; to open the level&#039;s scenegraph, expand Script Params, and add a &amp;lt;code&amp;gt;&#039;&#039;&#039;Custom Shader&#039;&#039;&#039;&amp;lt;/code&amp;gt; param, and hit Enter. Then type &amp;lt;code&amp;gt;&#039;&#039;&#039;#SHADOW_POINT_LIGHTS&#039;&#039;&#039;&amp;lt;/code&amp;gt; in the value column and hit enter.  This will make ambient shadows affect the direct light from dynamic lights, an let you sculpt the light they cast, or let you create manual shadows.&lt;br /&gt;
&lt;br /&gt;
[[File:Shadow point lights shader disabled.png|400px|without #SHADOW_POINT_LIGHTS]]&lt;br /&gt;
[[File:Shadow_point_lights_shader.png|400px|#SHADOW_POINT_LIGHTS Custom Shader setting]]&lt;br /&gt;
[[File:Shadow_point_lights_shader_enabled.png|400px|with #SHADOW_POINT_LIGHTS]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Decals&amp;diff=5798</id>
		<title>Decals</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Decals&amp;diff=5798"/>
		<updated>2018-03-09T13:36:04Z</updated>

		<summary type="html">&lt;p&gt;Mng: Redirected to Custom_Decals; Removed &amp;quot;{{stub}} http://www.moddb.com/games/overgrowth/news/hd-video-dainty-decal-demonstration  Category: Tutorials Category: Modding Category: Overgrowth&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect[[Custom Decals]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=File:Receiver_icon_small.png&amp;diff=5797</id>
		<title>File:Receiver icon small.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=File:Receiver_icon_small.png&amp;diff=5797"/>
		<updated>2018-03-09T13:12:28Z</updated>

		<summary type="html">&lt;p&gt;Mng: Logo for Receiver, taken from the Wolfire website. &amp;#039;&amp;#039;&amp;#039;TODO:&amp;#039;&amp;#039;&amp;#039; Upload a better image?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Logo for Receiver, taken from the Wolfire website. &#039;&#039;&#039;TODO:&#039;&#039;&#039; Upload a better image?&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Whaleman&amp;diff=5796</id>
		<title>Whaleman</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Whaleman&amp;diff=5796"/>
		<updated>2018-03-08T21:43:22Z</updated>

		<summary type="html">&lt;p&gt;Mng: hehe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Whaleman is a user-created model.&lt;br /&gt;
&lt;br /&gt;
It became popular amongst Overgrowth fans due the utter randomness it exhibits.&lt;br /&gt;
&lt;br /&gt;
[[Category: Lore]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Script_Parameters&amp;diff=5795</id>
		<title>Script Parameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Script_Parameters&amp;diff=5795"/>
		<updated>2018-03-08T21:42:02Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category: Modding, Overgrowth&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:&#039;&#039;This page covers non-hotspot object script parameters only. For hotspot specific script parameters, see [[Hotspots]]. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Script parameters can be set per object (and Level) and are used to pass parameters to an underlying script.&lt;br /&gt;
&lt;br /&gt;
The script parameters for the selected object can be most easily changed using the [[Editor_Interface#Selected_Window|selected window]].&lt;br /&gt;
&lt;br /&gt;
Some parameters might not exist by default. If that&#039;s the case you simply need to press the &amp;quot;New parameter&amp;quot; button and type in the exact same name (including big/small letters).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Level ==&lt;br /&gt;
The level parameters can be accessed by bringing up the scenegraph window, expanding &amp;quot;Level&amp;quot; at the top, and then &amp;quot;Script Params&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Achievements&lt;br /&gt;
| string&lt;br /&gt;
| Decide which challenges you can complete on the level, they appear on the level end screen.&lt;br /&gt;
|-&lt;br /&gt;
! Custom Shader&lt;br /&gt;
| string&lt;br /&gt;
| Here you can specify a list of shader defines (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;#TEST_CLOUDS_2 #SNOW_EVERYWHERE&#039;&#039;&#039;&amp;lt;/code&amp;gt; - [[Shader_And_Weather_Effects#Weather_Effects.2FWorld_Shaders|full list here]]) to change how the level is rendered.&lt;br /&gt;
|-&lt;br /&gt;
! Fog amount&lt;br /&gt;
| float&lt;br /&gt;
| Sets the thicknoess of the atmosphere and thus how far you can see.&lt;br /&gt;
|-&lt;br /&gt;
! GPU Particle Field&lt;br /&gt;
| string&lt;br /&gt;
| Here you can specify a list of shader defines (e.g. &amp;lt;code&amp;gt;&#039;&#039;&#039;#SNOW #MED&#039;&#039;&#039;&amp;lt;/code&amp;gt; - [[Shader_And_Weather_Effects#Particles|full list here]]) to add global particle effects.&lt;br /&gt;
|-&lt;br /&gt;
! HDR Black point&lt;br /&gt;
| float&lt;br /&gt;
| Sets what brightness should be regarded as black.&lt;br /&gt;
|-&lt;br /&gt;
! HDR Bloom multiplier&lt;br /&gt;
| float&lt;br /&gt;
| Decides how much light pixels bleed.&lt;br /&gt;
|-&lt;br /&gt;
! HDR White point&lt;br /&gt;
| float&lt;br /&gt;
| Sets what brightness should be regarded as white.&lt;br /&gt;
|-&lt;br /&gt;
! Level Boundaries&lt;br /&gt;
| bool&lt;br /&gt;
| If this is checked characters will be pushed back into the level when they try to go past a certain point.&lt;br /&gt;
|-&lt;br /&gt;
! Objectives&lt;br /&gt;
| string&lt;br /&gt;
| Set the goal of the level.&lt;br /&gt;
|-&lt;br /&gt;
! Sky Brightness&lt;br /&gt;
| float&lt;br /&gt;
| Adjust how bright the sky should be.&lt;br /&gt;
|-&lt;br /&gt;
! Sky Rotation&lt;br /&gt;
| int&lt;br /&gt;
| Move the sky around.&lt;br /&gt;
|-&lt;br /&gt;
! Sky Tint&lt;br /&gt;
| RGB&lt;br /&gt;
| Makes the sky have a specified color.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
=== Stats ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Attack Damage&lt;br /&gt;
| float&lt;br /&gt;
| The higher this is, the more health is taken from attacked characters.&lt;br /&gt;
|-&lt;br /&gt;
! Attack Knockback&lt;br /&gt;
| float&lt;br /&gt;
| The higher this is, the more physics force is applied to attacked characters.&lt;br /&gt;
|-&lt;br /&gt;
! Attack Speed&lt;br /&gt;
| float&lt;br /&gt;
| The higher this is, the faster attack animations play.&lt;br /&gt;
|-&lt;br /&gt;
! Damage Resistance&lt;br /&gt;
| float&lt;br /&gt;
| The higher this is, less health this character loses when it takes damage.&lt;br /&gt;
|-&lt;br /&gt;
! Knockout shield&lt;br /&gt;
| int&lt;br /&gt;
| How many times the character needs to lose their footing before they start taking real damage.&lt;br /&gt;
|-&lt;br /&gt;
! Movement Speed&lt;br /&gt;
| float&lt;br /&gt;
| How fast the character moves when running.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AI ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Aggression&lt;br /&gt;
| float&lt;br /&gt;
| How often this AI should attempt to attack.&lt;br /&gt;
|-&lt;br /&gt;
! Block Follow-up&lt;br /&gt;
| float&lt;br /&gt;
| How often this AI should attempt a shoulder throw after blocking an attack.&lt;br /&gt;
|-&lt;br /&gt;
! Block Skill&lt;br /&gt;
| float&lt;br /&gt;
| How often this AI should block attacks.&lt;br /&gt;
|-&lt;br /&gt;
! Focus FOV distance&lt;br /&gt;
| float&lt;br /&gt;
| How far the AI can see, in meters.&lt;br /&gt;
|-&lt;br /&gt;
! Focus FOV horizontal&lt;br /&gt;
| float&lt;br /&gt;
| How wide the AI&#039;s field of view is, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
! Focus FOV vertical&lt;br /&gt;
| float&lt;br /&gt;
| How tall the AI&#039;s field of view is, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
! Peripheral FOV distance&lt;br /&gt;
| float&lt;br /&gt;
| How far the AI can see in its close proximity, in meters.&lt;br /&gt;
|-&lt;br /&gt;
! Peripheral FOV horizontal&lt;br /&gt;
| float&lt;br /&gt;
| How wide the AI&#039;s near field of view is, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
! Peripheral FOV vertical&lt;br /&gt;
| float&lt;br /&gt;
| How tall the AI&#039;s near field of view is, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
! Ground Aggression&lt;br /&gt;
| float&lt;br /&gt;
| How often the AI should attack an opponent that&#039;s ragdolled.&lt;br /&gt;
|-&lt;br /&gt;
! Hearing Modifier&lt;br /&gt;
| float&lt;br /&gt;
| A multiplier for the distance at which that sounds can be heard.&lt;br /&gt;
|-&lt;br /&gt;
! scared&lt;br /&gt;
| -&lt;br /&gt;
| Makes the AI run away from enemies.&lt;br /&gt;
|-&lt;br /&gt;
! Stick To Nav Mesh&lt;br /&gt;
| -&lt;br /&gt;
| Removes physics calculations for this NPC&#039;s movement to ensure they do not fall off cliffs etc.&lt;br /&gt;
|-&lt;br /&gt;
! Throw Counter Probability&lt;br /&gt;
| float&lt;br /&gt;
| Disables this NPC&#039;s ability to block shoulder throws.&lt;br /&gt;
|-&lt;br /&gt;
! Throw Trainer&lt;br /&gt;
| -&lt;br /&gt;
| Changes sound when shoulder throwing this character. If tutorials are on, it also makes the character invulnerable to jump kicks, makes them block all attacks, and sets their health really low when their KO shield is gone. This is used on the first enemy in the &amp;quot;Slaver Path&amp;quot; level in the Overgrowth story.&lt;br /&gt;
|-&lt;br /&gt;
! Weapon Catch Skill&lt;br /&gt;
| float&lt;br /&gt;
| Changes the NPC&#039;s ability to grab thrown weapons in the air.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Exactly how does focus/peripheral FOV work?&lt;br /&gt;
&lt;br /&gt;
=== Visual ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Character Scale&lt;br /&gt;
| float&lt;br /&gt;
| The higher this is, the bigger the character is.&lt;br /&gt;
|-&lt;br /&gt;
! Ear Size&lt;br /&gt;
| float&lt;br /&gt;
| How big the ears are.&lt;br /&gt;
|-&lt;br /&gt;
! Fat&lt;br /&gt;
| float&lt;br /&gt;
| How heavy the character is.&lt;br /&gt;
|-&lt;br /&gt;
! Left handed&lt;br /&gt;
| bool&lt;br /&gt;
| If checked, the character uses weapons in their left hand instead of their right hand.&lt;br /&gt;
|-&lt;br /&gt;
! Muscle&lt;br /&gt;
| float&lt;br /&gt;
| How bulky the character is.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Cannot Be Disarmed&lt;br /&gt;
| bool&lt;br /&gt;
| If checked, this character cannot have its weapon taken away.&lt;br /&gt;
|-&lt;br /&gt;
! Static&lt;br /&gt;
| bool&lt;br /&gt;
| If checked, this character can&#039;t move and has no AI.&lt;br /&gt;
|-&lt;br /&gt;
! Teams&lt;br /&gt;
| string&lt;br /&gt;
| All characters that share at least one team can&#039;t attack each other. A character can be on more than one team if you just separate them by commas, for example &amp;lt;code&amp;gt;team1, team2, team3&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Rain_Weather_Effects&amp;diff=5794</id>
		<title>Rain Weather Effects</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Rain_Weather_Effects&amp;diff=5794"/>
		<updated>2018-03-08T21:41:03Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category: Modding, Overgrowth&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a total of four pieces that make up the rain weather effects that you see on a level like Tree Climb or Cave Arena.&lt;br /&gt;
&lt;br /&gt;
== Rain particle effect ==&lt;br /&gt;
&lt;br /&gt;
This adds the falling rain drop particles.&lt;br /&gt;
&lt;br /&gt;
[[File:Rain-particles2_small.gif]]&lt;br /&gt;
&lt;br /&gt;
To add this, add the &#039;&#039;&#039;&amp;lt;code&amp;gt;GPU Particle Field&amp;lt;/code&amp;gt;&#039;&#039;&#039; entry to the level&#039;s script parameters. Set this value to &#039;&#039;&#039;&amp;lt;code&amp;gt;#RAIN&amp;lt;/code&amp;gt;&#039;&#039;&#039; (make sure you use &#039;&#039;&#039;upper-case&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s [[Shader_And_Weather_Effects#Particles|instructions for adding a &#039;&#039;&#039;&amp;lt;code&amp;gt;GPU Particle Field&amp;lt;/code&amp;gt;&#039;&#039;&#039; value]].&lt;br /&gt;
&lt;br /&gt;
== Water &amp;quot;rain splash&amp;quot; shader effect ==&lt;br /&gt;
&lt;br /&gt;
This adds the shimmering water layer effect to all the objects in the world.&lt;br /&gt;
&lt;br /&gt;
[[File:Rainy-shader3-z-small.gif]]&lt;br /&gt;
&lt;br /&gt;
To add this, add the &#039;&#039;&#039;&amp;lt;code&amp;gt;Custom Shader&amp;lt;/code&amp;gt;&#039;&#039;&#039; entry to the level&#039;s script parameters. Set this value to &#039;&#039;&#039;&amp;lt;code&amp;gt;#RAINY&amp;lt;/code&amp;gt;&#039;&#039;&#039; (make sure you use &#039;&#039;&#039;upper-case&#039;&#039;&#039;, and it is &#039;&#039;&#039;&amp;lt;code&amp;gt;#RAINY&amp;lt;/code&amp;gt;&#039;&#039;&#039; not &#039;&#039;&#039;&amp;lt;code&amp;gt;#RAIN&amp;lt;/code&amp;gt;&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s [[Shader_And_Weather_Effects#Weather_Effects.2FWorld_Shaders|instructions for adding a &#039;&#039;&#039;&amp;lt;code&amp;gt;Custom Shader&amp;lt;/code&amp;gt;&#039;&#039;&#039; value]].&lt;br /&gt;
&lt;br /&gt;
== Thunder and lightning hotspot ==&lt;br /&gt;
&lt;br /&gt;
This add the periodic light flashes and thunder clap sound (the ambient rain sound is separate, in case you want to have a lightning storm going on nearby, but no rain).&lt;br /&gt;
&lt;br /&gt;
[[File:Rain-hotspot-lightning-effect.gif]]&lt;br /&gt;
&lt;br /&gt;
[[File:Editor-load-load-item.png|114px|thumb|&#039;&#039;&#039;Load item...&#039;&#039;&#039; menu option]]&lt;br /&gt;
&lt;br /&gt;
To add this, use the &#039;&#039;&#039;Load item...&#039;&#039;&#039; menu option:&lt;br /&gt;
&lt;br /&gt;
# Spawn the new hotspot object: &#039;&#039;&#039;Top Bar&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load item...&#039;&#039;&#039;&amp;lt;br&amp;gt;(this will open a new window to browse for files. It may be easier to do this step if you have the game in windowed mode)&lt;br /&gt;
# Browse to &#039;&#039;&#039;&amp;lt;code&amp;gt;Data/Objects/Hotspots&amp;lt;/code&amp;gt;&#039;&#039;&#039; and select &#039;&#039;&#039;&amp;lt;code&amp;gt;rain.xml&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
# Your cursor will turn into a &#039;&#039;&#039;&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;&#039;&#039;&#039; symbol&lt;br /&gt;
# Click somewhere in the world to place the hotspot. The location doesn&#039;t matter, since it acts globally across the level.&lt;br /&gt;
&lt;br /&gt;
There are no parameters for this hotspot, so you don&#039;t have to change anything at this point.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If you want to customize this effect, you&#039;re going to need to make your own copy of the script for that hotspot (&amp;lt;code&amp;gt;Data/Scripts/hotspots/rain.as&amp;lt;/code&amp;gt;) and edit that script.&amp;lt;br&amp;gt;Then copy the hotspot XML (&amp;lt;code&amp;gt;Data/Objects/Hotspots/rain.xml&amp;lt;/code&amp;gt;) and point it at your new script.&lt;br /&gt;
&lt;br /&gt;
== Ambient rain sound ==&lt;br /&gt;
&lt;br /&gt;
This adds the constant rain sound that you hear throughout the level.&lt;br /&gt;
&lt;br /&gt;
[[File:Editor-load-sounds-ambient-sound.png|139px|thumb|&#039;&#039;&#039;Ambient sound hotspot&#039;&#039;&#039; menu option]]&lt;br /&gt;
&lt;br /&gt;
# Spawn the new hotspot object: &#039;&#039;&#039;Top Bar&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Load&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Sounds&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Ambient sound hotspot&#039;&#039;&#039;&lt;br /&gt;
# Your cursor will turn into a &#039;&#039;&#039;&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;&#039;&#039;&#039; symbol&lt;br /&gt;
# Click somewhere in the world to place the hotspot. The location doesn&#039;t matter, since it acts globally across the level&lt;br /&gt;
# Double click on the new object to select it&lt;br /&gt;
# Open the object properties: &#039;&#039;&#039;Top Bar&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Windows&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Selected&#039;&#039;&#039; (or just press the &#039;&#039;&#039;&amp;lt;kbd&amp;gt;U&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; key)&lt;br /&gt;
# Drill down to find the script params, and set these values:&lt;br /&gt;
&lt;br /&gt;
=== Values for Ambient sound hotspot ===&lt;br /&gt;
&lt;br /&gt;
[[File:Ambient-sound-rain-hotspot-settings.png|582px|thumb|Rain sound hotspot settings]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;Sound Path&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Set this to &#039;&#039;&#039;&amp;lt;code&amp;gt;Data/Sounds/weather/rain.wav&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;Gain&amp;lt;/code&amp;gt;&#039;&#039;&#039; - You might want to set it to &#039;&#039;&#039;&amp;lt;code&amp;gt;0.5&amp;lt;/code&amp;gt;&#039;&#039;&#039; or even lower. We set ours to &#039;&#039;&#039;&amp;lt;code&amp;gt;0.57&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;Global&amp;lt;/code&amp;gt;&#039;&#039;&#039; - (default value of &#039;&#039;&#039;&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&#039;&#039;&#039; is fine)&lt;br /&gt;
* &amp;lt;code&amp;gt;Delay Max&amp;lt;/code&amp;gt; - (default value of &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; is fine)&lt;br /&gt;
* &amp;lt;code&amp;gt;Delay Min&amp;lt;/code&amp;gt; - (default value of &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; is fine)&lt;br /&gt;
* &amp;lt;code&amp;gt;Fade Distance&amp;lt;/code&amp;gt; - (default value of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is fine)&lt;br /&gt;
* &amp;lt;code&amp;gt;Wind Scale&amp;lt;/code&amp;gt; - (default value of &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; is fine)&lt;br /&gt;
&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Hotspots&amp;diff=5793</id>
		<title>Hotspots</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Hotspots&amp;diff=5793"/>
		<updated>2018-03-08T19:42:49Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* no_grab */ Added Link to Prefabs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:&#039;&#039;This Page doesn&#039;t cover creating self-made hotspots. To read about that, see [[Hotspot Scripting]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hotspots are objects that make things happen in the game in different ways. They can be used to make fire, water, kill boxes, objectives and much more.&lt;br /&gt;
&lt;br /&gt;
Several hotspots can be found in the top bar under &#039;&#039;Load → Hotspot&#039;&#039;, however not all hotspots can be found there. All hotspots can be found by going to &#039;&#039;Load → Load item...&#039;&#039; and browsing to &#039;&#039;../Overgrowth/Data/Objects/Hotspots/&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This page lists all hotspots available in the game and what their use is.&lt;br /&gt;
&lt;br /&gt;
== Hotspots ==&lt;br /&gt;
&lt;br /&gt;
=== activate_characters ===&lt;br /&gt;
When the player enters the hotspot some NPCs has their &#039;&#039;static&#039;&#039; flag set to false. This can be used to optimize a level by having enemies be &#039;&#039;static&#039;&#039; until the player gets close to them.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! characters&lt;br /&gt;
| list of ints || A space-delimited list of IDs of characters which should have their &#039;&#039;static&#039;&#039; flag set to false when the player enters the hotspot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example: 5124 423 566&lt;br /&gt;
&lt;br /&gt;
=== ambient_sound ===&lt;br /&gt;
Is used to play environment sounds, either in some specific part of the level, or in the entire level. It can be used to add creaky wood sounds only to a ship, wind sound only at the top of a mountain, rustling leaves sound only close to trees and so on.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Delay Max&lt;br /&gt;
| int || The maximum random time in seconds until this sound triggers after having been triggered&lt;br /&gt;
|-&lt;br /&gt;
! Delay Min&lt;br /&gt;
| int || Same as &#039;&#039;Delay Max&#039;&#039;, except the minimum random time&lt;br /&gt;
|-&lt;br /&gt;
! Fade Distance&lt;br /&gt;
| int || The distance in meters outside of the hotspot that the sound should start being audible, it fades in to full volume as the camera gets closer to the hotspot&lt;br /&gt;
|-&lt;br /&gt;
! Gain&lt;br /&gt;
| float || How loud the sound should be&lt;br /&gt;
|-&lt;br /&gt;
! Global&lt;br /&gt;
| bool || If the sound should play everywhere, and not only at the hotspot&#039;s location&lt;br /&gt;
|-&lt;br /&gt;
! Sound Path&lt;br /&gt;
| string || The path to the sound to use, they can be found in Data/Sounds/&lt;br /&gt;
|-&lt;br /&gt;
! Wind Scale&lt;br /&gt;
| bool || Makes the sound increase and decrease in volume to make it feel like it&#039;s being created by wind&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== boundary ===&lt;br /&gt;
When the player enters this hotspot&#039;s volume, they are pushed in a specific direction based on the rotation of the hotspot. Note that it only pushes horizontally, it can not push up or down. To know which direction it pushes in, simply test it by running into it.&lt;br /&gt;
&lt;br /&gt;
=== displayimage ===&lt;br /&gt;
Renders an image in the middle of the screen when the player is inside the hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! [0] Display Image Path&lt;br /&gt;
| string || Location on disk of image to show&lt;br /&gt;
|-&lt;br /&gt;
! [1] Scale&lt;br /&gt;
| float || How large the image should be, in percent&lt;br /&gt;
|-&lt;br /&gt;
! [2a] Red Tint&lt;br /&gt;
| int || Multiplier for image&#039;s red channel&lt;br /&gt;
|-&lt;br /&gt;
! [2b] Green Tint&lt;br /&gt;
| int || Multiplier for image&#039;s green channel&lt;br /&gt;
|-&lt;br /&gt;
! [2c] Blue Tint&lt;br /&gt;
| int || Multiplier for image&#039;s blue channel&lt;br /&gt;
|-&lt;br /&gt;
! [2d] Alpha Tint&lt;br /&gt;
| int || Multiplier for image&#039;s alpha channel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== displaytext ===&lt;br /&gt;
Shows some text on the screen while the player is in the hotspot. Does not support word wrap or line breaks.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Display Text&lt;br /&gt;
| string || Text to show&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== displayvideo ===&lt;br /&gt;
Does not work.&lt;br /&gt;
&lt;br /&gt;
=== emitter ===&lt;br /&gt;
Creates either smoke, fog or water splashes within the hotspot volume.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
| string || Set it to either &amp;quot;Smoke&amp;quot;, &amp;quot;Foggy&amp;quot; or &amp;quot;Falling Water&amp;quot; (without the quotes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== eye_adjust ===&lt;br /&gt;
Changes the HDR settings when the player character enters the hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! HDR Black point&lt;br /&gt;
| float || Sets the low range of the dynamic range&lt;br /&gt;
|-&lt;br /&gt;
! HDR Bloom multiplier&lt;br /&gt;
| float || Changes the intensity of the bloom effect&lt;br /&gt;
|-&lt;br /&gt;
! HDR White point&lt;br /&gt;
| float || Sets the high range of the dynamic range&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== fire_test ===&lt;br /&gt;
Pretty looking fire composed of a number of textured ribbons and a light source. Can ignite characters when they touch it.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Fire Ribbons&lt;br /&gt;
| int || The number of ribbons that should be used&lt;br /&gt;
|-&lt;br /&gt;
! Ignite Characters&lt;br /&gt;
| bool || If checked, characters will ignite when they touch the fire, only works on NPCs if they are ragdolled&lt;br /&gt;
|-&lt;br /&gt;
! Light Amplify&lt;br /&gt;
| float || The intensity of the light from the fire&lt;br /&gt;
|-&lt;br /&gt;
! Light Distance&lt;br /&gt;
| float || How far away the light should reach &#039;&#039;&#039;TODO:&#039;&#039;&#039; What unit is this in?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== general_campaign_level ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; How does this work?&lt;br /&gt;
&lt;br /&gt;
=== generic_kill ===&lt;br /&gt;
Kills any character that enters the hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! KillNPC&lt;br /&gt;
| bool || If checked, the hotspot is lethal to NPCs&lt;br /&gt;
|-&lt;br /&gt;
! KillPlayer&lt;br /&gt;
| bool || If checked, the hotspot is lethal to the player&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== lava_kill ===&lt;br /&gt;
Ignites and instantly kills any character that comes into contact with the hotspot.&lt;br /&gt;
&lt;br /&gt;
=== levelwin ===&lt;br /&gt;
Sends a global &amp;quot;levelwin&amp;quot; message when the player enters the hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! branch&lt;br /&gt;
| string || After the &amp;quot;levelwin&amp;quot; message, a space is added and then this string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== loadlevel ===&lt;br /&gt;
Loads a specified level when the player enters the hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Level to load&lt;br /&gt;
| string || The path to the level you want to load, starting in ../Overgrowth/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== lugaru_hawk ===&lt;br /&gt;
Adds a hawk that circles around the hotspot.&lt;br /&gt;
&lt;br /&gt;
=== new_checkpoint ===&lt;br /&gt;
A checkpoint that&#039;s used together with the [[#respawn_at_checkpoint|respawn_at_checkpoint]] hotspot. Entering this hotspot makes this the current checkpoint. When touching a [[#respawn_at_checkpoint|respawn_at_checkpoint]] you get teleported to the center of the most recently touched &#039;&#039;new_checkpoint&#039;&#039; hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! LastEnteredTime&lt;br /&gt;
| int || A timestamp for when this was most recently touched, this is used to determine which &#039;&#039;new_checkpoint&#039;&#039; hotspot to respawn at when touching a [[#respawn_at_checkpoint|respawn_at_checkpoint]] hotspot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== no_grab ===&lt;br /&gt;
Any ledge within this hotspot can&#039;t be grabbed. You would usually use the [[Collision Painting|collision painting system]] to decide whether a ledge is grabbable, but if you want to for instance make a ledge in a [[Prefabs|prefab]] not grabbable you can&#039;t always do that, so you can then use this no_grab hotspot instead.&lt;br /&gt;
&lt;br /&gt;
=== object_disappear ===&lt;br /&gt;
Deletes the specified object when the player enters the hotspot.&lt;br /&gt;
&lt;br /&gt;
Note that this hotspot does not use the actual name of the object. You need to manually add a script parameter on the object you want to delete called &amp;quot;Name&amp;quot;, and write the same name you specify in &amp;quot;Object name to dissapear&amp;quot; parameter in the hotspot.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that this hotspot actually &#039;&#039;deletes&#039;&#039; the objects from the level, as if you would have deleted them in the editor.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Object name to dissapear&lt;br /&gt;
| string || Any object that has an added &amp;quot;Name&amp;quot; script parameter that is the same as the string in this parameter will be deleted&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level ===&lt;br /&gt;
The hotspot used in the Overgrowth story to set goals and/or layered music within a level. All the Information for this Hotspot can be found on the &#039;&#039;[[Checkpoints]]&#039;&#039; page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Should another hotspot be used instead of this one?&lt;br /&gt;
&lt;br /&gt;
=== overgrowth_level_checkpoint ===&lt;br /&gt;
The checkpoints used in the Overgrowth story to activate a &#039;&#039;&amp;quot;reach&amp;quot;&#039;&#039; goal. All the Information about this Hotspot can be found on the &#039;&#039;[[Checkpoints]]&#039;&#039; page.&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Should another hotspot be used instead of this one?&lt;br /&gt;
&lt;br /&gt;
=== portal ===&lt;br /&gt;
Allows for traveling bwtween levels. Requires a [[#portal_manager|portal_manager]] hotspot to function properly.&lt;br /&gt;
&lt;br /&gt;
You can specify a light that gets brighter as a character approaches the portal.&lt;br /&gt;
&lt;br /&gt;
To be able to travel to this portal from another level you need to create a &#039;&#039;Load → Utility → Player Spawn&#039;&#039; object.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Level to load&lt;br /&gt;
| string || The path to the level to load when entering this hotspot&lt;br /&gt;
|-&lt;br /&gt;
! light_id&lt;br /&gt;
| int || The ID of the dynamic_light_object that should get brighter when a character gets closer to the hotspot&lt;br /&gt;
|-&lt;br /&gt;
! spawn_point&lt;br /&gt;
| int || The ID of the &#039;&#039;Player Spawn&#039;&#039; object you want the player to spawn at when teleporting to this level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== portal_manager ===&lt;br /&gt;
Required when using the portal hotspot.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Level to load&lt;br /&gt;
| int list || The IDs of all portals in the level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== resetcharacter ===&lt;br /&gt;
Resets any character that touches this hotspot to their spawn location.&lt;br /&gt;
&lt;br /&gt;
=== resetlevel ===&lt;br /&gt;
Resets the level when the player touches it, as if you press L in the editor.&lt;br /&gt;
&lt;br /&gt;
=== respawn_at_checkpoint ===&lt;br /&gt;
Used together with the [[#new_checkpoint|new_checkpoint]] hotspot. When the player touches this hotspot they get teleported to the center of the most recently touched [[#new_checkpoint|new_checkpoint]].&lt;br /&gt;
&lt;br /&gt;
=== soak_level ===&lt;br /&gt;
After the player enters the hotspot, a new level is loaded after a set amount of time.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! next_level&lt;br /&gt;
| string || The path to the level to load&lt;br /&gt;
|-&lt;br /&gt;
! time_to_next_level&lt;br /&gt;
| int || Number of seconds to wait before loading the next level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== spike ===&lt;br /&gt;
A spike that can impale characters.&lt;br /&gt;
&lt;br /&gt;
=== start_dialogue ===&lt;br /&gt;
Allows for dialogues to be started in different ways when the player is in the hotspot. For more information about dialogues read the [[Dialogue]] article.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Automatic&lt;br /&gt;
| bool || The dialogue starts automatically when the player enters the hotspot&lt;br /&gt;
|-&lt;br /&gt;
! Color&lt;br /&gt;
| RGB floats || &#039;&#039;&#039;TODO:&#039;&#039;&#039; What does this do?&lt;br /&gt;
|-&lt;br /&gt;
! Dialogue&lt;br /&gt;
| string || The name of the dialogue to start&lt;br /&gt;
|-&lt;br /&gt;
! Fade&lt;br /&gt;
| bool || Fade to black when starting the dialogue, to make transition less jarring&lt;br /&gt;
|-&lt;br /&gt;
! Visible in game&lt;br /&gt;
| bool || Keeps the signpost icon visible in the game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== StartRace ===&lt;br /&gt;
&#039;&#039;&#039;TODO: Does it not work like [[#FinishRace|FinishRace]] ?&#039;&#039;&#039;&lt;br /&gt;
Used to start a race similar to the one shown off in the video &#039;&#039;[https://www.youtube.com/watch?v=cc5L9sBF7D0|Building A Race Course In Overgrowth - Wolfire Games]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== tutorial ===&lt;br /&gt;
Activates built-in tutorials when entered. &#039;&#039;Settings → Game → Tutorials&#039;&#039; needs to be on for the tutorials to trigger.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
| string || Decides which tutorial to run, can be one of the following: stealth, basic, jump_climb, walljump, jump_higher, jump_long, combat, jumpkick, knife, throw, flip_roll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== victorytrigger ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Is this still usable? If so, how is it used?&lt;br /&gt;
&lt;br /&gt;
=== water_bob ===&lt;br /&gt;
Makes the specified objects move as if they are on water.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Objects&lt;br /&gt;
| list of ints || The IDs of the objects that should be affected&lt;br /&gt;
|-&lt;br /&gt;
! SavedTransform&lt;br /&gt;
| Translation &amp;amp; rotation as floats || The original location of the objects&lt;br /&gt;
|-&lt;br /&gt;
! rotation_scale&lt;br /&gt;
| float || Multiplier of rotation&lt;br /&gt;
|-&lt;br /&gt;
! time_scale&lt;br /&gt;
| float || How fast the objects should move&lt;br /&gt;
|-&lt;br /&gt;
! translation_scale&lt;br /&gt;
| float || Multiplier of translation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== water_bob_fast ===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Is this simply a better optimized version of the &amp;quot;water_bob&amp;quot; hotspot?&lt;br /&gt;
&lt;br /&gt;
=== wet_cube ===&lt;br /&gt;
A block of water with nice graphics that slows you down if you walk in it and drowns you if you&#039;re below the surface for too long.&lt;br /&gt;
&lt;br /&gt;
==== Script Params ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
! Water Fog&lt;br /&gt;
| float || How far down into the water you can see&lt;br /&gt;
|-&lt;br /&gt;
! Wave Density&lt;br /&gt;
| float || How zoomed in the waves should be&lt;br /&gt;
|-&lt;br /&gt;
! Wave Height&lt;br /&gt;
| float || How strong the waves should be&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Deprecated and Component Hotspots ==&lt;br /&gt;
These hotspots have either been replaced by a better alternative, have stopped working at some point during the development of the game, or can&#039;t be used on their own.&lt;br /&gt;
&lt;br /&gt;
=== announce_items ===&lt;br /&gt;
Remnant from old tutorial level.&lt;br /&gt;
&lt;br /&gt;
=== Checkpoint ===&lt;br /&gt;
No longer used, should use the new [[Checkpoints|checkpoint system]] instead.&lt;br /&gt;
&lt;br /&gt;
=== collectable_target ===&lt;br /&gt;
Does not work anymore.&lt;br /&gt;
&lt;br /&gt;
=== dark_world_level ===&lt;br /&gt;
Crashes the game.&lt;br /&gt;
&lt;br /&gt;
=== dark_world_trigger ===&lt;br /&gt;
Function unknown.&lt;br /&gt;
&lt;br /&gt;
=== destination_trail ===&lt;br /&gt;
Function unknown.&lt;br /&gt;
&lt;br /&gt;
=== FinishRace ===&lt;br /&gt;
No longer works. Used in the Video &#039;&#039;[https://www.youtube.com/watch?v=cc5L9sBF7D0|Building A Race Course In Overgrowth - Wolfire Games]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== fixedragdollpart ===&lt;br /&gt;
Not used on its own, used in aschar for impaling.&lt;br /&gt;
&lt;br /&gt;
=== kill ===&lt;br /&gt;
Deprecated, use the [[#generic_kill|generic_kill]] or [[#lava_kill|lava_kill]] hotspots instead.&lt;br /&gt;
&lt;br /&gt;
=== lugaru_level ===&lt;br /&gt;
The level hotspot used in the official Lugaru story.&lt;br /&gt;
&lt;br /&gt;
=== must_visit_trigger ===&lt;br /&gt;
Old unused challenge hotspot.&lt;br /&gt;
&lt;br /&gt;
=== particle_foggy ===&lt;br /&gt;
This is actually not a hotspot, it just creates an emitter hotspot that&#039;s pre-configured as fog.&lt;br /&gt;
&lt;br /&gt;
=== rain ===&lt;br /&gt;
Particle based rain, use the [[Shader And Weather Effects|rain shaders]] instead.&lt;br /&gt;
&lt;br /&gt;
=== spike_tip ===&lt;br /&gt;
Used by the spike hotspot.&lt;br /&gt;
&lt;br /&gt;
=== snow ===&lt;br /&gt;
Particle based snow, use the [[Shader And Weather Effects|snow shaders]] instead.&lt;br /&gt;
&lt;br /&gt;
=== water ===&lt;br /&gt;
Deprecated, use [[#wet_cube|wet_cube]] instead.&lt;br /&gt;
&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
[[Category: Modding]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Configuring_Overgrowth&amp;diff=5792</id>
		<title>Configuring Overgrowth</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Configuring_Overgrowth&amp;diff=5792"/>
		<updated>2018-03-08T19:33:30Z</updated>

		<summary type="html">&lt;p&gt;Mng: /* Editor Hotkeys */ Added link to Prefabs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can edit most settings by pressing the Settings button on the main menu or on the pause menu. There are even more settings available from the &amp;quot;Settings&amp;quot; top menu bar on the main menu.&lt;br /&gt;
&lt;br /&gt;
If you need to edit the config without starting the game, you can change your configuration by modifying your &#039;&#039;&#039;config.txt&#039;&#039;&#039;. Just below you can see the location of this file on each operating system.&lt;br /&gt;
&lt;br /&gt;
There is also a community made tool available for editing the config file without starting the game, the [http://forums.wolfire.com/viewtopic.php?f=13&amp;amp;t=14201 SUMLauncher].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Config File Location==&lt;br /&gt;
&lt;br /&gt;
The configuration file is created when Overgrowth is started for the first time.&lt;br /&gt;
&lt;br /&gt;
To view or edit your config file, find your operating system in the list below and follow the shown path.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;My Documents\Wolfire\Overgrowth\Data\config.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; NOT Program Files\Wolfire\Overgrowth\Data!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mac&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Macintosh HD/Users/~/Library/Application Support/Overgrowth/Data/config.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where ~ is your username.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; If you are using Lion, your library folder is hidden by default... in the finder, click the &amp;quot;Go&amp;quot; menu, then Press Option, and Library will appear in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Linux&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;~/.local/share/Overgrowth/Data/config.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
===General Settings===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Setting !! Default Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
! screenwidth&lt;br /&gt;
| 800 || The game&#039;s horizontal resolution.&lt;br /&gt;
|-&lt;br /&gt;
! screenheight&lt;br /&gt;
| 600 || The game&#039;s vertical resolution.&lt;br /&gt;
|-&lt;br /&gt;
! fullscreen&lt;br /&gt;
| false || Determines whether to run in full screen or windowed mode.&lt;br /&gt;
|-&lt;br /&gt;
! vsync&lt;br /&gt;
| false || Limits the framerate to match the user&#039;s monitor refresh rate (smooths out the framerate).&lt;br /&gt;
|-&lt;br /&gt;
! simple_shadows&lt;br /&gt;
| 1 || Disables dynamic shadows if set to 1.&lt;br /&gt;
|-&lt;br /&gt;
! blood&lt;br /&gt;
|1 || Disable or enable blood&lt;br /&gt;
|-&lt;br /&gt;
! blood_color&lt;br /&gt;
| 0.4 0 0 || The color of blood in the game in R, G, B. Each value should be between 0 and 1.&lt;br /&gt;
|-&lt;br /&gt;
! multisample&lt;br /&gt;
| 0 || Determines the level of anti-aliasing (smooths out jagged edges). Should be 1, 2, 4 or 8.&lt;br /&gt;
|-&lt;br /&gt;
! anisotropy&lt;br /&gt;
| 0 || Determines the level of anisotropic filtering (increases the quality of textures drawn far away and at an angle). Should be 1, 2, 4 or 8.&lt;br /&gt;
|-&lt;br /&gt;
! motion_blur_amount&lt;br /&gt;
| 0 || How much motion blur to apply, should be between 0 and 1.&lt;br /&gt;
|-&lt;br /&gt;
! post_effects&lt;br /&gt;
| true || Determines whether to use post effects.&lt;br /&gt;
|-&lt;br /&gt;
! shaders&lt;br /&gt;
| true || Determines whether to use shaders.&lt;br /&gt;
|-&lt;br /&gt;
! texture_reduce&lt;br /&gt;
| 0 || Determines the level to which the texture resolutions should be reduced (higher numbers means lower resolution).&lt;br /&gt;
|-&lt;br /&gt;
! texture_minimize_ram&lt;br /&gt;
| 1 || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! full_level_unload&lt;br /&gt;
| true || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! gamma_correct&lt;br /&gt;
| true || Determines whether to use gamma correction.&lt;br /&gt;
|-&lt;br /&gt;
! fps_label&lt;br /&gt;
| false || Determines whether to display the current fps (frames per second) on screen.&lt;br /&gt;
|-&lt;br /&gt;
! sound_label&lt;br /&gt;
| false || Determines whether to display all active sounds on screen.&lt;br /&gt;
|-&lt;br /&gt;
! visible_raycasts&lt;br /&gt;
| false || Determines whether to display lines representing all AIs&#039; visibility.&lt;br /&gt;
|-&lt;br /&gt;
! visible_sound_spheres&lt;br /&gt;
| false || Determines whether to display spheres representing the distance sounds travel (such as running).&lt;br /&gt;
|-&lt;br /&gt;
! editor_mode&lt;br /&gt;
| false || Determines whether to start the game in play mode (false) or editor mode (true).&lt;br /&gt;
|-&lt;br /&gt;
! invert_y_mouse_look&lt;br /&gt;
| false || Determines whether to invert the y-axis controls (looking up/down).&lt;br /&gt;
|-&lt;br /&gt;
! use_raw_input&lt;br /&gt;
| true || Use raw mouse input, solves mouse issues for some people.&lt;br /&gt;
|-&lt;br /&gt;
! invert_y_gamepad_look&lt;br /&gt;
| false || Determines whether to invert the y-axis controls (looking up/down).&lt;br /&gt;
|-&lt;br /&gt;
! tet_mesh_lighting&lt;br /&gt;
| 0 || If set to 1, use the pre-baked tetrahedral mesh global illumination. &#039;&#039;&#039;TODO: Does this work?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! light_volume_lighting&lt;br /&gt;
| false || Use ambient light volume lighting if available.&lt;br /&gt;
|-&lt;br /&gt;
! global_time_scale_mult&lt;br /&gt;
| 1.0 || How fast the game should run. Can be set to above and below the min./max. values of the ingame settings. &#039;&#039;&#039;TODO: Hardcoded min/max values?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! game_difficulty&lt;br /&gt;
| 1.0 || How hard the game should be, higher is harder.&lt;br /&gt;
|-&lt;br /&gt;
! tutorials&lt;br /&gt;
| true || Helpful messages are displayed in the game.&lt;br /&gt;
|-&lt;br /&gt;
! difficulty_set&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! volume_shadows&lt;br /&gt;
| false || Use experimental volume shadow graphics tech.&lt;br /&gt;
|-&lt;br /&gt;
! ssao&lt;br /&gt;
| false || Use experimental screen space ambient occlusion graphics tech.&lt;br /&gt;
|-&lt;br /&gt;
! auto_ledge_grab&lt;br /&gt;
| true || The player character will automatically grab ledges when they can. If false you need to hold right click to grab ledges.&lt;br /&gt;
|-&lt;br /&gt;
! particle_field&lt;br /&gt;
| true || Show particle fields in the game. &#039;&#039;&#039;TODO: Does this affect CPU particle fields, GPU particle fields, or both?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! custom_level_shaders&lt;br /&gt;
| true || Use shaders made for specific levels to add things like snow, wetness near water etc.&lt;br /&gt;
|-&lt;br /&gt;
! disable_fog&lt;br /&gt;
| false || Disables atmoshperic fog.&lt;br /&gt;
|-&lt;br /&gt;
! simple_fog&lt;br /&gt;
| false || Extra simple fog calculations for low-end graphics cards.&lt;br /&gt;
|-&lt;br /&gt;
! no_auto_nav_mesh&lt;br /&gt;
| false || Disables automatic nav mesh generation. &#039;&#039;&#039;TODO: Verify that this is what it does&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! no_texture_convert&lt;br /&gt;
| false || Skip converting textures to .dds format to save VRAM. &#039;&#039;&#039;TODO: Verify that this is what it does&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! gl_load_s3tc&lt;br /&gt;
| true || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! skip_loading_pause&lt;br /&gt;
| false || You don&#039;t have to press left click to start the level after it has been loaded.&lt;br /&gt;
|-&lt;br /&gt;
! brightness&lt;br /&gt;
| 1 || Increase or decrease the brightness of the game.&lt;br /&gt;
|-&lt;br /&gt;
! use_soundtrack_limiter&lt;br /&gt;
| true || Better handling of music volume when transitioning between tracks.&lt;br /&gt;
|-&lt;br /&gt;
! master_volume&lt;br /&gt;
| 0.8 || Overall loudness of all game audio.&lt;br /&gt;
|-&lt;br /&gt;
! music_volume&lt;br /&gt;
| 0.4 || Loudness of game music.&lt;br /&gt;
|-&lt;br /&gt;
! media_mode&lt;br /&gt;
| false || Determines whether to disable the in-game interface.&lt;br /&gt;
|-&lt;br /&gt;
! baked_shadows&lt;br /&gt;
| true || (Deprecated) Determines whether to use the pre-baked shadows (true) or cascaded shadow maps (false).&lt;br /&gt;
|-&lt;br /&gt;
! debug_key_presses&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do? How are key presses debugged when this is on?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! block_cheating_progress&lt;br /&gt;
| true || Disables unlocking levels when cheats are active, like when in the editor.&lt;br /&gt;
|-&lt;br /&gt;
! auto_camera&lt;br /&gt;
| false || Determines whether to have the camera automatically return to a position behind the player. Only affects the player controlled with keyboard and mouse in local multiplayer with splitscreen, will be true for the other players.&lt;br /&gt;
|-&lt;br /&gt;
! split_screen&lt;br /&gt;
| false || Determines if the game view should be split or not when there is more than one player.&lt;br /&gt;
|-&lt;br /&gt;
! chase_camera_fov&lt;br /&gt;
| 90.0 || The field of view of the camera when playing the game.&lt;br /&gt;
|-&lt;br /&gt;
! editor_camera_fov&lt;br /&gt;
| 90.0 || The default field of view of the camera when in the editor.&lt;br /&gt;
|-&lt;br /&gt;
! report_case_errors&lt;br /&gt;
| false || Reports capitalization errors in the log when they are found. &#039;&#039;&#039;TODO: Does this work?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! background_process_pool&lt;br /&gt;
| false || Use background processes for things like calculating the nav mesh. &#039;&#039;&#039;TODO: Is this accurate?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! main_menu&lt;br /&gt;
| true || Show main menu when starting the game. If false it will load the level at the path in the debug_load_level setting.&lt;br /&gt;
|-&lt;br /&gt;
! debug_load_level&lt;br /&gt;
| Project60/16_red_desert.xml || If main_menu is set to false, the level at this path will load when the game is started.&lt;br /&gt;
|-&lt;br /&gt;
! mouse_sensitivity&lt;br /&gt;
| 0.5 || Determines how far the camera in the game rotates when the mouse moves.&lt;br /&gt;
|-&lt;br /&gt;
! gpu_skinning&lt;br /&gt;
| false || Use the graphics card to skin characters. This should be false to avoid any issues.&lt;br /&gt;
|-&lt;br /&gt;
! detail_objects&lt;br /&gt;
| 1 || Determines if 3D grass models, small rocks etc. are displayed on the terrain.&lt;br /&gt;
|-&lt;br /&gt;
! seamless_cubemaps&lt;br /&gt;
| true || Make cubemaps display seamlessly. &#039;&#039;&#039;TODO: When is this useful?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! debug_keys&lt;br /&gt;
| true || Enables use of debug keys, such as F for laser eyes. &#039;&#039;&#039;TODO: Does this still work?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! shader_dir_path&lt;br /&gt;
| Data/GLSL/ || Where the game looks for shaders. &#039;&#039;&#039;TODO: Does this work?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! debug_show_ai_state&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! debug_show_ai_path&lt;br /&gt;
| false || Show lines to every NPC&#039;s destination.&lt;br /&gt;
|-&lt;br /&gt;
! debug_draw_window&lt;br /&gt;
| false || Show debug window in the top left.&lt;br /&gt;
|-&lt;br /&gt;
! albedo_only&lt;br /&gt;
| false || Display only color of objects, without any lighting etc.&lt;br /&gt;
|-&lt;br /&gt;
! no_decals&lt;br /&gt;
| false || Disable rendering of decals.&lt;br /&gt;
|-&lt;br /&gt;
! single_pass_shadow_cascade&lt;br /&gt;
| false || Render all real-time shadows in a single pass. &#039;&#039;&#039;TODO: Does this still work?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! shader_debug&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! opengl_callback_errors&lt;br /&gt;
| true || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! opengl_callback_error_dialog&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! occlusion_query&lt;br /&gt;
| true || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! dump_include_scripts&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! allow_game_dir_save&lt;br /&gt;
| false || If true, the editor encourages you to save in the working directory instead of the game directory.&lt;br /&gt;
|-&lt;br /&gt;
! level_backup_count&lt;br /&gt;
| 10 || The maximum number of backups to save for each level. Backups can be found in working_dir/Overgrowth/Data/Levels/backups/.&lt;br /&gt;
|-&lt;br /&gt;
! no_reflection_capture&lt;br /&gt;
| 0 || If set to 1, all reflections are disabled.&lt;br /&gt;
|-&lt;br /&gt;
! has_detected_settings&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! save_as_crunch&lt;br /&gt;
| false || Use the crunch library to convert textures. &#039;&#039;&#039;TODO: Does this do anything?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! check_for_workshop_membership&lt;br /&gt;
| true || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! enable_live_update&lt;br /&gt;
| true || Enables automatic texture and script reloading when a change is detected.&lt;br /&gt;
|-&lt;br /&gt;
! level_load_stress&lt;br /&gt;
| false || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! detail_object_decals&lt;br /&gt;
| 1 || Apply decals to detail objects such as grass, small rocks etc.&lt;br /&gt;
|-&lt;br /&gt;
! asdebugger_enabled&lt;br /&gt;
| 0 || Activate the AngelScript debugger. &#039;&#039;&#039;TODO: What does this do more exactly?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! asdebugger_break_on_script_change&lt;br /&gt;
| 0 || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! menu_show_asdebugger_contexts&lt;br /&gt;
| 0 || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! extra_data_path&lt;br /&gt;
| || Path to a directory containing a second Data folder that you want the game to use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Keyboard and Mouse===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key[quit]&lt;br /&gt;
| esc || Exits from player mode into editor mode, and opens a menu allowing the user to return to the main menu.&lt;br /&gt;
|-&lt;br /&gt;
! key[slow]&lt;br /&gt;
| tab || Toggles slow motion.&lt;br /&gt;
|-&lt;br /&gt;
! key[fast]&lt;br /&gt;
| \ || &#039;&#039;&#039;TODO: Does this do anything?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! key[crouch]&lt;br /&gt;
| lshift || Causes the player to crouch.&lt;br /&gt;
|-&lt;br /&gt;
! key[jump]&lt;br /&gt;
| space || Causes the player to jump.&lt;br /&gt;
|-&lt;br /&gt;
! key[show_timing]&lt;br /&gt;
| f2 || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! key[screenshot]&lt;br /&gt;
| f7 || Captures a screenshot (saved in &#039;&#039;/Data/Screenshots/&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
! key[transparent_screenshot]&lt;br /&gt;
| f8 || Captures a screenshot in .png format where the sky and terrain is transparent.&lt;br /&gt;
|-&lt;br /&gt;
! key[console]&lt;br /&gt;
| ` || Deprecated, it pauses the game. But that doesn&#039;t have anything to do with the console.&lt;br /&gt;
|-&lt;br /&gt;
! key[left]&lt;br /&gt;
| a || Causes the player to move to the left.&lt;br /&gt;
|-&lt;br /&gt;
! key[right]&lt;br /&gt;
| d || Causes the player to move to the right.&lt;br /&gt;
|-&lt;br /&gt;
! key[up]&lt;br /&gt;
| w || Causes the player to move forward.&lt;br /&gt;
|-&lt;br /&gt;
! key[down]&lt;br /&gt;
| s || Causes the player to move backward.&lt;br /&gt;
|-&lt;br /&gt;
! key[item]&lt;br /&gt;
| e || Causes the player to sheathe or unsheathe a weapon.&lt;br /&gt;
|-&lt;br /&gt;
! key[drop]&lt;br /&gt;
| q || Causes the player to pick up a weapon. Holding left shift, looking down and pressing Q drops the held weapon.&lt;br /&gt;
|-&lt;br /&gt;
! key[skip_dialogue]&lt;br /&gt;
| return || Skips the currently active dialogue.&lt;br /&gt;
|-&lt;br /&gt;
! key[rclick]&lt;br /&gt;
| rshift || Alternate key used for &amp;quot;right clicking&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Xbox controller ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! xbox_look_sensitivity&lt;br /&gt;
| 1.5 || Supposed to be the sensitivity of an attached Xbox controller, however it does nothing.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[lookx]&lt;br /&gt;
| R_STICK_X || Xbox axis mapped for looking along the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[looky]&lt;br /&gt;
| R_STICK_Y || Xbox axis mapped for looking along the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[movex]&lt;br /&gt;
| R_STICK_X || Xbox axis mapped for movement along the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[movey]&lt;br /&gt;
| R_STICK_Y || Xbox axis mapped for movement along the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[jump]&lt;br /&gt;
| RB || Xbox jump button.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[crouch]&lt;br /&gt;
| LB || Xbox crouch button.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[attack]&lt;br /&gt;
| RT || Xbox attack button.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[grab]&lt;br /&gt;
| LT || Xbox grab button.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[item]&lt;br /&gt;
| A || Xbox item button.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[drop]&lt;br /&gt;
| X || Xbox drop button.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[skip_dialogue]&lt;br /&gt;
| START || Xbox skip currently acive dialogue.&lt;br /&gt;
|-&lt;br /&gt;
! xbox[quit]&lt;br /&gt;
| BACK || Xbox bring up menu or go back in menu.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Generic Controller===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! controller[movex]&lt;br /&gt;
| axis1 || Controller axis mapped for movement along the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
! controller[movey]&lt;br /&gt;
| axis2 || Controller axis mapped for movement along the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
! controller[lookx]&lt;br /&gt;
| axis3 || Controller axis mapped for looking along the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
! controller[looky]&lt;br /&gt;
| axis4 || Controller axis mapped for looking along the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
! controller[jump]&lt;br /&gt;
| button11 || Controller jump button.&lt;br /&gt;
|-&lt;br /&gt;
! controller[crouch]&lt;br /&gt;
| button10 || Controller crouch button.&lt;br /&gt;
|-&lt;br /&gt;
! controller[item]&lt;br /&gt;
| button1 || Controller item button.&lt;br /&gt;
|-&lt;br /&gt;
! controller[drop]&lt;br /&gt;
| button3 || Controller drop button.&lt;br /&gt;
|-&lt;br /&gt;
! controller[attack]&lt;br /&gt;
| axis6&amp;gt;0.5 || Controller attack &amp;quot;button&amp;quot; (default mapping is set to an axis being less than half full in a negative direction).&lt;br /&gt;
|-&lt;br /&gt;
! controller[grab]&lt;br /&gt;
| axis5&amp;gt;0.5 || Controller grab &amp;quot;button&amp;quot; (default mapping is set to an axis being greater than half full in a positive direction).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Editor Hotkeys===&lt;br /&gt;
&lt;br /&gt;
These keys only work when the editor is active. To activate the editor, press F1 when any level is loaded.&lt;br /&gt;
&lt;br /&gt;
For more in-depth information on how to use the editor, read the [[Editor Interface]] article.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! bind[pause]&lt;br /&gt;
| ` || Toggles freezing the time.&lt;br /&gt;
|-&lt;br /&gt;
! bind_win[quit]&lt;br /&gt;
| alt+f4 || Turns off the game.&lt;br /&gt;
|-&lt;br /&gt;
! bind_unix[quit]&lt;br /&gt;
| cmd+q || Turns off the game on Linux.&lt;br /&gt;
|-&lt;br /&gt;
! bind[back]&lt;br /&gt;
| esc || Opens or closes the menu, goes back in menu if it can.&lt;br /&gt;
|-&lt;br /&gt;
! bind[clone_transform]&lt;br /&gt;
| alt || Hold to clone an object when you transform (move, rotate or scale) it.&lt;br /&gt;
|-&lt;br /&gt;
! bind[snap_transform]&lt;br /&gt;
| ctrl || Hold to snap transformations to certain increments.&lt;br /&gt;
|-&lt;br /&gt;
! bind[force_rotate]&lt;br /&gt;
| r || Hold to activate the rotate tool.&lt;br /&gt;
|-&lt;br /&gt;
! bind[force_scale]&lt;br /&gt;
| e || Hold to activate the scale tool.&lt;br /&gt;
|-&lt;br /&gt;
! bind[force_translate]&lt;br /&gt;
| t || Hold to activate the move tool.&lt;br /&gt;
|-&lt;br /&gt;
! bind[normal_transform]&lt;br /&gt;
| shift || Hold to rotate/scale/translate on alternate axies.&lt;br /&gt;
|-&lt;br /&gt;
! bind[edit_script_params]&lt;br /&gt;
| u || Toggles showing the &#039;&#039;Selected&#039;&#039; window.&lt;br /&gt;
|-&lt;br /&gt;
! bind[single_selected]&lt;br /&gt;
| i || Toggles showing the &#039;&#039;Single Selected&#039;&#039; window.&lt;br /&gt;
|-&lt;br /&gt;
! bind[edit_color]&lt;br /&gt;
| cmd+p || Toggles the &#039;&#039;Color Picker&#039;&#039; window.&lt;br /&gt;
|-&lt;br /&gt;
! bind[search_scenegraph]&lt;br /&gt;
| cmd+f || Opens the &#039;&#039;Scenegraph&#039;&#039; window and focuses its search field.&lt;br /&gt;
|-&lt;br /&gt;
! bind[scenegraph]&lt;br /&gt;
| y || Opens the &#039;&#039;Scenegraph&#039;&#039; window.&lt;br /&gt;
|-&lt;br /&gt;
! bind[toggle_player]&lt;br /&gt;
| cmd+shift+p || Toggles whether the selected spawn points are player controlled or NPCs.&lt;br /&gt;
|-&lt;br /&gt;
! bind[toggle_object_editing]&lt;br /&gt;
| cmd+1 || Toggles whether you can edit static meshes.&lt;br /&gt;
|-&lt;br /&gt;
! bind[toggle_decal_editing]&lt;br /&gt;
| cmd+2 || Toggles whether you can edit decals.&lt;br /&gt;
|-&lt;br /&gt;
! bind[toggle_hotspot_editing]&lt;br /&gt;
| cmd+3 || Toggles whether you can edit gameplay objects.&lt;br /&gt;
|-&lt;br /&gt;
! bind[open_spawner]&lt;br /&gt;
| cmd+l || Deprecated, does nothing.&lt;br /&gt;
|-&lt;br /&gt;
! bind[save_level]&lt;br /&gt;
| cmd+s || Saves the level.&lt;br /&gt;
|-&lt;br /&gt;
! bind[save_selected_items]&lt;br /&gt;
| cmd+shift+s || Saves the selected items as a [[Prefabs|prefab]].&lt;br /&gt;
|-&lt;br /&gt;
! bind[cut]&lt;br /&gt;
| cmd+x || Saves the selected objects to the clipboard and then removes them.&lt;br /&gt;
|-&lt;br /&gt;
! bind[paste]&lt;br /&gt;
| cmd+v || Pastes whatever objects are in the clipboard on the mouse location.&lt;br /&gt;
|-&lt;br /&gt;
! bind[copy]&lt;br /&gt;
| cmd+c || Saves the selected objects to the clipboard.&lt;br /&gt;
|-&lt;br /&gt;
! bind[undo]&lt;br /&gt;
| cmd+z || Reverts the most recent edit.&lt;br /&gt;
|-&lt;br /&gt;
! bind[redo]&lt;br /&gt;
| cmd+shift+z || Reverts the most recently undo.&lt;br /&gt;
|-&lt;br /&gt;
! bind[enable_imposter]&lt;br /&gt;
| cmd+i || Deprecated, does nothing. &#039;&#039;&#039;TODO: Is this accurate?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! bind[disable_imposter]&lt;br /&gt;
| cmd+shift+i || Deprecated, does nothing. &#039;&#039;&#039;TODO: Is this accurate?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! bind[connect]&lt;br /&gt;
| alt || Hold and left click to connect the selected object to the clicked object. Is used for &#039;&#039;nav connection&#039;&#039; hotspots, &#039;&#039;Path Point&#039;&#039; hotspots, weapons etc.&lt;br /&gt;
|-&lt;br /&gt;
! bind[disconnect]&lt;br /&gt;
| shift+alt || Hold and left click to break an existing connection between the selected object and the clicked object.&lt;br /&gt;
|-&lt;br /&gt;
! bind[group]&lt;br /&gt;
| cmd+g || Groups the selected objects.&lt;br /&gt;
|-&lt;br /&gt;
! bind[ungroup]&lt;br /&gt;
| cmd+shift+g || Ungroups the selected group.&lt;br /&gt;
|-&lt;br /&gt;
! bind[box_select]&lt;br /&gt;
| b || Hold and left click and drag to create a selection box. When you release left click, all objects in the box are selected.&lt;br /&gt;
|-&lt;br /&gt;
! bind[deselect_all]&lt;br /&gt;
| q || Deselects any selected objects.&lt;br /&gt;
|-&lt;br /&gt;
! bind[select_all]&lt;br /&gt;
| cmd+a || Select all objects in the level.&lt;br /&gt;
|-&lt;br /&gt;
! bind[select_similar]&lt;br /&gt;
| cmd+shift+a || Select all objects that are similar to the selected object.&lt;br /&gt;
|-&lt;br /&gt;
! bind[add_to_selection]&lt;br /&gt;
| shift || Hold while selecting objects to add them to the selection.&lt;br /&gt;
|-&lt;br /&gt;
! bind[bake_gi]&lt;br /&gt;
| cmd+j || Deprecated, does nothing.&lt;br /&gt;
|-&lt;br /&gt;
! bind[kill_selected]&lt;br /&gt;
| cmd+k || Kill the selected character and instantly save its ragdoll position. Press the button combination again once the character has fallen to save the resting pose.&lt;br /&gt;
|-&lt;br /&gt;
! bind[print_objects]&lt;br /&gt;
| f11 || Print the selected objects to the log. &#039;&#039;&#039;TODO: Is this accurate?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! bind[toggle_level_load_stress]&lt;br /&gt;
| f10 || &#039;&#039;&#039;TODO: Is this used? Maybe used in conjunction with the &#039;&#039;level_load_stress&#039;&#039; config setting?&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! bind[new_level]&lt;br /&gt;
| cmd+n || Does nothing.&lt;br /&gt;
|-&lt;br /&gt;
! bind[open_level]&lt;br /&gt;
| cmd+o || Does nothing.&lt;br /&gt;
|-&lt;br /&gt;
! bind[frame_selected]&lt;br /&gt;
| f || Frames the selected object so it&#039;s visible in the camera. Hold this button and rotate the camera to orbit around the object.&lt;br /&gt;
|-&lt;br /&gt;
! bind[frame_selected_force]&lt;br /&gt;
| shift+f || Same as frame_selected, but puts the camera closer.&lt;br /&gt;
|-&lt;br /&gt;
! bind[refresh]&lt;br /&gt;
| f5 || &#039;&#039;&#039;TODO: What does this do?&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
[[Category: Modding]]&lt;br /&gt;
[[Category: Overgrowth]]&lt;br /&gt;
&lt;br /&gt;
==Controller Setup==&lt;br /&gt;
&lt;br /&gt;
Most common controllers should work out of the box for Overgrowth. The control scheme is different from most games, but works well for Overgrowth&#039;s gameplay. If you want to change the controls you need to edit the config file. First make sure the game is turned off. Then find and open your [[#Config_File_Location|config file]], then edit the bindings in that file for [[#Xbox_controller|Xbox controller]] if you use that, otherwise [[#Generic_Controller|generic controller]].&lt;br /&gt;
&lt;br /&gt;
After making your desired changes, save the file and open the game.&lt;br /&gt;
&lt;br /&gt;
If you have problems with your controller on Mac, check out [http://forums.wolfire.com/viewtopic.php?f=13&amp;amp;t=12631 Anton&#039;s guide].&lt;br /&gt;
&lt;br /&gt;
===Advanced Controller Setup===&lt;br /&gt;
&lt;br /&gt;
If for some reason your controller isn&#039;t working properly with the game, here are some instructions for Windows 7 that might help you out:&lt;br /&gt;
&lt;br /&gt;
First, make sure your controller is plugged in to your computer.&lt;br /&gt;
&lt;br /&gt;
Next, open the start menu and click on &#039;&#039;Control Panel&#039;&#039; (located on the right side). Once opened, make sure the view is set to &#039;&#039;Large Icons&#039;&#039; (switchable in the upper right corner). Select &#039;&#039;Devices and Printers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
You should see your controller listed under &#039;&#039;Devices&#039;&#039;. Right click it, and select &#039;&#039;Game Controller Settings&#039;&#039;. The &#039;&#039;Game Controllers&#039;&#039; window will appear. Make sure your controller is selected, then click on &#039;&#039;Properties&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Once again, a new window should appear - make sure that the view is set to the &#039;&#039;Test&#039;&#039; tab. In this view, you will be able to determine which physical button is mapped to each virtual button. Play around with your controller to confirm that everything is working properly, and take note of the button mappings.&lt;br /&gt;
&lt;br /&gt;
Now navigate to and open up your &#039;&#039;&#039;config.txt&#039;&#039;&#039; file (as described above). Rearrange the mappings in the file to match your desired controller setup.&lt;br /&gt;
&lt;br /&gt;
Once you have everything modified, save the &#039;&#039;&#039;config.txt&#039;&#039;&#039; file and launch Overgrowth in order to test the new configuration.&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=If_you_just_pre-ordered_overgrowth,_read_this_first&amp;diff=5791</id>
		<title>If you just pre-ordered overgrowth, read this first</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=If_you_just_pre-ordered_overgrowth,_read_this_first&amp;diff=5791"/>
		<updated>2018-03-08T18:15:20Z</updated>

		<summary type="html">&lt;p&gt;Mng: Fixed double redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT[[Overgrowth FAQ]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=Lore&amp;diff=5789</id>
		<title>Lore</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=Lore&amp;diff=5789"/>
		<updated>2018-03-08T18:10:29Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added to category: Lore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Lore of Lugaru=&lt;br /&gt;
&lt;br /&gt;
This page is for all ideas or stories regarding the lore of Lugaru Island and surrounding islands (i.e The Wolves island before they invaded Lugaru). Feel free to add stories, myths, legends and any ideas.&lt;br /&gt;
&lt;br /&gt;
All the stories on this page are Fanmade, and are not necessarily canon.&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
&lt;br /&gt;
The stories of each race will mainly provide small snippets of backstory from around the time of the events in Lugaru. Most will not involve Turner or other main characters but will instead focus on the inhabitants of Lugaru and it&#039;s surrounding islands.&lt;br /&gt;
&lt;br /&gt;
====The Story of Jounquil Terbouchet====&lt;br /&gt;
&lt;br /&gt;
(This first story is just to give an idea of what a story should be like, it&#039;s not supposed to be anything special)&lt;br /&gt;
&lt;br /&gt;
Not so many moons ago, on an island to the south of Lugaru, there lived a young rabbit called Jounquil Terbouchet. Jounquil was a simple rabbit, a farmer with a modest cottage and crops. Jounquil sold his crops to other rabbits, and sometimes dogs, at the local market. He made a decent living and was well known and respected all over his island. &lt;br /&gt;
&lt;br /&gt;
One day, while tending his crops Jounquil was approached by a young rabbit who had been watching him for some time. Jounquil straightened up, using his hoe for support. The young rabbit introduced himself as Javern, a representative of King Hickkory of Lugaru. He asked Jounquil how long he had been running his farm, Jounquil told him that it was the family farm, passed down to him from his father, and his father before him. Javern asked him how much money he made when he sold his produce. Although Jounquil thought this young rabbit was acting a bit strange, he told him that he made enough. Javern repeated his question, this time asking for the exact amount. Finding the young rabbit extremely rude, Jounquil raised his hoe to Javern, telling the rabbit to state his true purpose. Javern stepped back, warning Jounquil that he wa making a mistake. With this, Jounquil lost his temper, striking out at Javern. &lt;br /&gt;
&lt;br /&gt;
Javern, sensing that Jounquil was not the country simpleton he appeared to be, backed off. He gave Jounquil one more warning, before leaving his farm. &lt;br /&gt;
&lt;br /&gt;
Jounquil ended up traveling to Lugaru and becoming a raider. He never encountered Turner but he joined the Guards at Rock Hall after Fiver took control. He served Fiver well, fighting in several battles with the wolves. He retired from Guardship at the age of 57, settling down in a small settlement near a dead volcano&lt;br /&gt;
&lt;br /&gt;
====Fendalin the Defender====&lt;br /&gt;
&lt;br /&gt;
Fenadlin was a Rabbit warrior from one of Lugaru&#039;s neighboring islands, [[Vatoor]] (Lugaru and Vatoor are both part of the [[Mannow]] islands), and is known for his gallant death while fighting the legendary general [[Ansandi]].&lt;br /&gt;
&lt;br /&gt;
Fendalin grew up near the city-state of Vieren, where constant political tension between [[Vieren]] and the surrounding island government of Vatoor led to most towns losing the majority of its males as conscripts for whichever government controlled it.  Fendalin was to be conscripted for the Vierenese, but he succeeded in running away at a young age and becoming a volunteer for Vatoor.  He grew as a warrior during this time, which came at the cost of killing many of his Vierenese friends in battle, including his brother.  Eventually his superiors recommended him for a special program, the [[Suteran]], and he became a member of this force of joined warriors from various Mannow islands.  He may have had interactions with the fighter known as Turner while a member of the Suteran.&lt;br /&gt;
&lt;br /&gt;
Many of the missions which Fendalin was assigned during his life were classified and never revealed.&lt;br /&gt;
&lt;br /&gt;
The mission for which Fendalin is known was his last, and took place during &amp;quot;The War In Which Mannow Fell,&amp;quot; also known simply as the &amp;quot;[[Mannow War]],&amp;quot; which took place between the forces of a magician named [[Chaar]], and the unified governments and armies of the Mannow islands.  Fendalin was given by the Suteran a small group of skilled warriors under his command who were to assasinate a Cat named Ansandi, who was one of Chaar&#039;s generals, and who was a member of the [[Assasins of the Bright Tapestry]], and who is considered one of the greatest fighters and strategists to have ever lived.  During this misison, Fendalin&#039;s group were killed and Fendalin was forced to face Ansandi alone, managing to wound Ansandi three times before being killed.&lt;br /&gt;
&lt;br /&gt;
Fendalin&#039;s near-success put him in the history books as one of the greatest warriors ever, and a hero of the Mannow islands.  Unfortunately, Chaar&#039;s forces eventually conquered most of the Mannow islands, although Chaar commanded his forces to stay away from one of the sacred temples in Lugaru, known as [[Krypa]], possibly at Ansandi&#039;s request and the temple&#039;s connection to the cat deity, The Sphinx.&lt;br /&gt;
&lt;br /&gt;
===Myths===&lt;br /&gt;
&lt;br /&gt;
Myths will be ancient stories that revolve around a particular person or event, but not necessarily real ones. Myths will be the most common form of story, and be the most freely written. You can write about whatever you want, but nothing too rude, and nothing offensive.&lt;br /&gt;
&lt;br /&gt;
====The Myth of the Whale-Man====&lt;br /&gt;
&lt;br /&gt;
If you ask any regular sailor if they believed in the Whale-man, they&#039;d obviously reply &amp;quot;No&amp;quot;, laugh nervously, and go about their business. That is because any sailor that does completely believe in the Whale-man, is not a sailor anymore due to their intense fear of the ocean, and has moved far inland due to their Thalassophobia. The rumors and theories regarding the Whale-man&#039;s intentions and origin vary greatly depending on which paranoid pedestrian you parley with over a pint, but one common theme amongst every speculation is that he is brutal,  unforgiving, and craves destruction for one reason, or another.&lt;br /&gt;
&lt;br /&gt;
Some believe the Whale-man is a religious figure, once worshiped by a cult as the god of the sea, but after some mysterious incident, the cult disappeared. The Whale-man now seeks revenge for the loss of his subjects and demands tribute from all lowly mortals for their crimes against him. He assaults ships for the fear and respect he deserves, and lives off of the agony of the infidels.&lt;br /&gt;
&lt;br /&gt;
Others believe that the Whale-man was born under a group of whales, but had the hideous deformation of arms and legs, and that he was cast away due to his grotesque appearance. The then Whale-boy never knew right from wrong, and out of its probably teenage whale-angst began to attack both whales and denizens of Lugaru alike. Anything that was large and floated in the water reminded him of his kind that had betrayed him over his appearance, and in strife, would lash out against it with his blubbery flubbery whale arms, trying to break it in two and eat the remains.&lt;br /&gt;
&lt;br /&gt;
An interesting possibility is that the Whale-man is the next step in, what many feline biologists call: Whale-volution. The whale species would benefit greatly from the addition of limbs, and perhaps if the Whale-man has offspring, he could easily conquer Lugaru. Although this is a very wild conclusion to reach, it has struck fear into the hearts of many people, and there have been cases of hunting parties hired by cats for ludicrous sums of money to kill the Whale-man before he can breed with a Whale-woman. One such party was headed by a rabbit named Retsae, but that&#039;s another story for another time.&lt;br /&gt;
&lt;br /&gt;
In the end, it&#039;s all just rumors, theories, and speculation. There&#039;s no hard evidence any ships were lost because of a whale-like individual. The people of Lugaru can be quite split on the subject of the Whale-man&#039;s existence. There was one such instance of this when two drunkards began a debate about the Whale-man, which escalated into a fist fight about the Whale-man, which escalated into a town wide riot about the Whale-man, which escalated into a full scale clan war, all because of the Whale-man. In the end, no matter which side you choose, the prospect of a gargantuan, whale-like being lurking in the depths of the ocean should send a chill up your spine. Unless you were Retsae, but Retsae was totally bonkers.&lt;br /&gt;
&lt;br /&gt;
===Legends===&lt;br /&gt;
&lt;br /&gt;
Legends will be sort of a cross between stories and myths. They revolve around real people, the person can be unbelievably powerful or strong or charming or anything, but Legends will have an element o truth to them.&lt;br /&gt;
&lt;br /&gt;
====The Legend of Retsae====&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve heard of the Whale-man, and have spoke about the Whale-man while rabbits are present, there is a large chance that you will be told the story of Retsae, whether you want to hear it or not. Retsae is revered as a legend among many rabbits, and regarded as a villain among most cats. Many variations of her story have been told to me throughout time, but for your sake I&#039;ll tell either the most interesting or the most plausible versions of her narrative.&lt;br /&gt;
&lt;br /&gt;
Retsae was born on the cliffs of Lugaru, her mother facing the oceans, and her father facing the land. Rabbits say she was launched out of the womb like an arrow from a bow, but cats say she merely was dropped by her possibly inebriated parents into the cold, blue depths below. Either way you see it, she was an excellent swimmer from birth onward, and managed to swim to a nearby dock before her pink body was scooped up by fisherman.&lt;br /&gt;
&lt;br /&gt;
Retsae grew up to be (in rabbit standards) a beautiful young lady, who had a tender heart, but was often very somber and preferred the crashing and sloshing of the ocean to the pipping and chipping of her rabbit brethren. She was loved by many of the burrow-members but spent most of her time outside of the burrow, swimming in the deep blue sea to relax after a days work. She was given many gifts by male members of the burrow, and given many cold shoulders by female members of the burrow, which resulted in her feeling isolated in her own community. She ran away from home at her prime in rabbit standards, and half of the burrow followed her trail and vowed allegiance to her. Without her consent, she began leading a crew of devoted, and probably sexually frustrated male rabbits across Lugaru in search of a place she could ditch them without leaving them to die.&lt;br /&gt;
&lt;br /&gt;
One day she came across a settlement of cats who were desperately hiring hunters of any background to go after a mythological creature of the sea, and Retsae, sensing her crew&#039;s hunger to prove themselves to her, took the bounty, was rewarded with a ship, and was promised much more money in the process after they came back with significant evidence they had killed the creature that was known as the Whale-man. The ship wasn&#039;t actually made to hold all of the rabbits, but they clambered onto it nonetheless. Retsae then steered the ship towards the direction of the burrow from whence they all came, and unbeknownst to her crew, planned to abandon ship before they hit the cliff that the crew didn&#039;t even know they were headed to.&lt;br /&gt;
&lt;br /&gt;
Although her plan was to return everyone safely, it was not as simple as pointing a ship in one direction and snoozing till you hit some rocks. They almost immediately were confronted by a storm of epic proportions, and lightning struck the stem of the ship, lighting many rabbits on fire, which jumped into the ocean. Only a few were pulled back from the murky deep. The crew suffered many hardships on their journey, but there was one hardship in particular, that made Retsae both famous and infamous.&lt;br /&gt;
&lt;br /&gt;
After encountering a band of pirates, what was left of crew had pretty much given up hope on survival, and blamed Retsae. She was overcome with tremendous guilt. She walked to the larboard side, saluted her crew, and stabbed herself with a knife. As the crew screamed in despair at losing what made them even made them leave their homes in the first place, she fell into the waters below. A couple decided to jump in after her, and were forever regarded as &amp;quot;lucky&amp;quot;, because at the moment the last one of her most devout followers jumped in, the Whale-man had risen from the sea, and belly flopped onto the ship. The crew who had dived down were thrown under the currents from the tidal wave of the ships destruction.&lt;br /&gt;
&lt;br /&gt;
Retsae, and a select few others awoke inside a squishy wet structure, at first thinking themselves to be in a smelly purgatory. They then realized that they were in the mouth of the Whale-man. They began screaming. Retsae calmed them, and asked to speak to the Whale-man. He moaned a deep whale-y moan in agreement. He opened his jaws and released only Retsae from his mouth. She looked straight into the creature&#039;s eyes and asked &amp;quot;What do you want?&amp;quot; as elegantly and smoothly as she always had spoken.&lt;br /&gt;
&lt;br /&gt;
The next portion of this legend is almost always spoken in an embarrassed tone, and I&#039;ll spare you the....details. In fact, the first time I heard this story I got spared the details and it only got clarified at the end of the story where she goes around laying eggs. Do you get where I&#039;m going with this?&lt;br /&gt;
&lt;br /&gt;
Well, whatever happens with the ocean, shall stay with the ocean. I fear for the terrified young rabbits who were trapped inside the whale. What did they hear that entire time? How does something like that even &#039;&#039;happen?&#039;&#039; It makes me shudder every time I think about it. I-I mean not to say I think about it often it&#039;s just that-...whatever, never mind.&lt;br /&gt;
&lt;br /&gt;
Back...back to the story. So the Retsae and her crew members were all set free and they headed back home. After arriving, she told everyone of her travels, and promised to exile herself as punishment. Retsae, still feeling quite guilty, gave gifts to every family that had a member leave the burrow in pursuit of her. The gifts varied from money to sweet foods, and by the end Retsae had nothing to herself. She left her burrow along the coastline and vowed not only to never look at the ocean again, but to never be seen by anyone ever so that she would not accidentally lure them into their deaths, and to give back to her species as best she could. She vowed that she would raise the young whale-rabbit-things she had as land creatures, and make sure they were never tainted by the evil of their father. She promised to raise them to be friendly with all rabbit-kind, so that both species may live in harmony.&lt;br /&gt;
&lt;br /&gt;
She traveled the land laying eggs. Retsae Eggs, they were called. If you found one, it was rumored to be extreme good luck, and if you even did find it, you would swear secrecy and forget all about its existence, promising never to tell another soul of its place.&lt;br /&gt;
&lt;br /&gt;
The legend of Retsae is both illogical and disturbing in some areas, depending on how open minded or drunk the teller of the story is. It&#039;s a wonder that it&#039;s even believed to be a legend told to young rabbits considering it can be very unflattering to female company. The Retsae Eggs have never been located (and the story covers this up quite nicely), but there have been rumors from some skeptics that the eggs could be merely painted rocks. All in all, it&#039;s an interesting story, but just don&#039;t tell it if you want to impress a lady with your knowledge of rabbit tradition and lore, because as I have found out, it can get you a couple bad looks, and even a swift punch in the face depending on how graphic you tell the Whale-man part.&lt;br /&gt;
&lt;br /&gt;
[[Category: Lore]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
	<entry>
		<id>https://wiki.wolfire.com/index.php?title=If_you_just_pre-ordered_overgrowth,_read_this_first&amp;diff=5784</id>
		<title>If you just pre-ordered overgrowth, read this first</title>
		<link rel="alternate" type="text/html" href="https://wiki.wolfire.com/index.php?title=If_you_just_pre-ordered_overgrowth,_read_this_first&amp;diff=5784"/>
		<updated>2018-03-08T18:07:47Z</updated>

		<summary type="html">&lt;p&gt;Mng: Added redirect to Overgrowth Alpha FAQ; removed text: Merged with Overgrowth Alpha FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT[[Overgrowth Alpha FAQ]]&lt;/div&gt;</summary>
		<author><name>Mng</name></author>
	</entry>
</feed>