--- /dev/null
+<div class="subcontent">
+ <h1>World Entities</h1>
+
+<br><h2>Gate</h2><pre>#1: ent_gate [<b>MESH</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Subtype</td>
+ <td>enum</td>
+ <td>Default - <i>World portal</i><br>
+ Non-Local - <i>Connect between different worlds</i></td>
+ </tr>
+ <tr>
+ <td>Destination</td>
+ <td>entity_target <b>or</b> string</td>
+ <td>target portal <b>or</b>
+ two portals (in different worlds) with the same string</td>
+ </tr>
+</table>
+
+<br><h2>Spawn Point</h2><pre>#2: ent_spawn [<b>MESH</b>, <b>EMPTY</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Alias</td>
+ <td>string</td>
+ <td><b>start</b> for spawn priority, empty, <b>or</b> any string to be used
+ with the command: <pre>respawn <string></pre></td>
+ </tr>
+</table>
+
+<br><h2>Routing Path</h2><pre>#3: ent_route_node [<b>CURVE</b>]</pre>
+<pre>
+<b>NOTE:</b>You should use an order 3 path type. Any amount of subcurves are
+allowed. The endpoints of the curves are the connecting points between other
+pathing elements.</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Alias</td>
+ <td>string</td>
+ <td><b>start</b> for spawn priority, empty, <b>or</b> any string to be used
+ with the command: <pre>respawn <string></pre></td>
+ </tr>
+</table>
+
+<br><h2>Skate Course</h2><pre>#4: ent_route [<b>EMPTY</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Colour</td>
+ <td>rgba32F</td>
+ <td>determines the routing line colour</td>
+ </tr>
+ <tr>
+ <td>Checkpoints</td>
+ <td>array[ MESH:<b>ent_gate</b> ]</td>
+ <td>List of <b>entry</b> gates that form the track<br>Must all be in one
+Blender collection.</td>
+ </tr>
+</table>
+
+<br><h2>Water Surface</h2><pre>#5: ent_water [<b>EMPTY</b>, <b>MESH</b>]</pre>
+<pre>One per level. Used to determine the reflection plane.</pre>
+
+<br><h2>Volume/Trigger</h2><pre>#6: ent_volume [<b>EMPTY</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Subtype</td>
+ <td>Enum</td>
+ <td>Trigger - <i>Player Trigger</i><br>
+ Particles (0.1s) - <i>Spawn particle randomly every 0.1s</i></td>
+ </tr>
+ <tr>
+ <td>Target</td>
+ <td>MESH,EMPTY:any</td>
+ <td>Entity to call the trigger function for.</td>
+ </tr>
+</table>
+
+<br><h2>Audio</h2><pre>#7: ent_audio [<b>EMPTY</b>,<b>MESH</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Format</td>
+ <td>Enum</td>
+ <td>Uncompressed Mono - <i>Store compressed on disk, uncompressed in memory
+ </i><br>
+ Compressed Vorbis - <i>Always compressed, stereo signal</i><br>
+ [vg] Bird Synthesis - <i>Government spy drones (WIP)</i>
+ </td>
+ </tr>
+ <tr>
+ <td>Volume</td>
+ <td>f32</td>
+ <td>volume to play audio</td>
+ </tr>
+</table>
+<br><center><b>Channels</b></center><br>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Max Channels</td>
+ <td>u32</td>
+ <td>Specifies the limit of instances of this audio player</td>
+ </tr>
+ <tr>
+ <td>Behaviour</td>
+ <td>Enum</td>
+ <td>Unlimited - <i>Create as many instances as possible up until the engine
+ limit (64)</i><br>
+ Discard if group full - <i>Doesnt play when triggered, if at limit
+ </i><br>
+ Crossfade if group full - <i>Pick an active sound from same group to
+ fade with. Temporarily creates an extra channel while fading</i>
+ </td>
+ </tr>
+ <tr>
+ <td>Group ID</td>
+ <td>u16</td>
+ <td>0-25565 (<b>Don't use values: 1 or 26</b>)</td>
+ </tr>
+ <tr>
+ <td>Transition Time</td>
+ <td>f32</td>
+ <td>If a crossfade is used, this is the duration</td>
+ </tr>
+</table>
+<br><center><b>Flags</b></center><br>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>3D Audio</td>
+ <td>bool</td>
+ <td>Play with spacialization, or 2D? Falloff distance is the scale of the
+ object in blender. Yellow rings signify 100% falloff.</td>
+ </tr>
+ <tr>
+ <td>No Doppler</td>
+ <td>bool</td>
+ <td>Disable doppler effect for this instance</td>
+ </tr>
+ <tr>
+ <td>Loop</td>
+ <td>bool</td>
+ <td>Go back to the start of the sound file instead of being killed</td>
+ </tr>
+ <tr>
+ <td>Play at start</td>
+ <td>bool</td>
+ <td>Begin playing automatically at world load</td>
+ </tr>
+ <tr>
+ <td>Probability Curve</td>
+ <td>enum</td>
+ <td>Constant - <i>No effect</i><br>
+ Wildlife Day - <i>Most chance to run during the day, and sunset/rise</i><br>
+ Wildlife Night - <i>Most chance to run during the night</i>
+ </td>
+ </tr>
+</table>
+<br><center><b>Filepaths</b></center><br>
+<table style="width:100%">
+ <tr>
+ <th>Formats</th>
+ <th>Accepted</th>
+ </tr>
+ <tr>
+ <td>Uncompressed, Compressed Stereo</td>
+ <td>path: <i>sound/<filename><b>.ogg</b><br>
+ 44100hz, ogg Vorbis only.</i></td>
+ </tr>
+ <tr>
+ <td>[vg] Bird Synth</td>
+ <td>Binary string. Undocumented.</td>
+ </tr>
+</table>
+
+<br><h2>Marker</h2><pre>#8: ent_marker [<b>EMPTY</b>,<b>MESH</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Alias</td>
+ <td>string</td>
+ <td>any value</td>
+ </tr>
+</table>
+
+<br><h2>Traffic Model</h2><pre>#11: ent_traffic [<b>MESH</b>]</pre>
+<pre>Follows the nearest <i>ent_route_node</i> cyclically</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>speed</td>
+ <td>f32</td>
+ <td>>0.0f</td>
+ </tr>
+</table>
+
+<br><h2>Skateshop</h2><pre>#12: ent_skateshop [<b>EMPTY</b>]</pre>
+<pre>Undocumented.</pre>
+
+<br><h2>Camera</h2><pre>#13: ent_camera <b><INTRINSIC[ CAMERA ]></b></pre>
+<pre>Blender camera</pre>
+
+<br><h2>Workshop Preview</h2><pre>#14: ent_swspreview [<b>EMPTY</b>]</pre>
+<pre>One per map</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Board Display</td>
+ <td>EMPTY:<b>ent_marker</b></td>
+ <td>Where to render board</td>
+ </tr>
+ <tr>
+ <td>Board Display (other side)</td>
+ <td>EMPTY:<b>ent_marker</b></td>
+ <td>Where to render board, but upside-down</td>
+ </tr>
+ <tr>
+ <td>Viewpoint</td>
+ <td>CAMERA:<b>ent_camera</b></td>
+ <td>Camera which can see both preview locations</td>
+ </tr>
+</table>
+
+<br><h2>World Info</h2><pre>#16: ent_worldinfo [<b>EMPTY</b>]</pre>
+<pre>One per map</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Name (unused)</td>
+ <td>string</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>Description (unused)</td>
+ <td>string</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>Author (unused)</td>
+ <td>string</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>Timezone (+hrs)</td>
+ <td>f32</td>
+ <td>relative to 0:00 UTC, time zone where this map is.</td>
+ </tr>
+</table>
+
+<br><h2>CCmd</h2><pre>#17: ent_ccmd [<b>EMPTY</b>]</pre>
+<table style="width:100%">
+ <tr>
+ <th>Field</th>
+ <th>Type</th>
+ <th>Range</th>
+ </tr>
+ <tr>
+ <td>Command Line</td>
+ <td>string</td>
+ <td>string to give to the command processor to run when triggered</td>
+ </tr>
+</table>
+
+</div>