<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Oasiz</id>
	<title>EDukeWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Oasiz"/>
	<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/wiki/Special:Contributions/Oasiz"/>
	<updated>2026-05-27T12:51:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-alpha</generator>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Category:Structure_access&amp;diff=15060</id>
		<title>Category:Structure access</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Category:Structure_access&amp;diff=15060"/>
		<updated>2026-01-15T18:08:07Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Add missing shorthands to the table, relocate few existing ones to the dedicated column&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
One of the hallmarks of EDuke32&#039;s CON scripting advancements is the ability to access many of the game&#039;s internal data structures.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Struct access was designed with the syntax of an array of a struct type in the C programming language.&lt;br /&gt;
&lt;br /&gt;
The index in &amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;square brackets&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt; is an ID number that has different meanings for different structs. Most simple uses of struct access will suffice to use the gamevar [[THISACTOR]] as an index, which usually means the current sprite but is also usable as a &#039;&#039;magic token&#039;&#039; for different meanings with non-sprite structures. Other times, you may know an ID from a command like [[findnearactor]] or [[espawn]] (from gamevar [[RETURN]]). On occasion you may also [[whilevarn|loop]] through all or a selection of ID numbers.&lt;br /&gt;
&lt;br /&gt;
===Getters &amp;amp; Setters===&lt;br /&gt;
&lt;br /&gt;
Get/set commands are the original methods of CON struct access that date back to DOS EDuke.&lt;br /&gt;
&lt;br /&gt;
get&amp;lt;struct&amp;gt;[&amp;lt;id&amp;gt;].&amp;lt;[[Full list of structure members|member]]&amp;gt; &amp;lt;[[gamevar]]&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
set&amp;lt;struct&amp;gt;[&amp;lt;id&amp;gt;].&amp;lt;[[Full list of structure members|member]]&amp;gt; &amp;lt;value&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;get&#039;&#039;&#039; commands fetch one of the [[Full list of structure members|members of a structure]] into a [[gamevar]].&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;set&#039;&#039;&#039; commands assign the value provided to the member.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;id&amp;gt; can be omitted entirely, which implies an id of [[THISACTOR]].&lt;br /&gt;
&lt;br /&gt;
The commands with the &amp;quot;var&amp;quot; suffix are used to access custom members for a struct, which are really just that ID&#039;s gamevars which have the per-&amp;lt;struct&amp;gt; flag set. So &amp;lt;code&amp;gt;setactorvar[THISACTOR].temp 0&amp;lt;/code&amp;gt; is the same as &amp;lt;code&amp;gt;setvar temp 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Quick Access===&lt;br /&gt;
&lt;br /&gt;
More recently added, structs can be used in place of gamevars, in the form &amp;lt;code&amp;gt;&amp;lt;struct&amp;gt;[&amp;lt;id&amp;gt;].&amp;lt;[[Full list of structure members|member]]&amp;gt;&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&lt;br /&gt;
 [[ifvarg]] userdef[].[[executions]] 10000&lt;br /&gt;
 {&lt;br /&gt;
     [[redefinequote]] 117 You have way too much time on your hands.&lt;br /&gt;
     echo 117&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
With quick access, structures are always read-only. Attempting to use a gamevar-writing command on a quick access structure will result in a compiler error.&lt;br /&gt;
&lt;br /&gt;
Quick struct access cannot be used as an index to other quick struct accesses.&lt;br /&gt;
&lt;br /&gt;
==Structs==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytablebordered}}&lt;br /&gt;
!Get/Set Name!!Quick Name!!Shorthand!!ID type!![[THISACTOR]] meaning!!Description!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Members of the sprite, hittype, and spriteext structures|actor]]&lt;br /&gt;
|[[Members of the sprite, hittype, and spriteext structures|sprite]]&lt;br /&gt;
| a&lt;br /&gt;
|[[sprite id]]&lt;br /&gt;
|current sprite&lt;br /&gt;
|sprites and hittypes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|actorvar&lt;br /&gt;
| av&lt;br /&gt;
|[[sprite id]]&lt;br /&gt;
|current sprite&lt;br /&gt;
|per-actor gamevars&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the tsprite structure|tspr]]&lt;br /&gt;
| &lt;br /&gt;
|[[sprite id]]&lt;br /&gt;
|current sprite&lt;br /&gt;
|sprites&#039; display properties&lt;br /&gt;
|Can only be used within [[EVENT_ANIMATESPRITES]] on sprites with [[mdflags]] containing flag 16.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the projectile structure|projectile]]&lt;br /&gt;
| &lt;br /&gt;
|[[tile number]]&lt;br /&gt;
|(none)&lt;br /&gt;
|projectile types&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the projectile structure|thisprojectile]]&lt;br /&gt;
| &lt;br /&gt;
|[[sprite id]]&lt;br /&gt;
|current sprite&lt;br /&gt;
|individual projectiles&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the sector structure|sector]]&lt;br /&gt;
| s&lt;br /&gt;
|[[sector id]]&lt;br /&gt;
|current sprite&#039;s sector&lt;br /&gt;
|sectors, floors, and ceilings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the wall structure|wall]]&lt;br /&gt;
| w&lt;br /&gt;
|[[wall id]]&lt;br /&gt;
|(none)&lt;br /&gt;
|walls&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the player structure|player]]&lt;br /&gt;
| p&lt;br /&gt;
|[[player id]]&lt;br /&gt;
|current player&lt;br /&gt;
|players&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|playervar&lt;br /&gt;
| pv&lt;br /&gt;
|[[player id]]&lt;br /&gt;
|current player&lt;br /&gt;
|per-player gamevars&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the input structure|input]]&lt;br /&gt;
| i&lt;br /&gt;
|[[player id]]&lt;br /&gt;
|current player&lt;br /&gt;
|input&lt;br /&gt;
|Generally used within [[EVENT_PROCESSINPUT]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the userdef structure|userdef]]&lt;br /&gt;
| u&lt;br /&gt;
|(none)&lt;br /&gt;
|(none)&lt;br /&gt;
|user preferences, game state&lt;br /&gt;
|Use nothing within the brackets&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|[[Members of the tiledata structure|tiledata]]&lt;br /&gt;
| &lt;br /&gt;
|[[tile number]]&lt;br /&gt;
|current sprite&#039;s picnum&lt;br /&gt;
|art tiles&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|(none)&lt;br /&gt;
|[[Members of the paldata structure|paldata]]&lt;br /&gt;
| &lt;br /&gt;
|[[palookup number]]&lt;br /&gt;
|(none)&lt;br /&gt;
|palette lookups (palswaps)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shorthands above can be seen as aliases, i.e. &amp;lt;code&amp;gt;getav&amp;lt;/code&amp;gt; == &amp;lt;code&amp;gt;getactorvar&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[Category:EDuke32 end-user documentation]]&lt;br /&gt;
[[Category:Scripting documentation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Updatesectorneighborz&amp;diff=14976</id>
		<title>Updatesectorneighborz</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Updatesectorneighborz&amp;diff=14976"/>
		<updated>2025-07-05T22:53:17Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Redirected page to Updatesector&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[updatesector]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Updatesectorneighbor&amp;diff=14975</id>
		<title>Updatesectorneighbor</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Updatesectorneighbor&amp;diff=14975"/>
		<updated>2025-07-05T22:53:11Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Redirected page to Updatesector&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[updatesector]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Updatesector&amp;diff=14974</id>
		<title>Updatesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Updatesector&amp;diff=14974"/>
		<updated>2025-07-05T22:52:31Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;updatesector&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_out_sectnum&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;updatesectorz&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_z&amp;gt; &amp;lt;in_out_sectnum&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;updatesectorneighbour&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_out_sectnum&amp;gt; &amp;lt;initial distance&amp;gt; &amp;lt;max distance&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;updatesectorneighbourz&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_z&amp;gt; &amp;lt;in_out_sectnum&amp;gt; &amp;lt;initial distance&amp;gt; &amp;lt;max distance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns [[sector id]] of the [[sector]] containing the point (&amp;lt;in_x&amp;gt;,&amp;lt;in_y&amp;gt;) or (&amp;lt;in_x&amp;gt;,&amp;lt;in_y&amp;gt;,&amp;lt;in_z&amp;gt;) into &amp;lt;in_out_[[sectnum]]&amp;gt;. The final parameter must be pre-populated with what is assumed to be the correct sector, such as the sprite&#039;s pre-existing sectnum.&lt;br /&gt;
&lt;br /&gt;
If the point is not a valid sector (like outside the map, inside a column, or below the floor), it returns -1.  You should verify that the value return is not equal to -1 before manipulating the sector or you could have problems.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;neighbour&amp;quot; counterparts are more performant for tasks that require determining whether nearby sectors exist at a point as they will not exhaustively search the map and has been added in since r7805&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Sector manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Updatesector&amp;diff=14973</id>
		<title>Updatesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Updatesector&amp;diff=14973"/>
		<updated>2025-07-05T22:52:22Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;updatesector&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_out_sectnum&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;updatesectorz&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_z&amp;gt; &amp;lt;in_out_sectnum&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;updatesectorneighbour&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_out_sectnum&amp;gt; &amp;lt;initial distance&amp;gt; &amp;lt;max distance&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;updatesectorneighbourz&#039;&#039;&#039; &amp;lt;in_x&amp;gt; &amp;lt;in_y&amp;gt; &amp;lt;in_z&amp;gt; &amp;lt;in_out_sectnum&amp;gt; &amp;lt;initial distance&amp;gt; &amp;lt;max distance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns [[sector id]] of the [[sector]] containing the point (&amp;lt;in_x&amp;gt;,&amp;lt;in_y&amp;gt;) or (&amp;lt;in_x&amp;gt;,&amp;lt;in_y&amp;gt;,&amp;lt;in_z&amp;gt;) into &amp;lt;in_out_[[sectnum]]&amp;gt;. The final parameter must be pre-populated with what is assumed to be the correct sector, such as the sprite&#039;s pre-existing sectnum.&lt;br /&gt;
&lt;br /&gt;
If the point is not a valid sector (like outside the map, inside a column, or below the floor), it returns -1.  You should verify that the value return is not equal to -1 before manipulating the sector or you could have problems.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;neighbour&amp;quot; counterparts are more performant for tasks that require determining whether nearby sectors exist at a point as they will not exhaustively search the map and has been added in since r7805&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Sector manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Ifplaybackon&amp;diff=14972</id>
		<title>Ifplaybackon</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Ifplaybackon&amp;diff=14972"/>
		<updated>2025-07-05T19:30:13Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ifplaybackon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a dummy conditional check command for World Tour compatibility.&lt;br /&gt;
&lt;br /&gt;
The use is to determine if the replay feature is enabled or not. With EDuke32 this will always return &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Ifplaybackon&amp;diff=14971</id>
		<title>Ifplaybackon</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Ifplaybackon&amp;diff=14971"/>
		<updated>2025-07-05T19:29:16Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;ifplaybackon&amp;#039;&amp;#039;&amp;#039;  This is a dummy command intended for World Tour compatibility.  The use is to determine if the replay feature is enabled or not. With EDuke32 this will always return &amp;quot;false&amp;quot;  Category:EDuke32_specific_commands&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ifplaybackon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a dummy command intended for World Tour compatibility.&lt;br /&gt;
&lt;br /&gt;
The use is to determine if the replay feature is enabled or not. With EDuke32 this will always return &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Preloadtrackslotforswap&amp;diff=14970</id>
		<title>Preloadtrackslotforswap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Preloadtrackslotforswap&amp;diff=14970"/>
		<updated>2025-07-05T19:29:12Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;preloadtrackslotforswap&#039;&#039;&#039; &amp;lt;volume?&amp;gt; &amp;lt;level?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;! THIS COMMAND DOES NOT FUNCTION !&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Code for this was added on r6623 and presumably intended to allow pre-caching of data for an eventual [[swaptrackslot]] command.&lt;br /&gt;
&lt;br /&gt;
Currently it has dummy code that processes two arguments and adjusts the script pointer.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Preloadtrackslotforswap&amp;diff=14969</id>
		<title>Preloadtrackslotforswap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Preloadtrackslotforswap&amp;diff=14969"/>
		<updated>2025-07-05T19:21:50Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;preloadtrackslotforswap&#039;&#039;&#039; &amp;lt;volume?&amp;gt; &amp;lt;level?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;! THIS COMMAND DOES NOT FUNCTION !&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Code for this was added on r6623 and presumably intended to allow pre-caching of data for an eventual [[swaptrackslot]] command.&lt;br /&gt;
&lt;br /&gt;
Currently it has dummy code that processes two arguments and adjusts the script pointer.&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Preloadtrackslotforswap&amp;diff=14968</id>
		<title>Preloadtrackslotforswap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Preloadtrackslotforswap&amp;diff=14968"/>
		<updated>2025-07-05T19:19:48Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;preloadtrackslotforswap&amp;#039;&amp;#039;&amp;#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;  &amp;#039;&amp;#039;&amp;#039;! THIS COMMAND DOES NOT FUNCTION !&amp;#039;&amp;#039;&amp;#039;   Code for this was added on r6623 and presumably intended to allow pre-caching of data for an eventual swaptrackslot command.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;preloadtrackslotforswap&#039;&#039;&#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;! THIS COMMAND DOES NOT FUNCTION !&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Code for this was added on r6623 and presumably intended to allow pre-caching of data for an eventual [[swaptrackslot]] command.&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Undefinevolume&amp;diff=14967</id>
		<title>Undefinevolume</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Undefinevolume&amp;diff=14967"/>
		<updated>2025-07-05T19:15:33Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;undefinevolume&amp;#039;&amp;#039;&amp;#039; &amp;lt;volume&amp;gt;  This removes all of the level entries under a &amp;lt;volume&amp;gt;, along with par &amp;amp; designer time definitions and the volume name definition itself.  Category:EDuke32_specific_commands Category:Game manipulation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;undefinevolume&#039;&#039;&#039; &amp;lt;volume&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This removes all of the level entries under a &amp;lt;volume&amp;gt;, along with par &amp;amp; designer time definitions and the volume name definition itself.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Game manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Undefinelevel&amp;diff=14966</id>
		<title>Undefinelevel</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Undefinelevel&amp;diff=14966"/>
		<updated>2025-07-05T19:13:57Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;undefinelevel&amp;#039;&amp;#039;&amp;#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;  This removes the &amp;lt;level&amp;gt; entry from &amp;lt;volume&amp;gt;, along with par &amp;amp; designer time definitions.  Category:EDuke32_specific_commands Category:Game manipulation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;undefinelevel&#039;&#039;&#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This removes the &amp;lt;level&amp;gt; entry from &amp;lt;volume&amp;gt;, along with par &amp;amp; designer time definitions.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Game manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Swaptrackslot&amp;diff=14965</id>
		<title>Swaptrackslot</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Swaptrackslot&amp;diff=14965"/>
		<updated>2025-07-05T19:03:04Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;setmusicposition&#039;&#039;&#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swaps current track with another one while attempting to keep the seek position.&lt;br /&gt;
&lt;br /&gt;
This is a helper function achieves the same as [[getmusicposition]] -&amp;gt; [[starttrack]] -&amp;gt; [[setmusicposition]] in one go&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Sound manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Swaptrackslot&amp;diff=14964</id>
		<title>Swaptrackslot</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Swaptrackslot&amp;diff=14964"/>
		<updated>2025-07-05T19:02:35Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;setmusicposition&amp;#039;&amp;#039;&amp;#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;  Swaps current track with another one while attempting to keep the seek position.  This is a helper function that does getmusicposition -&amp;gt; starttrack -&amp;gt; setmusicposition in one go  Category:EDuke32 specific commands Category:Sound manipulation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;setmusicposition&#039;&#039;&#039; &amp;lt;volume&amp;gt; &amp;lt;level&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swaps current track with another one while attempting to keep the seek position.&lt;br /&gt;
&lt;br /&gt;
This is a helper function that does [[getmusicposition]] -&amp;gt; [[starttrack]] -&amp;gt; [[setmusicposition]] in one go&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Sound manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Starttrackslot&amp;diff=14963</id>
		<title>Starttrackslot</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Starttrackslot&amp;diff=14963"/>
		<updated>2025-07-05T18:58:05Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Redirected page to Starttrack&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[starttrack]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnwallglass&amp;diff=14962</id>
		<title>Spawnwallglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnwallglass&amp;diff=14962"/>
		<updated>2025-07-05T16:48:04Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnwallglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;wall id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the glass spawning function commonly seen when a player shoots a wall light, various props such as bottles or glass windows.&lt;br /&gt;
&lt;br /&gt;
This works by spawning GLASSPIECES randomly for the amount set in glass count for the wall segment.&amp;lt;br&amp;gt;&lt;br /&gt;
The pieces will fall down in relation to where the light was shot from, typically facing the player and roughly from the height the bullet hit it.&lt;br /&gt;
&lt;br /&gt;
Contrary to the name, it can be used with a wall ID set to -1 when paired with destructible sprites.&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnceilingglass]] [[spawnwallstainedglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnwallstainedglass&amp;diff=14961</id>
		<title>Spawnwallstainedglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnwallstainedglass&amp;diff=14961"/>
		<updated>2025-07-05T16:47:44Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;spawnwallstainedglass&amp;#039;&amp;#039;&amp;#039; &amp;lt;sprite id&amp;gt; &amp;lt;wall id&amp;gt; &amp;lt;glass count&amp;gt;  Calls the &amp;quot;spawn random glass&amp;quot; function, seen when the player shoots at the stained glass seen in E1L3 or the flashing statue in E3L1  This works by spawning GLASSPIECES randomly for the amount set in glass count for the wall segment.&amp;lt;br&amp;gt; The pieces will fall down in relation to where the light was shot from, typically facing the player and roughly from the height the bullet hit it.  Contrary to the name, i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnwallstainedglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;wall id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the &amp;quot;spawn random glass&amp;quot; function, seen when the player shoots at the stained glass seen in E1L3 or the flashing statue in E3L1&lt;br /&gt;
&lt;br /&gt;
This works by spawning GLASSPIECES randomly for the amount set in glass count for the wall segment.&amp;lt;br&amp;gt;&lt;br /&gt;
The pieces will fall down in relation to where the light was shot from, typically facing the player and roughly from the height the bullet hit it.&lt;br /&gt;
&lt;br /&gt;
Contrary to the name, it can be used with a wall ID set to -1 when paired with destructible sprites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnceilingglass]] [[spawnwallglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnwallglass&amp;diff=14960</id>
		<title>Spawnwallglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnwallglass&amp;diff=14960"/>
		<updated>2025-07-05T16:45:57Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnwallglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;wall id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the glass spawning function commonly seen when a player shoots a wall light, various props such as bottles or glass windows.&lt;br /&gt;
&lt;br /&gt;
This works by spawning GLASSPIECES randomly for the amount set in glass count for the wall segment.&amp;lt;br&amp;gt;&lt;br /&gt;
The pieces will fall down in relation to where the light was shot from, typically facing the player and roughly from the height the bullet hit it.&lt;br /&gt;
&lt;br /&gt;
Contrary to the name, many common sprites often call this with the wall ID set to -1 when destroyed.&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnceilingglass]] [[spawnwallstainedglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnwallglass&amp;diff=14959</id>
		<title>Spawnwallglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnwallglass&amp;diff=14959"/>
		<updated>2025-07-05T16:41:27Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;spawnwallglass&amp;#039;&amp;#039;&amp;#039; &amp;lt;sprite id&amp;gt; &amp;lt;wall id&amp;gt; &amp;lt;glass count&amp;gt;  Calls the glass spawning function commonly seen when a player shoots a wall light.  This works by spawning GLASSPIECES randomly for the amount set in glass count for the wall segment.&amp;lt;br&amp;gt; The pieces will fall down in relation to where the light was shot from, typically facing the player and roughly from the height the bullet hit it.  See also: spawnceilingglass spawnwallstainedglass  Category:EDuke32_spe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnwallglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;wall id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the glass spawning function commonly seen when a player shoots a wall light.&lt;br /&gt;
&lt;br /&gt;
This works by spawning GLASSPIECES randomly for the amount set in glass count for the wall segment.&amp;lt;br&amp;gt;&lt;br /&gt;
The pieces will fall down in relation to where the light was shot from, typically facing the player and roughly from the height the bullet hit it.&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnceilingglass]] [[spawnwallstainedglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnceilingglass&amp;diff=14958</id>
		<title>Spawnceilingglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnceilingglass&amp;diff=14958"/>
		<updated>2025-07-05T16:29:01Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnceilingglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;sector id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the glass spawning function commonly seen when a player shoots a ceiling light.&lt;br /&gt;
&lt;br /&gt;
This works by iterating through the sector&#039;s walls and spawning GLASSPIECES for the amount set in glass count (+1) for each of the wall segments at a random location along the line.&amp;lt;br&amp;gt;&lt;br /&gt;
The height for each piece is randomized inside a 5120 Z unit window, starting from the ceiling of the light sector.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that there is no safeguard for spawn counts as it will be &amp;lt;code&amp;gt;walls*(glasscount+1)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
There is a bug in the code where one of the walls will be skipped for glass shards&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnwallglass]] [[spawnwallstainedglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnceilingglass&amp;diff=14957</id>
		<title>Spawnceilingglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnceilingglass&amp;diff=14957"/>
		<updated>2025-07-05T16:28:07Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnceilingglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;sector id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the glass spawning function commonly seen when a player shoots a ceiling light.&lt;br /&gt;
&lt;br /&gt;
This works by iterating through the sector&#039;s walls and spawning GLASSPIECES for the amount set in glass count (+1) for each of the wall segments at a random location along the line.&amp;lt;br&amp;gt;&lt;br /&gt;
The height for each piece is randomized inside a 5120 Z unit window, starting from the ceiling of the light sector.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that there is no safeguard for spawn counts as it will be &amp;lt;code&amp;gt;walls*(glasscount+1)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnwallglass]] [[spawnwallstainedglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Spawnceilingglass&amp;diff=14956</id>
		<title>Spawnceilingglass</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Spawnceilingglass&amp;diff=14956"/>
		<updated>2025-07-05T16:26:38Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;spawnceilingglass&amp;#039;&amp;#039;&amp;#039; &amp;lt;sprite id&amp;gt; &amp;lt;sector id&amp;gt; &amp;lt;glass count&amp;gt;  Calls the glass spawning function commonly seen when a player shoots a ceiling light.  This works by iterating through the sector&amp;#039;s walls and spawning GLASSPIECES for the amount set in glass count (+1) for each of the wall segments at a random location along the line.&amp;lt;br&amp;gt; The height for each piece is randomized inside a 5120 Z unit window, starting from the ceiling of the light sector.  See also: spawnwallg...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;spawnceilingglass&#039;&#039;&#039; &amp;lt;sprite id&amp;gt; &amp;lt;sector id&amp;gt; &amp;lt;glass count&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calls the glass spawning function commonly seen when a player shoots a ceiling light.&lt;br /&gt;
&lt;br /&gt;
This works by iterating through the sector&#039;s walls and spawning GLASSPIECES for the amount set in glass count (+1) for each of the wall segments at a random location along the line.&amp;lt;br&amp;gt;&lt;br /&gt;
The height for each piece is randomized inside a 5120 Z unit window, starting from the ceiling of the light sector.&lt;br /&gt;
&lt;br /&gt;
See also: [[spawnwallglass]] [[spawnwallstainedglass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showviewq16unbiased&amp;diff=14955</id>
		<title>Showviewq16unbiased</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showviewq16unbiased&amp;diff=14955"/>
		<updated>2025-07-05T16:10:32Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Redirected page to Showview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[showview]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showviewq16&amp;diff=14954</id>
		<title>Showviewq16</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showviewq16&amp;diff=14954"/>
		<updated>2025-07-05T16:10:25Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Redirected page to Showview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[showview]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=14953</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=14953"/>
		<updated>2025-07-05T16:08:29Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;showviewunbiased&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;showviewq16&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;Q16 angle&amp;gt; &amp;lt;Q16 horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;showviewq16unbiased&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;Q16 angle&amp;gt; &amp;lt;Q16 horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle (up and down) &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, the aspect ratio at which the scene is drawn in the sub-viewport is unspecified and may differ between renderers and settings of &#039;&#039;r_usenewaspect&#039;&#039;. (For example, different ratios may result in warping or graphical glitches in the view.)&lt;br /&gt;
&lt;br /&gt;
Their permissible range is 0 to 319 for the screen x coordinate, and 0 to 199 for the screen y coordinate, both inclusive.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Q16&amp;quot; variants exist to provide extra 16 bits of floating point precision beyond the usual limitations of player&#039;s horiz and angle, any non-Q16 input values must be bit shifted higher by 16 bits when used as-is.&amp;lt;br&amp;gt;&lt;br /&gt;
When tied to the player, you can use &amp;lt;code&amp;gt;cameraq16horiz&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cameraq16ang&amp;lt;/code&amp;gt; for ready to use high precision input.&amp;lt;br&amp;gt;&lt;br /&gt;
This function is also software renderer compatible and any extra precision will simply be truncated there.&lt;br /&gt;
&lt;br /&gt;
== Coordinates ==&lt;br /&gt;
&lt;br /&gt;
These normalized coordinates are transformed to actual screen coordinates depending on the command used:&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039;, the scaling biases them towards zero, so that the whole screen can never be covered in any other resolution than 320x200:&lt;br /&gt;
 real_scrn_x = round_towards_zero((&amp;lt;scrn_x&amp;gt;*xdim)/320)&lt;br /&gt;
 real_scrn_y = round_towards_zero((&amp;lt;scrn_y&amp;gt;*ydim)/200)&lt;br /&gt;
&lt;br /&gt;
On the other hand, &#039;&#039;&#039;&#039;&#039;showviewunbiased&#039;&#039;&#039;&#039;&#039; transforms them such that the greatest permissible normalized value will be mapped to the greates actual screen coordinate:&lt;br /&gt;
 real_scrn_x = round_towards_zero((&amp;lt;scrn_x&amp;gt;*(xdim-1))/319)&lt;br /&gt;
 real_scrn_y = round_towards_zero((&amp;lt;scrn_y&amp;gt;*(ydim-1))/199)&lt;br /&gt;
&lt;br /&gt;
The resulting coordinates are 0-based with the origin being the upper left corner and denote an inclusive range of pixels in the x or y direction in the classic renderer.&lt;br /&gt;
&lt;br /&gt;
For example, the command&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; x y z a h s  0 0  31 0&lt;br /&gt;
draws the view in a one-pixel high line covering about one tenth of the screen length from the left, and&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; x y z a h s  0 0  0 19&lt;br /&gt;
a one-pixel wide line covering approximately one tenth of the height from above.&lt;br /&gt;
&lt;br /&gt;
The command&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; x y z a h s  0 0  0 0&lt;br /&gt;
would use exactly the upper left pixel in the classic renderer.  (Polymost currently behaves differently, but this may be subject to change.)&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
The correct way of drawing to the whole screen is&lt;br /&gt;
 &#039;&#039;&#039;showviewunbiased&#039;&#039;&#039; x y z a h s &#039;&#039;&#039;&#039;&#039;0 0 319 199&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
 getplayer[THISACTOR].posx x&lt;br /&gt;
 getplayer[THISACTOR].posy y&lt;br /&gt;
 getplayer[THISACTOR].posz z&lt;br /&gt;
 getplayer[THISACTOR].ang ang&lt;br /&gt;
 getplayer[THISACTOR].horiz horiz&lt;br /&gt;
 getplayer[THISACTOR].horizoff temp&lt;br /&gt;
 addvarvar horiz temp&lt;br /&gt;
 updatesectorz x y z sect&lt;br /&gt;
 &#039;&#039;&#039;showviewunbiased&#039;&#039;&#039; x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&lt;br /&gt;
When using Q16 variants, you can also use:&lt;br /&gt;
 camerax&lt;br /&gt;
 cameray&lt;br /&gt;
 cameraz&lt;br /&gt;
 camerasect&lt;br /&gt;
 cameraq16horiz&lt;br /&gt;
 cameraq16ang&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;camera&amp;quot; coordinates also change when viewing 3rd person mode&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=14952</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=14952"/>
		<updated>2025-07-05T16:07:45Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;showviewunbiased&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;showviewq16&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;Q16 angle&amp;gt; &amp;lt;Q16 horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;showviewq16unbiased&#039;&#039;&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;Q16 angle&amp;gt; &amp;lt;Q16 horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle (up and down) &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, the aspect ratio at which the scene is drawn in the sub-viewport is unspecified and may differ between renderers and settings of &#039;&#039;r_usenewaspect&#039;&#039;. (For example, different ratios may result in warping or graphical glitches in the view.)&lt;br /&gt;
&lt;br /&gt;
Their permissible range is 0 to 319 for the screen x coordinate, and 0 to 199 for the screen y coordinate, both inclusive.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Q16&amp;quot; variants exist to provide extra 16 bits of floating point precision beyond the usual limitations of player&#039;s horiz and angle, any non-Q16 input values must be bit shifted higher by 16 bits when used as-is.&amp;lt;br&amp;gt;&lt;br /&gt;
When tied to the player, you can use &amp;lt;code&amp;gt;cameraq16horiz&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cameraq16ang&amp;lt;/code&amp;gt; for ready to use high precision input.&amp;lt;br&amp;gt;&lt;br /&gt;
This function is also software renderer compatible and any extra precision will simply be truncated there.&lt;br /&gt;
&lt;br /&gt;
== Coordinates ==&lt;br /&gt;
&lt;br /&gt;
These normalized coordinates are transformed to actual screen coordinates depending on the command used:&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039;, the scaling biases them towards zero, so that the whole screen can never be covered in any other resolution than 320x200:&lt;br /&gt;
 real_scrn_x = round_towards_zero((&amp;lt;scrn_x&amp;gt;*xdim)/320)&lt;br /&gt;
 real_scrn_y = round_towards_zero((&amp;lt;scrn_y&amp;gt;*ydim)/200)&lt;br /&gt;
&lt;br /&gt;
On the other hand, &#039;&#039;&#039;&#039;&#039;showviewunbiased&#039;&#039;&#039;&#039;&#039; transforms them such that the greatest permissible normalized value will be mapped to the greates actual screen coordinate:&lt;br /&gt;
 real_scrn_x = round_towards_zero((&amp;lt;scrn_x&amp;gt;*(xdim-1))/319)&lt;br /&gt;
 real_scrn_y = round_towards_zero((&amp;lt;scrn_y&amp;gt;*(ydim-1))/199)&lt;br /&gt;
&lt;br /&gt;
The resulting coordinates are 0-based with the origin being the upper left corner and denote an inclusive range of pixels in the x or y direction in the classic renderer.&lt;br /&gt;
&lt;br /&gt;
For example, the command&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; x y z a h s  0 0  31 0&lt;br /&gt;
draws the view in a one-pixel high line covering about one tenth of the screen length from the left, and&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; x y z a h s  0 0  0 19&lt;br /&gt;
a one-pixel wide line covering approximately one tenth of the height from above.&lt;br /&gt;
&lt;br /&gt;
The command&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;showview&#039;&#039;&#039;&#039;&#039; x y z a h s  0 0  0 0&lt;br /&gt;
would use exactly the upper left pixel in the classic renderer.  (Polymost currently behaves differently, but this may be subject to change.)&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
The correct way of drawing to the whole screen is&lt;br /&gt;
 &#039;&#039;&#039;showviewunbiased&#039;&#039;&#039; x y z a h s &#039;&#039;&#039;&#039;&#039;0 0 319 199&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
 getplayer[THISACTOR].posx x&lt;br /&gt;
 getplayer[THISACTOR].posy y&lt;br /&gt;
 getplayer[THISACTOR].posz z&lt;br /&gt;
 getplayer[THISACTOR].ang ang&lt;br /&gt;
 getplayer[THISACTOR].horiz horiz&lt;br /&gt;
 getplayer[THISACTOR].horizoff temp&lt;br /&gt;
 addvarvar horiz temp&lt;br /&gt;
 updatesectorz x y z sect&lt;br /&gt;
 &#039;&#039;&#039;showviewunbiased&#039;&#039;&#039; x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&lt;br /&gt;
When using q16 variants, you can also use:&lt;br /&gt;
 camerax&lt;br /&gt;
 cameray&lt;br /&gt;
 cameraz&lt;br /&gt;
 camerasect&lt;br /&gt;
 cameraq16horiz&lt;br /&gt;
 cameraq16ang&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;camera&amp;quot; coordinates also change when viewing 3rd person mode&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Setngcflags&amp;diff=14951</id>
		<title>Setngcflags</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Setngcflags&amp;diff=14951"/>
		<updated>2025-07-05T15:39:24Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;setngcflags&#039;&#039;&#039; &amp;lt;const/var&amp;gt; &amp;lt;idx1&amp;gt; [&amp;lt;idx2&amp;gt;...]&lt;br /&gt;
&lt;br /&gt;
Sets the flags for the newgamechoices entries at the specified indices.&lt;br /&gt;
The index list is variable-sized, up to a maximum of 3.&lt;br /&gt;
&lt;br /&gt;
This can be used to enable/disable the MEF_Hidden and MEF_Locked state.&lt;br /&gt;
Supersedes the userdef struct members:&lt;br /&gt;
&lt;br /&gt;
`m_newgamecustomopen` and `m_newgamecustomsubopen`.&lt;br /&gt;
&lt;br /&gt;
See also: [[getngcflags]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Userdef structure manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Getngcflags&amp;diff=14950</id>
		<title>Getngcflags</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Getngcflags&amp;diff=14950"/>
		<updated>2025-07-05T15:39:15Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;getngcflags&amp;#039;&amp;#039;&amp;#039; &amp;lt;const/var&amp;gt; &amp;lt;idx1&amp;gt; [&amp;lt;idx2&amp;gt;...]  Gets the flags for the newgamechoices entries at the specified indices. The index list is variable-sized, up to a maximum of 3.  This can be used to enable/disable the MEF_Hidden and MEF_Locked state. Supersedes the userdef struct members:  `m_newgamecustomopen` and `m_newgamecustomsubopen`.  See also: setngcflags  Category:EDuke32_specific_commands Category:Userdef structure manipulation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;getngcflags&#039;&#039;&#039; &amp;lt;const/var&amp;gt; &amp;lt;idx1&amp;gt; [&amp;lt;idx2&amp;gt;...]&lt;br /&gt;
&lt;br /&gt;
Gets the flags for the newgamechoices entries at the specified indices.&lt;br /&gt;
The index list is variable-sized, up to a maximum of 3.&lt;br /&gt;
&lt;br /&gt;
This can be used to enable/disable the MEF_Hidden and MEF_Locked state.&lt;br /&gt;
Supersedes the userdef struct members:&lt;br /&gt;
&lt;br /&gt;
`m_newgamecustomopen` and `m_newgamecustomsubopen`.&lt;br /&gt;
&lt;br /&gt;
See also: [[setngcflags]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Userdef structure manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Setngcflags&amp;diff=14949</id>
		<title>Setngcflags</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Setngcflags&amp;diff=14949"/>
		<updated>2025-07-05T15:38:56Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;setngcflags&amp;#039;&amp;#039;&amp;#039; &amp;lt;const/var&amp;gt; &amp;lt;idx1&amp;gt; [&amp;lt;idx2&amp;gt;...]  Gets/sets the flags for the newgamechoices entries at the specified indices. The index list is variable-sized, up to a maximum of 3.  This can be used to enable/disable the MEF_Hidden and MEF_Locked state. Supersedes the userdef struct members:  `m_newgamecustomopen` and `m_newgamecustomsubopen`.  See also: getngcflags  Category:EDuke32_specific_commands Category:Userdef structure manipulation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;setngcflags&#039;&#039;&#039; &amp;lt;const/var&amp;gt; &amp;lt;idx1&amp;gt; [&amp;lt;idx2&amp;gt;...]&lt;br /&gt;
&lt;br /&gt;
Gets/sets the flags for the newgamechoices entries at the specified indices.&lt;br /&gt;
The index list is variable-sized, up to a maximum of 3.&lt;br /&gt;
&lt;br /&gt;
This can be used to enable/disable the MEF_Hidden and MEF_Locked state.&lt;br /&gt;
Supersedes the userdef struct members:&lt;br /&gt;
&lt;br /&gt;
`m_newgamecustomopen` and `m_newgamecustomsubopen`.&lt;br /&gt;
&lt;br /&gt;
See also: [[getngcflags]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]]&lt;br /&gt;
[[Category:Userdef structure manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14948</id>
		<title>Movesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14948"/>
		<updated>2025-07-05T15:31:43Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;movesector&#039;&#039;&#039; &amp;lt;sprite ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.&lt;br /&gt;
&lt;br /&gt;
The sprite ID and it&#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through [[EVENT_MOVESECTOR]].&lt;br /&gt;
&lt;br /&gt;
Source code says that sprite&#039;s T1, T2 and T3 are used.&lt;br /&gt;
T2 is originIdx, T3 for rotateAngle however nothing seems evident for T1.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32_specific_commands]] &lt;br /&gt;
[[Category:Sector manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Category:All_commands&amp;diff=14947</id>
		<title>Category:All commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Category:All_commands&amp;diff=14947"/>
		<updated>2025-07-05T15:30:19Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: /* Manipulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{EDuke32 Intro}}&lt;br /&gt;
&lt;br /&gt;
==Preprocessor==&lt;br /&gt;
*[[include]]&lt;br /&gt;
*[[includedefault]]&lt;br /&gt;
*[[define]]&lt;br /&gt;
*// single-line comment&lt;br /&gt;
*/* block comment */&lt;br /&gt;
*whitespace characters: &amp;lt;code&amp;gt;( ) ; ,&amp;lt;/code&amp;gt;&lt;br /&gt;
==Meta-Settings==&lt;br /&gt;
&amp;lt;!-- These deal with matters outside the game world. --&amp;gt;&lt;br /&gt;
*[[dynamicremap]]&lt;br /&gt;
*[[dynamicsoundremap]]&lt;br /&gt;
*[[setcfgname]]&lt;br /&gt;
*[[setdefname]]&lt;br /&gt;
*[[setgamename]]&lt;br /&gt;
*[[precache]]&lt;br /&gt;
*[[scriptsize]]&lt;br /&gt;
*[[cheatkeys]]&lt;br /&gt;
*[[definecheat]]&lt;br /&gt;
*[[definegamefuncname]]&lt;br /&gt;
*[[definegametype]]&lt;br /&gt;
*[[definevolumename]]&lt;br /&gt;
*[[definevolumeflags]]&lt;br /&gt;
*[[definelevelname]]&lt;br /&gt;
*[[defineskillname]]&lt;br /&gt;
*[[undefinevolume]]&lt;br /&gt;
*[[undefinelevel]]&lt;br /&gt;
*[[undefineskill]]&lt;br /&gt;
===If===&lt;br /&gt;
*[[ifrespawn]]&lt;br /&gt;
*[[ifmultiplayer]]&lt;br /&gt;
*[[ifclient]]&lt;br /&gt;
*[[ifserver]]&lt;br /&gt;
==Global Settings==&lt;br /&gt;
&amp;lt;!-- These deal with matters inside the game world. --&amp;gt;&lt;br /&gt;
*[[gamestartup]]&lt;br /&gt;
*[[spritenopal]]&lt;br /&gt;
*[[spritenoshade]]&lt;br /&gt;
*[[spritenvg]]&lt;br /&gt;
*[[spriteshadow]]&lt;br /&gt;
==Block Delimiting==&lt;br /&gt;
===Object-Oriented===&lt;br /&gt;
*[[actor]]&lt;br /&gt;
*[[useractor]]&lt;br /&gt;
*[[enda]]&lt;br /&gt;
===Procedural===&lt;br /&gt;
*[[onevent]]&lt;br /&gt;
*[[appendevent]]&lt;br /&gt;
*[[endevent]]&lt;br /&gt;
&lt;br /&gt;
===Subroutines===&lt;br /&gt;
*[[state]]&lt;br /&gt;
*[[defstate]]&lt;br /&gt;
*[[ends]]&lt;br /&gt;
*[[prependstate]]&lt;br /&gt;
*[[appendstate]]&lt;br /&gt;
&lt;br /&gt;
==Flow Control==&lt;br /&gt;
===If Components===&lt;br /&gt;
*[[nullop]]&lt;br /&gt;
*[[else]]&lt;br /&gt;
===Switch===&lt;br /&gt;
*[[switch]]&lt;br /&gt;
*[[endswitch]]&lt;br /&gt;
*[[case]]&lt;br /&gt;
*[[default]]&lt;br /&gt;
===Termination===&lt;br /&gt;
*[[break]]&lt;br /&gt;
*[[continue]]&lt;br /&gt;
*[[exit]]&lt;br /&gt;
*[[return]]&lt;br /&gt;
*[[terminate]]&lt;br /&gt;
&lt;br /&gt;
===Jump===&lt;br /&gt;
:&#039;&#039;Note: Jumping commands are deprecated and will not be supported by Lunatic. Use [[#Loops|loops]] instead.&#039;&#039;&lt;br /&gt;
*[[getcurraddress]]&lt;br /&gt;
*[[jump]]&lt;br /&gt;
&lt;br /&gt;
===Loops===&lt;br /&gt;
*[[whilevarl]]&lt;br /&gt;
*[[whilevarvarl]]&lt;br /&gt;
*[[whilevare]]&lt;br /&gt;
*[[whilevarn]]&lt;br /&gt;
*[[whilevarvarn]]&lt;br /&gt;
:&#039;&#039;It is also possible to loop by calling a state from within itself.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Game Variables==&lt;br /&gt;
*[[gamevar]]&lt;br /&gt;
*[[gamearray]]&lt;br /&gt;
===Gamevar Operators===&lt;br /&gt;
*[[setvar]]&lt;br /&gt;
*[[setvarvar]]&lt;br /&gt;
*[[setarray]]&lt;br /&gt;
*[[addvar]]&lt;br /&gt;
*[[addvarvar]]&lt;br /&gt;
*[[subvar]]&lt;br /&gt;
*[[subvarvar]]&lt;br /&gt;
*[[mulvar]]&lt;br /&gt;
*[[mulvarvar]]&lt;br /&gt;
*[[divvar]]&lt;br /&gt;
*[[divvarvar]]&lt;br /&gt;
*[[modvar]]&lt;br /&gt;
*[[modvarvar]]&lt;br /&gt;
*[[andvar]]&lt;br /&gt;
*[[andvarvar]]&lt;br /&gt;
*[[orvar]]&lt;br /&gt;
*[[orvarvar]]&lt;br /&gt;
*[[xorvar]]&lt;br /&gt;
*[[xorvarvar]]&lt;br /&gt;
*[[randvar]]&lt;br /&gt;
*[[randvarvar]]&lt;br /&gt;
===Gamevar Conditions===&lt;br /&gt;
*[[ifvare]]&lt;br /&gt;
*[[ifvarn]]&lt;br /&gt;
*[[ifvarg]]&lt;br /&gt;
*[[ifvarl]]&lt;br /&gt;
*[[ifvarand]]&lt;br /&gt;
*[[ifvaror]]&lt;br /&gt;
*[[ifvarxor]]&lt;br /&gt;
*[[ifvareither]]&lt;br /&gt;
*[[ifvarvare]]&lt;br /&gt;
*[[ifvarvarn]]&lt;br /&gt;
*[[ifvarvarg]]&lt;br /&gt;
*[[ifvarvarl]]&lt;br /&gt;
*[[ifvarvarand]]&lt;br /&gt;
*[[ifvarvaror]]&lt;br /&gt;
*[[ifvarvarxor]]&lt;br /&gt;
*[[ifvarvareither]]&lt;br /&gt;
===Math Operations===&lt;br /&gt;
*[[sqrt]]&lt;br /&gt;
*[[calchypotenuse]]&lt;br /&gt;
*[[sin]]&lt;br /&gt;
*[[cos]]&lt;br /&gt;
*[[shiftvarl]]&lt;br /&gt;
*[[shiftvarr]]&lt;br /&gt;
*[[mulscale]]&lt;br /&gt;
*[[getangle]]&lt;br /&gt;
*[[getincangle]]&lt;br /&gt;
===Array Operations===&lt;br /&gt;
*[[getarraysize]]&lt;br /&gt;
*[[getarraysequence]]&lt;br /&gt;
*[[resizearray]]&lt;br /&gt;
*[[copy]]&lt;br /&gt;
*[[setarray]]&lt;br /&gt;
*[[setarraysequence]]&lt;br /&gt;
&lt;br /&gt;
===Data Saving===&lt;br /&gt;
*[[readgamevar]]&lt;br /&gt;
*[[savegamevar]]&lt;br /&gt;
*[[readarrayfromfile]]&lt;br /&gt;
*[[writearraytofile]]&lt;br /&gt;
==Structure Access==&lt;br /&gt;
*[[getactor]]&lt;br /&gt;
*[[getactorvar]]&lt;br /&gt;
*[[getinput]]&lt;br /&gt;
*[[getplayer]]&lt;br /&gt;
*[[getplayervar]]&lt;br /&gt;
*[[getprojectile]]&lt;br /&gt;
*[[getsector]]&lt;br /&gt;
*[[getthisprojectile]]&lt;br /&gt;
*[[gettspr]]&lt;br /&gt;
*[[getuserdef]]&lt;br /&gt;
*[[getwall]]&lt;br /&gt;
*[[setactor]]&lt;br /&gt;
*[[setactorvar]]&lt;br /&gt;
*[[setinput]]&lt;br /&gt;
*[[setplayer]]&lt;br /&gt;
*[[setplayervar]]&lt;br /&gt;
*[[setprojectile]]&lt;br /&gt;
*[[setsector]]&lt;br /&gt;
*[[setthisprojectile]]&lt;br /&gt;
*[[settspr]]&lt;br /&gt;
*[[setuserdef]]&lt;br /&gt;
*[[setwall]]&lt;br /&gt;
==Actors==&lt;br /&gt;
===Structures===&lt;br /&gt;
*[[cactor]] &amp;lt;!-- picnum --&amp;gt;&lt;br /&gt;
*[[action]] &amp;lt;!-- htg_t 4 (2, 3) --&amp;gt;&lt;br /&gt;
*[[ai]] &amp;lt;!-- htg_t 5 (1?) --&amp;gt;&lt;br /&gt;
*[[move]] &amp;lt;!-- htg_t 1 --&amp;gt;&lt;br /&gt;
*[[count]] &amp;lt;!-- htg_t 0 --&amp;gt;&lt;br /&gt;
*[[resetactioncount]] &amp;lt;!-- htg_t 2 --&amp;gt;&lt;br /&gt;
*[[resetcount]] &amp;lt;!-- htg_t 0 --&amp;gt;&lt;br /&gt;
*[[cstat]] &amp;lt;!-- cstat --&amp;gt;&lt;br /&gt;
*[[cstator]] &amp;lt;!-- cstat --&amp;gt;&lt;br /&gt;
*[[clipdist]] &amp;lt;!-- clipdist --&amp;gt;&lt;br /&gt;
*[[sizeat]] &amp;lt;!-- [xy]repeat --&amp;gt;&lt;br /&gt;
*[[sizeto]] &amp;lt;!-- [xy]repeat --&amp;gt;&lt;br /&gt;
*[[strength]] &amp;lt;!-- extra --&amp;gt;&lt;br /&gt;
*[[addstrength]] &amp;lt;!-- extra --&amp;gt;&lt;br /&gt;
*[[spritepal]] &amp;lt;!-- pal --&amp;gt;&lt;br /&gt;
*[[getlastpal]] &amp;lt;!-- httempang --&amp;gt;&lt;br /&gt;
*[[sleeptime]] &amp;lt;!-- httimetosleep --&amp;gt;&lt;br /&gt;
*[[spriteflags]] &amp;lt;!-- htflags --&amp;gt;&lt;br /&gt;
*[[angoff]] &amp;lt;!-- angoff --&amp;gt;&lt;br /&gt;
*[[angoffvar]] &amp;lt;!-- angoff --&amp;gt;&lt;br /&gt;
*[[changespritesect]] &amp;lt;!-- sectnum --&amp;gt;&lt;br /&gt;
*[[changespritestat]] &amp;lt;!-- statnum --&amp;gt;&lt;br /&gt;
*[[setsprite]] &amp;lt;!-- [xyz] --&amp;gt;&lt;br /&gt;
====If====&lt;br /&gt;
*[[ifactor]]&lt;br /&gt;
*[[ifaction]]&lt;br /&gt;
*[[ifactioncount]]&lt;br /&gt;
*[[ifai]]&lt;br /&gt;
*[[ifcount]]&lt;br /&gt;
*[[ifmove]]&lt;br /&gt;
*[[ifspawnedby]]&lt;br /&gt;
*[[ifspritepal]]&lt;br /&gt;
*[[ifstrength]]&lt;br /&gt;
*[[ifhitweapon]]&lt;br /&gt;
*[[ifwasweapon]]&lt;br /&gt;
*[[ifdead]]&lt;br /&gt;
*[[ifactornotstayput]]&lt;br /&gt;
===Commands===&lt;br /&gt;
*[[fall]]&lt;br /&gt;
*[[insertspriteq]]&lt;br /&gt;
*[[killit]]&lt;br /&gt;
*[[movesprite]]&lt;br /&gt;
*[[ssp]]&lt;br /&gt;
*[[clipmove]]&lt;br /&gt;
*[[clipmovenoslide]]&lt;br /&gt;
===Measurements===&lt;br /&gt;
*[[dist]]&lt;br /&gt;
*[[ldist]]&lt;br /&gt;
*[[cansee]]&lt;br /&gt;
*[[canseespr]]&lt;br /&gt;
===Surroundings===&lt;br /&gt;
====Commands====&lt;br /&gt;
*[[hitradius]]&lt;br /&gt;
*[[hitradiusvar]]&lt;br /&gt;
*[[flash]]&lt;br /&gt;
====If====&lt;br /&gt;
*[[ifawayfromwall]]&lt;br /&gt;
*[[ifbulletnear]]&lt;br /&gt;
*[[ifceilingdistl]]&lt;br /&gt;
*[[iffloordistl]]&lt;br /&gt;
*[[ifgapzl]]&lt;br /&gt;
*[[ifsquished]]&lt;br /&gt;
*[[ifnotmoving]]&lt;br /&gt;
*[[ifinwater]]&lt;br /&gt;
*[[ifonwater]]&lt;br /&gt;
*[[ifoutside]]&lt;br /&gt;
*[[ifinspace]]&lt;br /&gt;
*[[ifinouterspace]]&lt;br /&gt;
*[[ifrnd]] &amp;lt;!-- This is here because it really only has a use in actor code. --&amp;gt;&lt;br /&gt;
===Mapping Features===&lt;br /&gt;
*[[mikesnd]]&lt;br /&gt;
*[[respawnhitag]]&lt;br /&gt;
===Player Interaction===&lt;br /&gt;
*[[ifangdiffl]]&lt;br /&gt;
*[[ifcansee]]&lt;br /&gt;
*[[ifcanseetarget]]&lt;br /&gt;
*[[ifcanshoottarget]]&lt;br /&gt;
*[[ifhitspace]]&lt;br /&gt;
*[[getangletotarget]]&lt;br /&gt;
===Spawning===&lt;br /&gt;
*[[spawn]]&lt;br /&gt;
*[[espawn]]&lt;br /&gt;
*[[espawnvar]]&lt;br /&gt;
*[[qspawn]]&lt;br /&gt;
*[[qspawnvar]]&lt;br /&gt;
*[[eqspawn]]&lt;br /&gt;
*[[eqspawnvar]]&lt;br /&gt;
===Materials===&lt;br /&gt;
*[[debris]]&lt;br /&gt;
*[[guts]]&lt;br /&gt;
*[[lotsofglass]]&lt;br /&gt;
*[[mail]]&lt;br /&gt;
*[[money]]&lt;br /&gt;
*[[paper]]&lt;br /&gt;
==Projectiles==&lt;br /&gt;
*[[defineprojectile]]&lt;br /&gt;
*[[shoot]]&lt;br /&gt;
*[[shootvar]]&lt;br /&gt;
*[[eshoot]]&lt;br /&gt;
*[[eshootvar]]&lt;br /&gt;
*[[zshoot]]&lt;br /&gt;
*[[zshootvar]]&lt;br /&gt;
*[[ezshoot]]&lt;br /&gt;
*[[ezshootvar]]&lt;br /&gt;
==Player==&lt;br /&gt;
===Commands===&lt;br /&gt;
*[[addammo]]&lt;br /&gt;
*[[addinventory]]&lt;br /&gt;
*[[addweapon]]&lt;br /&gt;
*[[addweaponvar]]&lt;br /&gt;
*[[addphealth]]&lt;br /&gt;
*[[tossweapon]]&lt;br /&gt;
*[[gmaxammo]]&lt;br /&gt;
*[[smaxammo]]&lt;br /&gt;
*[[checkavailinven]]&lt;br /&gt;
*[[checkavailweapon]]&lt;br /&gt;
*[[addkills]]&lt;br /&gt;
*[[lockplayer]]&lt;br /&gt;
*[[resetplayer]]&lt;br /&gt;
*[[resetplayerflags]]&lt;br /&gt;
===If===&lt;br /&gt;
*[[ifgotweaponce]]&lt;br /&gt;
*[[ifp]]&lt;br /&gt;
*[[ifpdistg]]&lt;br /&gt;
*[[ifpdistl]]&lt;br /&gt;
*[[ifphealthl]]&lt;br /&gt;
*[[ifpinventory]]&lt;br /&gt;
*[[ifplayersl]]&lt;br /&gt;
==Sectors==&lt;br /&gt;
===Operating===&lt;br /&gt;
*[[operate]]&lt;br /&gt;
*[[operateactivators]]&lt;br /&gt;
*[[operatemasterswitches]]&lt;br /&gt;
*[[operaterespawns]]&lt;br /&gt;
*[[operatesectors]]&lt;br /&gt;
*[[activatebysector]]&lt;br /&gt;
*[[activate]]&lt;br /&gt;
===Manipulation===&lt;br /&gt;
*[[dragpoint]]&lt;br /&gt;
*[[movesector]]&lt;br /&gt;
*[[sectsetinterpolation]]&lt;br /&gt;
*[[sectclearinterpolation]]&lt;br /&gt;
&lt;br /&gt;
===Analysis===&lt;br /&gt;
*[[getceilzofslope]]&lt;br /&gt;
*[[getflorzofslope]]&lt;br /&gt;
*[[getzrange]]&lt;br /&gt;
*[[updatesector]]&lt;br /&gt;
*[[updatesectorz]]&lt;br /&gt;
*[[checkactivatormotion]]&lt;br /&gt;
*[[rotatepoint]]&lt;br /&gt;
*[[lineintersect]]&lt;br /&gt;
*[[rayintersect]]&lt;br /&gt;
*[[sectorofwall]]&lt;br /&gt;
==Discovery==&lt;br /&gt;
===Searching===&lt;br /&gt;
*[[findnearactor]]&lt;br /&gt;
*[[findnearactor3d]]&lt;br /&gt;
*[[findnearactor3dvar]]&lt;br /&gt;
*[[findnearactorvar]]&lt;br /&gt;
*[[findnearactorz]]&lt;br /&gt;
*[[findnearactorzvar]]&lt;br /&gt;
*[[findnearsprite]]&lt;br /&gt;
*[[findnearsprite3d]]&lt;br /&gt;
*[[findnearsprite3dvar]]&lt;br /&gt;
*[[findnearspritevar]]&lt;br /&gt;
*[[findnearspritez]]&lt;br /&gt;
*[[findnearspritezvar]]&lt;br /&gt;
*[[findotherplayer]]&lt;br /&gt;
*[[findplayer]]&lt;br /&gt;
*[[neartag]]&lt;br /&gt;
*[[hitscan]]&lt;br /&gt;
===Sorting===&lt;br /&gt;
*[[headspritesect]]&lt;br /&gt;
*[[headspritestat]]&lt;br /&gt;
*[[nextspritesect]]&lt;br /&gt;
*[[nextspritestat]]&lt;br /&gt;
*[[prevspritesect]]&lt;br /&gt;
*[[prevspritestat]]&lt;br /&gt;
==Audio==&lt;br /&gt;
===Sounds===&lt;br /&gt;
*[[definesound]]&lt;br /&gt;
*[[sound]]&lt;br /&gt;
*[[soundvar]]&lt;br /&gt;
*[[soundonce]]&lt;br /&gt;
*[[soundoncevar]]&lt;br /&gt;
*[[globalsound]]&lt;br /&gt;
*[[globalsoundvar]]&lt;br /&gt;
*[[screensound]]&lt;br /&gt;
*[[stopsound]]&lt;br /&gt;
*[[stopsoundvar]]&lt;br /&gt;
*[[stopactorsound]]&lt;br /&gt;
*[[stopallsounds]]&lt;br /&gt;
*[[ifsound]]&lt;br /&gt;
*[[ifactorsound]]&lt;br /&gt;
*[[ifnosounds]]&lt;br /&gt;
*[[setactorsoundpitch]]&lt;br /&gt;
===Music===&lt;br /&gt;
*[[music]]&lt;br /&gt;
*[[starttrack]]&lt;br /&gt;
*[[starttrackvar]]&lt;br /&gt;
*[[getmusicposition]]&lt;br /&gt;
*[[setmusicposition]]&lt;br /&gt;
==Quotes==&lt;br /&gt;
*[[definequote]]&lt;br /&gt;
*[[redefinequote]]&lt;br /&gt;
*[[quote]]&lt;br /&gt;
*[[userquote]]&lt;br /&gt;
*[[qsprintf]]&lt;br /&gt;
*[[qstrcpy]]&lt;br /&gt;
*[[qstrcat]]&lt;br /&gt;
*[[qstrncat]]&lt;br /&gt;
*[[qstrlen]]&lt;br /&gt;
*[[qsubstr]]&lt;br /&gt;
*[[qstrdim]]&lt;br /&gt;
*[[qgetsysstr]]&lt;br /&gt;
*[[getpname]]&lt;br /&gt;
*[[getkeyname]]&lt;br /&gt;
==Cutscenes==&lt;br /&gt;
*[[startcutscene]]&lt;br /&gt;
*[[ifcutscene]]&lt;br /&gt;
==Screen==&lt;br /&gt;
===Screen Manipulation===&lt;br /&gt;
*[[palfrom]]&lt;br /&gt;
*[[guniqhudid]]&lt;br /&gt;
*[[setgamepalette]]&lt;br /&gt;
*[[setaspect]]&lt;br /&gt;
===Player Actions===&lt;br /&gt;
*[[wackplayer]]&lt;br /&gt;
*[[quake]]&lt;br /&gt;
*[[pkick]]&lt;br /&gt;
*[[pstomp]]&lt;br /&gt;
*[[tip]]&lt;br /&gt;
===Screen Drawing===&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[rotatesprite16]]&lt;br /&gt;
*[[rotatespritea]]&lt;br /&gt;
*[[screentext]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[gametextz]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[digitalnumberz]]&lt;br /&gt;
*[[showview]]&lt;br /&gt;
*[[showviewunbiased]]&lt;br /&gt;
===Math===&lt;br /&gt;
*[[displayrand]]&lt;br /&gt;
*[[displayrandvar]]&lt;br /&gt;
*[[displayrandvarvar]]&lt;br /&gt;
==Time Access==&lt;br /&gt;
*[[getticks]]&lt;br /&gt;
*[[gettimedate]]&lt;br /&gt;
==Game-Changing==&lt;br /&gt;
*[[activatecheat]]&lt;br /&gt;
*[[startlevel]]&lt;br /&gt;
*[[inittimer]]&lt;br /&gt;
*[[endofgame]]&lt;br /&gt;
*[[endoflevel]]&lt;br /&gt;
*[[cmenu]]&lt;br /&gt;
==Game Saving==&lt;br /&gt;
*[[save]]&lt;br /&gt;
*[[savenn]]&lt;br /&gt;
===Hub Maps===&lt;br /&gt;
*[[loadmapstate]]&lt;br /&gt;
*[[savemapstate]]&lt;br /&gt;
*[[clearmapstate]]&lt;br /&gt;
==Debug==&lt;br /&gt;
*[[debug]]&lt;br /&gt;
*[[addlog]]&lt;br /&gt;
*[[addlogvar]]&lt;br /&gt;
*[[echo]]&lt;br /&gt;
==Deprecated==&lt;br /&gt;
*[[betaname]]&lt;br /&gt;
*[[enhanced]]&lt;br /&gt;
*[[eventloadactor]]&lt;br /&gt;
*[[time]]&lt;br /&gt;
*[[shadeto]]&lt;br /&gt;
===Screen Drawing===&lt;br /&gt;
*[[myos]]&lt;br /&gt;
*[[myosx]]&lt;br /&gt;
*[[myospal]]&lt;br /&gt;
*[[myospalx]]&lt;br /&gt;
===Single-Use Structure Access===&lt;br /&gt;
*[[getactorangle]]&lt;br /&gt;
*[[getplayerangle]]&lt;br /&gt;
*[[gettextureceiling]]&lt;br /&gt;
*[[gettexturefloor]]&lt;br /&gt;
*[[sectgethitag]]&lt;br /&gt;
*[[sectgetlotag]]&lt;br /&gt;
*[[spgethitag]]&lt;br /&gt;
*[[spgetlotag]]&lt;br /&gt;
*[[setactorangle]]&lt;br /&gt;
*[[setplayerangle]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting documentation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14946</id>
		<title>Movesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14946"/>
		<updated>2025-07-05T15:29:05Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;movesector&#039;&#039;&#039; &amp;lt;sprite ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.&lt;br /&gt;
&lt;br /&gt;
The sprite ID and it&#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through [[EVENT_MOVESECTOR]].&lt;br /&gt;
&lt;br /&gt;
Source code says that sprite&#039;s T1, T2 and T3 are used.&lt;br /&gt;
T2 is originIdx, T3 for rotateAngle however nothing seems evident for T1.&lt;br /&gt;
[[Category:EDuke32_specific_commands]] [[Category:Sector manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14945</id>
		<title>Movesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14945"/>
		<updated>2025-07-05T15:28:14Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;movesector&#039;&#039;&#039; &amp;lt;sprite ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.&lt;br /&gt;
&lt;br /&gt;
The sprite ID and it&#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through [[EVENT_MOVESECTOR]].&lt;br /&gt;
&lt;br /&gt;
Source code says that sprite&#039;s T1, T2 and T3 are used.&lt;br /&gt;
T2 is originIdx, T3 for rotateAngle however nothing seems evident for T1.&lt;br /&gt;
[[Category:EDuke32_specific_commands]] [[Category:All_commands]] [[Category:Sector manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14944</id>
		<title>Movesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14944"/>
		<updated>2025-07-05T15:26:36Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;movesector&#039;&#039;&#039; &amp;lt;sprite ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.&lt;br /&gt;
&lt;br /&gt;
The sprite ID and it&#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through [[EVENT_MOVESECTOR]].&lt;br /&gt;
&lt;br /&gt;
Source code says that sprite&#039;s T1, T2 and T3 are used.&lt;br /&gt;
T2 is originIdx, T3 for rotateAngle however nothing seems evident for T1.&lt;br /&gt;
[[Category:EDuke32_specific_commands]] [[Category:All_commands]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14943</id>
		<title>Movesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14943"/>
		<updated>2025-07-05T15:24:11Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;movesector&#039;&#039;&#039; &amp;lt;sprite ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.&lt;br /&gt;
&lt;br /&gt;
The sprite ID and it&#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through [[EVENT_MOVESECTOR]].&lt;br /&gt;
&lt;br /&gt;
Source code says that sprite&#039;s T1, T2 and T3 are used.&lt;br /&gt;
T2 is originIdx, T3 for rotateAngle however nothing seems evident for T1.&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14942</id>
		<title>Movesector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Movesector&amp;diff=14942"/>
		<updated>2025-07-05T15:23:35Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;movesector&amp;#039;&amp;#039;&amp;#039; &amp;lt;sprite ID&amp;gt;  A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.  The sprite ID and it&amp;#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through EVENT_MOVESECTOR.  Source code says that sprite&amp;#039;s T1, T2 and T3 are used, where T2 is originIdx, T3 for rotateAngle but nothing for T1.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;movesector&#039;&#039;&#039; &amp;lt;sprite ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A function commonly called by the game code for moving sectors in X and Y axes (but not Z) during events such as earthquakes, rotating sectors, swinging doors and escalators.&lt;br /&gt;
&lt;br /&gt;
The sprite ID and it&#039;s xvel and yvel will determine the new x-y and the rotation angle can be accessed through [[EVENT_MOVESECTOR]].&lt;br /&gt;
&lt;br /&gt;
Source code says that sprite&#039;s T1, T2 and T3 are used, where T2 is originIdx, T3 for rotateAngle but nothing for T1.&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Sectclearinterpolation&amp;diff=14941</id>
		<title>Sectclearinterpolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Sectclearinterpolation&amp;diff=14941"/>
		<updated>2025-07-05T15:08:29Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;sectclearinterpolation&amp;#039;&amp;#039;&amp;#039; &amp;lt;sectnum&amp;gt;  This will remove interpolation from the sector&amp;#039;s movement, reverting the updates to the native 30Hz rate.  Useful for few edge cases where removing hardcoded or otherwise CON enabled interpolation is desirable, such as instant snap movements from explosions  A good example would be creating the illusion of continuous motion like with escalator effect, which currently looks broken as the released version incorrectly applies interpol...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;sectclearinterpolation&#039;&#039;&#039; &amp;lt;sectnum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will remove interpolation from the sector&#039;s movement, reverting the updates to the native 30Hz rate.&lt;br /&gt;
&lt;br /&gt;
Useful for few edge cases where removing hardcoded or otherwise CON enabled interpolation is desirable, such as instant snap movements from explosions&lt;br /&gt;
&lt;br /&gt;
A good example would be creating the illusion of continuous motion like with escalator effect, which currently looks broken as the released version incorrectly applies interpolation to those.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
| &amp;lt;sectnum&amp;gt; || Number of the sector.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also: [[sectsetinterpolation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Sectsetinterpolation&amp;diff=14940</id>
		<title>Sectsetinterpolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Sectsetinterpolation&amp;diff=14940"/>
		<updated>2025-07-05T14:58:25Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;sectsetinterpolation&#039;&#039;&#039; &amp;lt;sectnum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applies interpolation on the movement of a specific sector.&lt;br /&gt;
Useful for smoothing sector movement executed via CON, typically by moving its wallpoints using [[dragpoint]].&lt;br /&gt;
&lt;br /&gt;
Sector coordinates update every 30 tics, which will look jittery by default. This command as the name suggests will enable interpolation of these updates.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
| &amp;lt;sectnum&amp;gt; || Number of the sector.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also: [[sectclearinterpolation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Gettiledata&amp;diff=14939</id>
		<title>Gettiledata</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Gettiledata&amp;diff=14939"/>
		<updated>2025-07-05T14:55:40Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;gettiledata&#039;&#039;&#039;[&amp;lt;id&amp;gt;].[[Members of the tiledata structure|&amp;lt;tiledata member&amp;gt;]] &amp;lt;variable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allows quick access to tiledata[] struct members.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  gettiledata[THISACTOR].gameflags temp&lt;br /&gt;
  or temp SFLAG_BADGUYSTAYPUT&lt;br /&gt;
  settiledata[THISACTOR].gameflags temp&lt;br /&gt;
&lt;br /&gt;
See also: [[settiledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Structure_access]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Settiledata&amp;diff=14938</id>
		<title>Settiledata</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Settiledata&amp;diff=14938"/>
		<updated>2025-07-05T14:55:26Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;settiledata&#039;&#039;&#039;[&amp;lt;id&amp;gt;].[[Members of the tiledata structure|&amp;lt;tiledata member&amp;gt;]] &amp;lt;variable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allows quick access to tiledata[] struct members.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  gettiledata[THISACTOR].gameflags temp&lt;br /&gt;
  or temp SFLAG_BADGUYSTAYPUT&lt;br /&gt;
  settiledata[THISACTOR].gameflags temp&lt;br /&gt;
&lt;br /&gt;
See also: [[gettiledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Structure_access]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Settiledata&amp;diff=14937</id>
		<title>Settiledata</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Settiledata&amp;diff=14937"/>
		<updated>2025-07-05T14:55:10Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;settiledata&amp;#039;&amp;#039;&amp;#039;[&amp;lt;id&amp;gt;].&amp;lt;tiledata member&amp;gt;  Allows quick access to tiledata[] struct members.  Example:    gettiledata[THISACTOR].gameflags temp   or temp SFLAG_BADGUYSTAYPUT   settiledata[THISACTOR].gameflags temp  See also: gettiledata  Category:EDuke32 specific commands Category:Structure_access&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;settiledata&#039;&#039;&#039;[&amp;lt;id&amp;gt;].[[Members of the tiledata structure|&amp;lt;tiledata member&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Allows quick access to tiledata[] struct members.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  gettiledata[THISACTOR].gameflags temp&lt;br /&gt;
  or temp SFLAG_BADGUYSTAYPUT&lt;br /&gt;
  settiledata[THISACTOR].gameflags temp&lt;br /&gt;
&lt;br /&gt;
See also: [[gettiledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Structure_access]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Gettiledata&amp;diff=14936</id>
		<title>Gettiledata</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Gettiledata&amp;diff=14936"/>
		<updated>2025-07-05T14:54:55Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;gettiledata&amp;#039;&amp;#039;&amp;#039;[&amp;lt;id&amp;gt;].&amp;lt;tiledata member&amp;gt;  Allows quick access to tiledata[] struct members.  Example:    gettiledata[THISACTOR].gameflags temp   or temp SFLAG_BADGUYSTAYPUT   settiledata[THISACTOR].gameflags temp  See also: settiledata  Category:EDuke32 specific commands Category:Structure_access&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;gettiledata&#039;&#039;&#039;[&amp;lt;id&amp;gt;].[[Members of the tiledata structure|&amp;lt;tiledata member&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Allows quick access to tiledata[] struct members.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  gettiledata[THISACTOR].gameflags temp&lt;br /&gt;
  or temp SFLAG_BADGUYSTAYPUT&lt;br /&gt;
  settiledata[THISACTOR].gameflags temp&lt;br /&gt;
&lt;br /&gt;
See also: [[settiledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Structure_access]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Swaparrays&amp;diff=14935</id>
		<title>Swaparrays</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Swaparrays&amp;diff=14935"/>
		<updated>2025-07-05T14:40:50Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;swaparrays&amp;#039;&amp;#039;&amp;#039; &amp;lt;array name #1&amp;gt; &amp;lt;array name #2&amp;gt;  Swaps the contents and sizing of two existing gamearray entries.  Category:EDuke32 specific commands Category:Gamearray manipulation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;swaparrays&#039;&#039;&#039; &amp;lt;array name #1&amp;gt; &amp;lt;array name #2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Swaps the contents and sizing of two existing [[gamearray]] entries.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Gamearray manipulation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=EVENT_OPERATEACTIVATORS&amp;diff=14934</id>
		<title>EVENT OPERATEACTIVATORS</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=EVENT_OPERATEACTIVATORS&amp;diff=14934"/>
		<updated>2025-07-03T21:07:12Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: Created page with &amp;quot;{{EventTable|1=EVENT_OPERATEACTIVATORS|2=player who operated|3=current sprite|4=1 value}} &amp;#039;&amp;#039;&amp;#039;EVENT_OPERATEACTIVATORS&amp;#039;&amp;#039;&amp;#039; is a Game Event.  This event is triggered for each STAT_ACTIVATOR sprite with a matching lotag when OperateActivators() is called.  In practice, this applies to Buttons, Touchplates, two-way trains and the CON command Operateactivators  THISACTOR will be set to the current matching [[statnum|STAT_ACTIVATOR]...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{EventTable|1=EVENT_OPERATEACTIVATORS|2=player who operated|3=current sprite|4=1 value}}&lt;br /&gt;
&#039;&#039;&#039;EVENT_OPERATEACTIVATORS&#039;&#039;&#039; is a [[EDuke32_event_list|Game Event]].&lt;br /&gt;
&lt;br /&gt;
This [[event]] is triggered for each [[statnum|STAT_ACTIVATOR]] sprite with a matching lotag when OperateActivators() is called.&lt;br /&gt;
&lt;br /&gt;
In practice, this applies to Buttons, Touchplates, two-way trains and the CON command [[Operateactivators]]&lt;br /&gt;
&lt;br /&gt;
[[THISACTOR]] will be set to the current matching [[statnum|STAT_ACTIVATOR]] spriteNum and from there it&#039;s possible to do further matching.&lt;br /&gt;
&lt;br /&gt;
This code runs just before the actual Activator &amp;amp; Activatorlocked sprites get checked so it&#039;s possible to write your additional logic that modifies their normal behavior&lt;br /&gt;
&lt;br /&gt;
Setting [[RETURN]] as -1 to cancel the remaining hardcoded behavior for Activator, Activatorlocked, underwater SE18/31/32/36 special cases and OperateSectors() call. Respawns will still be triggered regardless.&lt;br /&gt;
&lt;br /&gt;
Note: This does not handle masterswitches as they are [[statnum|STAT_STANDABLE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Event_list&amp;diff=14933</id>
		<title>Event list</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Event_list&amp;diff=14933"/>
		<updated>2025-07-03T20:39:45Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{EDuke32 Intro}}&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
This is a list of every event in the current release of EDuke32.&lt;br /&gt;
&lt;br /&gt;
All [[events]] are accessed using the [[onevent]] and [[appendevent]] commands.&lt;br /&gt;
&lt;br /&gt;
See also: [[:Category:Event manipulation|Event Manipulation]].&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;1%&amp;quot; nowrap=&amp;quot;nowrap&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; border-left: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; [[unsynchronized events|Unsynchronized events]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; may recurse&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt; no current player number set&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;[4]&amp;lt;/sup&amp;gt; no THISACTOR set&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;[5]&amp;lt;/sup&amp;gt; eduke32 standalone build only&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt; executes at framerate&lt;br /&gt;
|}&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
Misc events&lt;br /&gt;
*[[EVENT_ACTIVATECHEAT]]&amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CAPIR]]&amp;lt;sup&amp;gt;[1][3][5]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETBOOT]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETFIRSTAID]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETHEAT]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETHOLODUKE]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETJETPACK]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETSCUBA]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETSHIELD]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_CHEATGETSTEROIDS]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_ENDLEVELSCREEN]]&lt;br /&gt;
*[[EVENT_EXITGAMESCREEN]]&lt;br /&gt;
*[[EVENT_EXITPROGRAMSCREEN]]&lt;br /&gt;
*[[EVENT_INIT]]&amp;lt;sup&amp;gt;[1][3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_INITCOMPLETE]]&amp;lt;sup&amp;gt;[1][3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_LOADGAME]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_MAINMENUSCREEN]]&lt;br /&gt;
*[[EVENT_NEWGAME]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_NEWGAMESCREEN]]&lt;br /&gt;
*[[EVENT_POSTSAVEGAME]]&lt;br /&gt;
*[[EVENT_PRELOADGAME]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_SAVEGAME]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_SETDEFAULTS]]&amp;lt;sup&amp;gt;[1][3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_VALIDATESTART]]&lt;br /&gt;
&lt;br /&gt;
Screen drawing events (in-game)&lt;br /&gt;
*[[EVENT_DISPLAYROOMS]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYROOMSCAMERA]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYROOMSCAMERATILE]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYROOMSEND]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_RESETGOTPICS]]&amp;lt;sup&amp;gt;[1][3][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Screen drawing events (misc)&lt;br /&gt;
*[[EVENT_DISPLAYEND]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYREST]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYSTART]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_UPDATESCREENAREA]]&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unused/Removed&lt;br /&gt;
*[[EVENT_FAKEDOMOVETHINGS]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_ANIMATEALLSPRITES]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; border-left: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
Screen drawing events (menus)&lt;br /&gt;
*[[EVENT_CHANGEMENU]]&amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYCURSOR]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYINACTIVEMENU]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYINACTIVEMENUREST]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYMENU]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYMENUREST]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_GETBONUSTILE]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_GETMENUTILE]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_MENUCURSORLEFT]]&amp;lt;sup&amp;gt;[1][4][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_MENUCURSORRIGHT]]&amp;lt;sup&amp;gt;[1][4][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_MENUCURSORSHADE]]&amp;lt;sup&amp;gt;[1][4][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_MENUSHADESELECTED]]&amp;lt;sup&amp;gt;[1][4][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_NEWGAMECUSTOM]]&amp;lt;sup&amp;gt;[1][4]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Screen drawing events (special screens and cutscenes)&lt;br /&gt;
*[[EVENT_CUTSCENE]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYBONUSSCREEN]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYLOADINGSCREEN]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_GETLOADTILE]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_LOGO]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_PRECUTSCENE]]&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_SCREEN]]&amp;lt;sup&amp;gt;[1][2][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_SKIPCUTSCENE]]&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Screen drawing events (HUD)&lt;br /&gt;
*[[EVENT_DISPLAYBORDER]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYCROSSHAIR]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYLEVELSTATS]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYOVERHEADMAPPLAYER]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYOVERHEADMAPTEXT]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYPOINTER]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYSBAR]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Screen drawing events (player body)&lt;br /&gt;
*[[EVENT_DISPLAYACCESS]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYCAMERAOSD]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYFIST]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYKNEE]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYKNUCKLES]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYSCUBA]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYSPIT]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYTIP]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DISPLAYWEAPON]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_DRAWWEAPON]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; border-left: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
Actor controlling events&lt;br /&gt;
*[[EVENT_ANIMATESPRITES]]&amp;lt;sup&amp;gt;[1][6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_EGS]]&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_GAME]]&lt;br /&gt;
*[[EVENT_KILLIT]]&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_LOADACTOR]]&amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_PREACTORDAMAGE]]&lt;br /&gt;
*[[EVENT_PREGAME]]&lt;br /&gt;
*[[EVENT_RECOGSOUND]]&lt;br /&gt;
*[[EVENT_SPAWN]]&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sound-based events&lt;br /&gt;
*[[EVENT_CONTINUELEVELMUSICSLOT]]&lt;br /&gt;
*[[EVENT_PLAYLEVELMUSICSLOT]]&lt;br /&gt;
*[[EVENT_OPENMENUSOUND]]&lt;br /&gt;
*[[EVENT_SOUND]]&amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Global events&lt;br /&gt;
*[[EVENT_DAMAGECEILING]]&lt;br /&gt;
*[[EVENT_DAMAGEFLOOR]]&lt;br /&gt;
*[[EVENT_DAMAGEHPLANE]]&lt;br /&gt;
*[[EVENT_DAMAGESPRITE]]&lt;br /&gt;
*[[EVENT_DAMAGEWALL]]&lt;br /&gt;
*[[EVENT_ENTERLEVEL]]&lt;br /&gt;
*[[EVENT_MOVEEFFECTORS]]&lt;br /&gt;
*[[EVENT_MOVESECTOR]]&lt;br /&gt;
*[[EVENT_OPERATEACTIVATORS]]&lt;br /&gt;
*[[EVENT_POSTDAMAGESPRITE]]&lt;br /&gt;
*[[EVENT_PRELEVEL]]&lt;br /&gt;
*[[EVENT_PREWORLD]]&lt;br /&gt;
*[[EVENT_WORLD]]&lt;br /&gt;
&lt;br /&gt;
Player controlling events&lt;br /&gt;
*[[EVENT_CHANGEWEAPON]]&lt;br /&gt;
*[[EVENT_CHECKFLOORDAMAGE]]&lt;br /&gt;
*[[EVENT_CHECKTOUCHDAMAGE]]&lt;br /&gt;
*[[EVENT_DOFIRE]]&lt;br /&gt;
*[[EVENT_GETAUTOAIMANGLE]]&lt;br /&gt;
*[[EVENT_GETSHOTRANGE]]&lt;br /&gt;
*[[EVENT_INCURDAMAGE]]&lt;br /&gt;
*[[EVENT_POSTUPDATEANGLES]]&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_PREUPDATEANGLES]]&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[EVENT_RESETINVENTORY]]&lt;br /&gt;
*[[EVENT_RESETPLAYER]]&lt;br /&gt;
*[[EVENT_RESETWEAPONS]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
Player input-based events&lt;br /&gt;
*[[EVENT_AIMDOWN]]&lt;br /&gt;
*[[EVENT_AIMUP]]&lt;br /&gt;
*[[EVENT_ALTFIRE]]&lt;br /&gt;
*[[EVENT_ALTWEAPON]]&lt;br /&gt;
*[[EVENT_CROUCH]]&lt;br /&gt;
*[[EVENT_FIRE]]&lt;br /&gt;
*[[EVENT_FIREWEAPON]]&lt;br /&gt;
*[[EVENT_HOLODUKEOFF]]&lt;br /&gt;
*[[EVENT_HOLODUKEON]]&lt;br /&gt;
*[[EVENT_HOLSTER]]&lt;br /&gt;
*[[EVENT_INVENTORY]]&lt;br /&gt;
*[[EVENT_INVENTORYLEFT]]&lt;br /&gt;
*[[EVENT_INVENTORYRIGHT]]&lt;br /&gt;
*[[EVENT_JUMP]]&lt;br /&gt;
*[[EVENT_LASTWEAPON]]&lt;br /&gt;
*[[EVENT_LOOKDOWN]]&lt;br /&gt;
*[[EVENT_LOOKLEFT]]&lt;br /&gt;
*[[EVENT_LOOKRIGHT]]&lt;br /&gt;
*[[EVENT_LOOKUP]]&lt;br /&gt;
*[[EVENT_MOVEBACKWARD]]&lt;br /&gt;
*[[EVENT_MOVEFORWARD]]&lt;br /&gt;
*[[EVENT_NEXTWEAPON]]&lt;br /&gt;
*[[EVENT_POSTWEAPONSHOOT]]&lt;br /&gt;
*[[EVENT_PRESSEDFIRE]]&lt;br /&gt;
*[[EVENT_PREVIOUSWEAPON]]&lt;br /&gt;
*[[EVENT_PREWEAPONSHOOT]]&lt;br /&gt;
*[[EVENT_PROCESSINPUT]]&lt;br /&gt;
*[[EVENT_QUICKKICK]]&lt;br /&gt;
*[[EVENT_RETURNTOCENTER]]&lt;br /&gt;
*[[EVENT_SELECTWEAPON]]&lt;br /&gt;
*[[EVENT_SOARDOWN]]&lt;br /&gt;
*[[EVENT_SOARUP]]&lt;br /&gt;
*[[EVENT_STRAFELEFT]]&lt;br /&gt;
*[[EVENT_STRAFERIGHT]]&lt;br /&gt;
*[[EVENT_SWIMDOWN]]&lt;br /&gt;
*[[EVENT_SWIMUP]]&lt;br /&gt;
*[[EVENT_TURNAROUND]]&lt;br /&gt;
*[[EVENT_TURNLEFT]]&lt;br /&gt;
*[[EVENT_TURNRIGHT]]&lt;br /&gt;
*[[EVENT_USE]]&lt;br /&gt;
*[[EVENT_USEJETPACK]]&lt;br /&gt;
*[[EVENT_USEMEDKIT]]&lt;br /&gt;
*[[EVENT_USENIGHTVISION]]&lt;br /&gt;
*[[EVENT_USESTEROIDS]]&lt;br /&gt;
*[[EVENT_WEAPKEY1]]&lt;br /&gt;
*[[EVENT_WEAPKEY10]]&lt;br /&gt;
*[[EVENT_WEAPKEY2]]&lt;br /&gt;
*[[EVENT_WEAPKEY3]]&lt;br /&gt;
*[[EVENT_WEAPKEY4]]&lt;br /&gt;
*[[EVENT_WEAPKEY5]]&lt;br /&gt;
*[[EVENT_WEAPKEY6]]&lt;br /&gt;
*[[EVENT_WEAPKEY7]]&lt;br /&gt;
*[[EVENT_WEAPKEY8]]&lt;br /&gt;
*[[EVENT_WEAPKEY9]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Event manipulation]]&lt;br /&gt;
[[Category:Scripting documentation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=M32_script_variables&amp;diff=14932</id>
		<title>M32 script variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=M32_script_variables&amp;diff=14932"/>
		<updated>2025-07-02T17:02:04Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Build Intro}}&lt;br /&gt;
{{M32Script Intro}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is a list of events, variables, arrays, constants and keys accessible in Mapster32-script.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
*EVENT_ENTER3DMODE&lt;br /&gt;
triggered upon entering 3D mode.&lt;br /&gt;
*EVENT_ANALYZESPRITES&lt;br /&gt;
continuously triggered event in 3D mode, used to modify the properties of drawn sprites for the current frame.&lt;br /&gt;
*EVENT_INSERTSPRITE2D&lt;br /&gt;
triggered after a sprite is inserted in 2D mode, sets the current sprite.&lt;br /&gt;
*EVENT_INSERTSPRITE3D&lt;br /&gt;
triggered after a sprite is inserted in 3D mode, sets the current sprite.&lt;br /&gt;
*EVENT_DRAW2DSCREEN&lt;br /&gt;
triggered after the screen has been drawn in 2D mode, can be used to implement additional drawing.&lt;br /&gt;
*EVENT_DRAW3DSCREEN&lt;br /&gt;
triggered after the scene, but before the overlays have been drawn in 3D mode.&lt;br /&gt;
*EVENT_KEYS2D&lt;br /&gt;
continuously triggered event in 2D mode after most key checks have been made.&lt;br /&gt;
*EVENT_KEYS3D&lt;br /&gt;
continuously triggered event in 3D mode after most key checks have been made.&lt;br /&gt;
*EVENT_PREKEYS2D&lt;br /&gt;
continuously triggered event in 2D mode before most key checks have been made.&lt;br /&gt;
*EVENT_PREKEYS3D&lt;br /&gt;
continuously triggered event in 3D mode before most key checks have been made.&lt;br /&gt;
*EVENT_LINKTAGS&lt;br /&gt;
triggered by the link-tagging system to query whether the tag of a particular sprite (which is the [[Mapster32 Scripting|current sprite]] in this event) has a linking meaning.  It is supposed to return in RETURN a bit-field of ORed values:&amp;lt;br/&amp;gt;&lt;br /&gt;
1: lotag has linking semantics&amp;lt;br/&amp;gt;&lt;br /&gt;
2: hitag&amp;lt;br/&amp;gt;&lt;br /&gt;
4: extra&amp;lt;br/&amp;gt;&lt;br /&gt;
8: xvel&amp;lt;br/&amp;gt;&lt;br /&gt;
16: yvel&amp;lt;br/&amp;gt;&lt;br /&gt;
32: zvel&amp;lt;br/&amp;gt;&lt;br /&gt;
64: owner&amp;lt;br/&amp;gt;&lt;br /&gt;
*EVENT_KEYPRESS&lt;br /&gt;
called when a key is pressed or released.&lt;br /&gt;
*EVENT_PREDRAW3DSCREEN&lt;br /&gt;
triggered before the scene has been drawn in 3D mode.&lt;br /&gt;
*EVENT_LOADMAP&lt;br /&gt;
called after a map is loaded, including blank map on startup.&lt;br /&gt;
*EVENT_SAVEMAP&lt;br /&gt;
called after a map is saved.&lt;br /&gt;
*EVENT_PRELOADMAP&lt;br /&gt;
called before a map is loaded, including blank map on startup.&lt;br /&gt;
*EVENT_PRESAVEMAP&lt;br /&gt;
called before a map is saved.&lt;br /&gt;
*EVENT_PREDRAW2DSCREEN&lt;br /&gt;
triggered before the screen has been drawn in 2D mode, can be used to implement additional drawing.&lt;br /&gt;
*EVENT_GETNUMBER&lt;br /&gt;
called when any of the getnumber dialog boxes is open, used to allow drawing. RETURN contains the value being typed.&lt;br /&gt;
&lt;br /&gt;
The PRE*-versions of the key handling events are recommended when you want to override default keys. However, careless use may lead to a binding of a key to multiple functions. Therefore the _KEYS(2|3)D events will activate after most hardcoded key checks, making overriding keys impossible.&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
Legend:&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;write-enabled variable&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====variables used or set by various commands=====&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;RETURN&#039;&#039;&#039;&#039;&#039; (also used in [[Sort]])&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;LOTAG&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;HITAG&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TEXTURE&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;I&#039;&#039; (capital i; current sprite)&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;DOSCRSHOT&#039;&#039;&#039;&#039;&#039;, if set to non-zero, schedules saving a screenshot between the next scene drawing and EVENT_DRAW3DSCREEN&lt;br /&gt;
&lt;br /&gt;
=====video variables=====&lt;br /&gt;
*&#039;&#039;xdim&#039;&#039;&lt;br /&gt;
*&#039;&#039;ydim&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowx1&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowx2&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowy1&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowy2&#039;&#039;&lt;br /&gt;
*&#039;&#039;rendmode&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====misc. variables=====&lt;br /&gt;
*&#039;&#039;totalclock&#039;&#039; (incremented by 120 per second)&lt;br /&gt;
See [[Setaspect]] for the following two variables&lt;br /&gt;
*&#039;&#039;viewingrange&#039;&#039;&lt;br /&gt;
*&#039;&#039;yxaspect&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;randomseed&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;numwalls&#039;&#039;&lt;br /&gt;
*&#039;&#039;numsectors&#039;&#039;&lt;br /&gt;
*&#039;&#039;numsprites&#039;&#039;&lt;br /&gt;
*&#039;&#039;numtiles&#039;&#039;&lt;br /&gt;
variables used in &#039;&#039;&#039;sort&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;SV1&#039;&#039;&lt;br /&gt;
*&#039;&#039;SV2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
number of drawn sprites (valid in EVENT_ANALYZESPRITES)&lt;br /&gt;
*&#039;&#039;spritesortcnt&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====position and orientation of &amp;quot;mapper arrow&amp;quot;=====&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;posx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;posy&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;posz&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;ang&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;horiz&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;cursectnum&#039;&#039; (use &#039;&#039;&#039;updatecursectnum&#039;&#039;&#039; after changing position)&lt;br /&gt;
&lt;br /&gt;
=====&amp;quot;aiming&amp;quot; and selection variables=====&lt;br /&gt;
mouse pointer screen coordinates&lt;br /&gt;
*&#039;&#039;searchx&#039;&#039;&lt;br /&gt;
*&#039;&#039;searchy&#039;&#039;&lt;br /&gt;
Mouse &amp;quot;aiming&amp;quot; variables in 3D mode.&lt;br /&gt;
searchstat describes what is being aimed at:&lt;br /&gt;
0:wall  1:ceiling  2:floor  3:sprite  4:masked wall&lt;br /&gt;
*&#039;&#039;searchstat&#039;&#039;&lt;br /&gt;
&#039;&#039;searchwall&#039;&#039; is the index of the aimed at sprite if &#039;&#039;searchstat&#039;&#039; equals 3, the index of the aimed at wall if &#039;&#039;searchstat&#039;&#039; equals 0 or 4, and the index of the wall that intersects the ray from the current position to the aimed at point (as seen from above) otherwise.&lt;br /&gt;
*&#039;&#039;searchwall&#039;&#039;&lt;br /&gt;
*&#039;&#039;searchsector&#039;&#039;&lt;br /&gt;
&#039;&#039;searchbottomwall&#039;&#039; is only valid if &#039;&#039;searchstat&#039;&#039; equals 0 and differs from &#039;&#039;searchwall&#039;&#039; only if the &amp;quot;swap bottom wall&amp;quot; (key &#039;2&#039;) is set.&lt;br /&gt;
*&#039;&#039;searchbottomwall&#039;&#039;&lt;br /&gt;
&#039;&#039;pointhighlight&#039;&#039; holds the current highlighted (blinking) point&lt;br /&gt;
or sprite in 2D mode.&lt;br /&gt;
If &#039;&#039;pointhighlight&#039;&#039; is less than 16384, then its value&lt;br /&gt;
is the wall index of the highlighted point (A wall in BUILD&lt;br /&gt;
actually only holds coordinates for one point; the wall[].point2&lt;br /&gt;
is the other end point of the wall). Otherwise, &#039;&#039;pointhighlight&#039;&#039;-16384&lt;br /&gt;
is a sprite index of the currently highlighted sprite.&lt;br /&gt;
*&#039;&#039;pointhighlight&#039;&#039;&lt;br /&gt;
*&#039;&#039;linehighlight&#039;&#039;&lt;br /&gt;
&#039;&#039;highlightcnt&#039;&#039; is the number of currently highlighted (semi-permanently, with RSHIFT) points and sprites.&lt;br /&gt;
*&#039;&#039;highlightcnt&#039;&#039;&lt;br /&gt;
&#039;&#039;highlightsectorcnt&#039;&#039; is the number of currently highlighted (permanently, with RALT) sectors.&lt;br /&gt;
*&#039;&#039;highlightsectorcnt&#039;&#039;&lt;br /&gt;
In 2D mode, &#039;&#039;mousxplc&#039;&#039; and &#039;&#039;mousyplc&#039;&#039; are the BUILD coordinates under the current mouse crosshair position.&lt;br /&gt;
*&#039;&#039;mousxplc&#039;&#039;&lt;br /&gt;
*&#039;&#039;mousyplc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====clipboard contents=====&lt;br /&gt;
*&#039;&#039;temppicnum&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempcstat&#039;&#039;&lt;br /&gt;
*&#039;&#039;templotag&#039;&#039;&lt;br /&gt;
*&#039;&#039;temphitag&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempextra&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempshade&#039;&#039;&lt;br /&gt;
*&#039;&#039;temppal&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempvis&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempxrepeat&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempyrepeat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====start position=====&lt;br /&gt;
*&#039;&#039;startposx&#039;&#039;&lt;br /&gt;
*&#039;&#039;startposy&#039;&#039;&lt;br /&gt;
*&#039;&#039;startposz&#039;&#039;&lt;br /&gt;
*&#039;&#039;startang&#039;&#039;&lt;br /&gt;
*&#039;&#039;startsectnum&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====variables useful for 2D drawing=====&lt;br /&gt;
A &#039;&#039;zoom&#039;&#039; of 16384 corresponds to a scale of one pixel per BUILD unit.&lt;br /&gt;
*&#039;&#039;zoom&#039;&#039;&lt;br /&gt;
&#039;&#039;drawlinepat&#039;&#039; is  the stroke pattern for the 2D drawing function, e.g. 0xffffffff (-1) is a continuous line, 0x0000ffff is a broken line (long intervals) and 0x55555555 is a dotted line.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;drawlinepat&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;halfxdim16&#039;&#039;&lt;br /&gt;
*&#039;&#039;midydim16&#039;&#039;&lt;br /&gt;
*&#039;&#039;ydim16&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Arrays==&lt;br /&gt;
&#039;&#039;&#039;Legend&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;X&#039;&#039;&#039;: deprecated/do not use (yet)&lt;br /&gt;
&lt;br /&gt;
The following is a listing of all accessible arrays along with their size in brackets. Where the size is variable, it indicates the maximum allowable index plus 1.&amp;lt;br&amp;gt;&lt;br /&gt;
All of the builtin arrays are read-only.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;highlight&#039;&#039; is an array of highlighted points/sprites. Its elements follow the same convention as the `pointhighlight&#039; variable (see above).&lt;br /&gt;
*highlight[&#039;&#039;highlightcnt&#039;&#039;]&lt;br /&gt;
&#039;&#039;highlightsector&#039;&#039; is an array of highlighted sectors.&lt;br /&gt;
*highlightsector[&#039;&#039;highlightsectorcnt&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
These are the (head|next|prev)sprite(stat|sect) arrays.&lt;br /&gt;
*hsect[MAXSECTORS+1]&lt;br /&gt;
*nsect[MAXSPRITES]&lt;br /&gt;
*psect[MAXSPRITES]&lt;br /&gt;
*hstat[MAXSTATUS+1]&lt;br /&gt;
*nstat[MAXSPRITES]&lt;br /&gt;
*pstat[MAXSPRITES]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;tilesiz&#039;&#039;(&#039;&#039;x&#039;&#039;/&#039;&#039;y&#039;&#039;) arrays are indexed by tile numbers and hold the x/y dimensions&lt;br /&gt;
of the loaded tiles. If a tile doesn&#039;t exist, they will be 0.&lt;br /&gt;
*tilesizx[MAXTILES]&lt;br /&gt;
*tilesizy[MAXTILES]&lt;br /&gt;
&lt;br /&gt;
*show2dsector[(MAXSECTORS+7)&amp;gt;&amp;gt;3] &#039;&#039;&#039;X&#039;&#039;&#039; (doesn&#039;t appear to contain highlighted sectors)&lt;br /&gt;
*show2dwall[(MAXWALLS+7)&amp;gt;&amp;gt;3]&lt;br /&gt;
&#039;&#039;show2dsprite&#039;&#039; is a bitmap of which sprites are highlighted with &#039;&#039;&#039;RSHIFT&#039;&#039;&#039;.&lt;br /&gt;
*show2dsprite[(MAXSPRITES+7)&amp;gt;&amp;gt;3]&lt;br /&gt;
&lt;br /&gt;
*keystatus[256] Indexed by scancodes (= KEY_?? constants)&lt;br /&gt;
*alphakeys[27] Contains scancodes of SPACE ([0]) and A through Z ([1] - [26]) keys.&lt;br /&gt;
*numberkeys[10] Contains scancodes of &#039;&#039;&#039;0&#039;&#039;&#039; to &#039;&#039;&#039;9&#039;&#039;&#039; keys.&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
*CLIPMASK0&lt;br /&gt;
*CLIPMASK1&lt;br /&gt;
          &lt;br /&gt;
*MAXSPRITES&lt;br /&gt;
*MAXSECTORS&lt;br /&gt;
*MAXWALLS&lt;br /&gt;
*MAXTILES&lt;br /&gt;
MAXSTATUS is useful for checking whether a sprite number is valid (i.e, whether&lt;br /&gt;
a sprite with the given sprite number is in the map). This is the case if&lt;br /&gt;
sprite[spritenum].statnum is lower than MAXSTATUS. It is needed because sprite&lt;br /&gt;
numbers need not be contiguous during a session.&lt;br /&gt;
*MAXSTATUS&lt;br /&gt;
*MAXSOUNDS&lt;br /&gt;
*NO&lt;br /&gt;
*COLOR_WHITE (used with 3D text commands)&lt;br /&gt;
&lt;br /&gt;
==Keys==&lt;br /&gt;
*KEY_SPACE, KEY_A through KEY_Z (in alphakeys[])&lt;br /&gt;
*KEY_0 through KEY_9 (in numberkeys[])&lt;br /&gt;
*KEY_ENTER, KEY_BS, KEY_TAB&lt;br /&gt;
*KEY_DASH, KEY_EQUAL, KEY_LBRACK, KEY_RBRACK, KEY_SEMI, KEY_QUOTE, KEY_BQUOTE, KEY_BSLASH, KEY_COMMA, KEY_PERIOD, KEY_SLASH&lt;br /&gt;
*KEY_LALT, KEY_LCTRL, KEY_LSHIFT, KEY_RALT, KEY_RCTRL, KEY_RSHIFT&lt;br /&gt;
Keypad keys:&lt;br /&gt;
*KEY_gDEL, KEY_gDOWN, KEY_gEND, KEY_gHOME, KEY_gINS, KEY_gKP5, KEY_gLEFT, KEY_gMINUS, KEY_gPGDN, KEY_gPGUP, KEY_gPLUS, KEY_gRIGHT, KEY_gSLASH, KEY_gSTAR, KEY_gUP&lt;br /&gt;
*KEY_HOME, KEY_UP, KEY_PGUP, KEY_LEFT, KEY_RIGHT, KEY_END , KEY_DOWN, KEY_PGDN, KEY_INSERT, KEY_DELETE&lt;br /&gt;
Some aliases for keypad keys:&lt;br /&gt;
*KEY_KP0 through KEY_KP9, KEY_KPCOMMA&lt;br /&gt;
&lt;br /&gt;
[[Category:Level editing documentation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=M32_script_variables&amp;diff=14931</id>
		<title>M32 script variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=M32_script_variables&amp;diff=14931"/>
		<updated>2025-07-02T17:00:50Z</updated>

		<summary type="html">&lt;p&gt;Oasiz: /* Events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Build Intro}}&lt;br /&gt;
{{M32Script Intro}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is a list of events, variables, arrays, constants and keys accessible in Mapster32-script.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
*EVENT_ENTER3DMODE&lt;br /&gt;
triggered upon entering 3D mode.&lt;br /&gt;
*EVENT_ANALYZESPRITES&lt;br /&gt;
continuously triggered event in 3D mode, used to modify the properties of drawn sprites for the current frame.&lt;br /&gt;
*EVENT_INSERTSPRITE2D&lt;br /&gt;
triggered after a sprite is inserted in 2D mode, sets the current sprite.&lt;br /&gt;
*EVENT_INSERTSPRITE3D&lt;br /&gt;
triggered after a sprite is inserted in 3D mode, sets the current sprite.&lt;br /&gt;
*EVENT_DRAW2DSCREEN&lt;br /&gt;
triggered after the screen has been drawn in 2D mode, can be used to implement additional drawing.&lt;br /&gt;
*EVENT_DRAW3DSCREEN&lt;br /&gt;
triggered after the scene, but before the overlays have been drawn in 3D mode.&lt;br /&gt;
*EVENT_KEYS2D&lt;br /&gt;
continuously triggered event in 2D mode after most key checks have been made.&lt;br /&gt;
*EVENT_KEYS3D&lt;br /&gt;
continuously triggered event in 3D mode after most key checks have been made.&lt;br /&gt;
*EVENT_PREKEYS2D&lt;br /&gt;
continuously triggered event in 2D mode before most key checks have been made.&lt;br /&gt;
*EVENT_PREKEYS3D&lt;br /&gt;
continuously triggered event in 3D mode before most key checks have been made.&lt;br /&gt;
*EVENT_LINKTAGS&lt;br /&gt;
triggered by the link-tagging system to query whether the tag of a particular sprite (which is the [[Mapster32 Scripting|current sprite]] in this event) has a linking meaning.  It is supposed to return in RETURN a bit-field of ORed values:&amp;lt;br/&amp;gt;&lt;br /&gt;
1: lotag has linking semantics&amp;lt;br/&amp;gt;&lt;br /&gt;
2: hitag&amp;lt;br/&amp;gt;&lt;br /&gt;
4: extra&amp;lt;br/&amp;gt;&lt;br /&gt;
8: xvel&amp;lt;br/&amp;gt;&lt;br /&gt;
16: yvel&amp;lt;br/&amp;gt;&lt;br /&gt;
32: zvel&amp;lt;br/&amp;gt;&lt;br /&gt;
64: owner&amp;lt;br/&amp;gt;&lt;br /&gt;
*EVENT_KEYPRESS&lt;br /&gt;
called when a key is pressed or released.&lt;br /&gt;
*EVENT_PREDRAW3DSCREEN&lt;br /&gt;
triggered before the scene has been drawn in 3D mode.&lt;br /&gt;
*EVENT_LOADMAP&lt;br /&gt;
called after a map is loaded, including blank map on startup.&lt;br /&gt;
*EVENT_SAVEMAP&lt;br /&gt;
called after a map is saved.&lt;br /&gt;
*EVENT_PRELOADMAP&lt;br /&gt;
called before a map is loaded, including blank map on startup.&lt;br /&gt;
*EVENT_PRESAVEMAP&lt;br /&gt;
called before a map is saved.&lt;br /&gt;
*EVENT_PREDRAW2DSCREEN&lt;br /&gt;
triggered before the screen has been drawn in 2D mode, can be used to implement additional drawing.&lt;br /&gt;
*EVENT_GETNUMBER&lt;br /&gt;
called when any of the getnumber dialog boxes is open, used to allow drawing. RETURN is the value being typed.&lt;br /&gt;
&lt;br /&gt;
The PRE*-versions of the key handling events are recommended when you want to override default keys. However, careless use may lead to a binding of a key to multiple functions. Therefore the _KEYS(2|3)D events will activate after most hardcoded key checks, making overriding keys impossible.&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
Legend:&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;write-enabled variable&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====variables used or set by various commands=====&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;RETURN&#039;&#039;&#039;&#039;&#039; (also used in [[Sort]])&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;LOTAG&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;HITAG&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TEXTURE&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;I&#039;&#039; (capital i; current sprite)&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;DOSCRSHOT&#039;&#039;&#039;&#039;&#039;, if set to non-zero, schedules saving a screenshot between the next scene drawing and EVENT_DRAW3DSCREEN&lt;br /&gt;
&lt;br /&gt;
=====video variables=====&lt;br /&gt;
*&#039;&#039;xdim&#039;&#039;&lt;br /&gt;
*&#039;&#039;ydim&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowx1&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowx2&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowy1&#039;&#039;&lt;br /&gt;
*&#039;&#039;windowy2&#039;&#039;&lt;br /&gt;
*&#039;&#039;rendmode&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====misc. variables=====&lt;br /&gt;
*&#039;&#039;totalclock&#039;&#039; (incremented by 120 per second)&lt;br /&gt;
See [[Setaspect]] for the following two variables&lt;br /&gt;
*&#039;&#039;viewingrange&#039;&#039;&lt;br /&gt;
*&#039;&#039;yxaspect&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;randomseed&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;numwalls&#039;&#039;&lt;br /&gt;
*&#039;&#039;numsectors&#039;&#039;&lt;br /&gt;
*&#039;&#039;numsprites&#039;&#039;&lt;br /&gt;
*&#039;&#039;numtiles&#039;&#039;&lt;br /&gt;
variables used in &#039;&#039;&#039;sort&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;SV1&#039;&#039;&lt;br /&gt;
*&#039;&#039;SV2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
number of drawn sprites (valid in EVENT_ANALYZESPRITES)&lt;br /&gt;
*&#039;&#039;spritesortcnt&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====position and orientation of &amp;quot;mapper arrow&amp;quot;=====&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;posx&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;posy&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;posz&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;ang&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;horiz&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;cursectnum&#039;&#039; (use &#039;&#039;&#039;updatecursectnum&#039;&#039;&#039; after changing position)&lt;br /&gt;
&lt;br /&gt;
=====&amp;quot;aiming&amp;quot; and selection variables=====&lt;br /&gt;
mouse pointer screen coordinates&lt;br /&gt;
*&#039;&#039;searchx&#039;&#039;&lt;br /&gt;
*&#039;&#039;searchy&#039;&#039;&lt;br /&gt;
Mouse &amp;quot;aiming&amp;quot; variables in 3D mode.&lt;br /&gt;
searchstat describes what is being aimed at:&lt;br /&gt;
0:wall  1:ceiling  2:floor  3:sprite  4:masked wall&lt;br /&gt;
*&#039;&#039;searchstat&#039;&#039;&lt;br /&gt;
&#039;&#039;searchwall&#039;&#039; is the index of the aimed at sprite if &#039;&#039;searchstat&#039;&#039; equals 3, the index of the aimed at wall if &#039;&#039;searchstat&#039;&#039; equals 0 or 4, and the index of the wall that intersects the ray from the current position to the aimed at point (as seen from above) otherwise.&lt;br /&gt;
*&#039;&#039;searchwall&#039;&#039;&lt;br /&gt;
*&#039;&#039;searchsector&#039;&#039;&lt;br /&gt;
&#039;&#039;searchbottomwall&#039;&#039; is only valid if &#039;&#039;searchstat&#039;&#039; equals 0 and differs from &#039;&#039;searchwall&#039;&#039; only if the &amp;quot;swap bottom wall&amp;quot; (key &#039;2&#039;) is set.&lt;br /&gt;
*&#039;&#039;searchbottomwall&#039;&#039;&lt;br /&gt;
&#039;&#039;pointhighlight&#039;&#039; holds the current highlighted (blinking) point&lt;br /&gt;
or sprite in 2D mode.&lt;br /&gt;
If &#039;&#039;pointhighlight&#039;&#039; is less than 16384, then its value&lt;br /&gt;
is the wall index of the highlighted point (A wall in BUILD&lt;br /&gt;
actually only holds coordinates for one point; the wall[].point2&lt;br /&gt;
is the other end point of the wall). Otherwise, &#039;&#039;pointhighlight&#039;&#039;-16384&lt;br /&gt;
is a sprite index of the currently highlighted sprite.&lt;br /&gt;
*&#039;&#039;pointhighlight&#039;&#039;&lt;br /&gt;
*&#039;&#039;linehighlight&#039;&#039;&lt;br /&gt;
&#039;&#039;highlightcnt&#039;&#039; is the number of currently highlighted (semi-permanently, with RSHIFT) points and sprites.&lt;br /&gt;
*&#039;&#039;highlightcnt&#039;&#039;&lt;br /&gt;
&#039;&#039;highlightsectorcnt&#039;&#039; is the number of currently highlighted (permanently, with RALT) sectors.&lt;br /&gt;
*&#039;&#039;highlightsectorcnt&#039;&#039;&lt;br /&gt;
In 2D mode, &#039;&#039;mousxplc&#039;&#039; and &#039;&#039;mousyplc&#039;&#039; are the BUILD coordinates under the current mouse crosshair position.&lt;br /&gt;
*&#039;&#039;mousxplc&#039;&#039;&lt;br /&gt;
*&#039;&#039;mousyplc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====clipboard contents=====&lt;br /&gt;
*&#039;&#039;temppicnum&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempcstat&#039;&#039;&lt;br /&gt;
*&#039;&#039;templotag&#039;&#039;&lt;br /&gt;
*&#039;&#039;temphitag&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempextra&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempshade&#039;&#039;&lt;br /&gt;
*&#039;&#039;temppal&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempvis&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempxrepeat&#039;&#039;&lt;br /&gt;
*&#039;&#039;tempyrepeat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====start position=====&lt;br /&gt;
*&#039;&#039;startposx&#039;&#039;&lt;br /&gt;
*&#039;&#039;startposy&#039;&#039;&lt;br /&gt;
*&#039;&#039;startposz&#039;&#039;&lt;br /&gt;
*&#039;&#039;startang&#039;&#039;&lt;br /&gt;
*&#039;&#039;startsectnum&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====variables useful for 2D drawing=====&lt;br /&gt;
A &#039;&#039;zoom&#039;&#039; of 16384 corresponds to a scale of one pixel per BUILD unit.&lt;br /&gt;
*&#039;&#039;zoom&#039;&#039;&lt;br /&gt;
&#039;&#039;drawlinepat&#039;&#039; is  the stroke pattern for the 2D drawing function, e.g. 0xffffffff (-1) is a continuous line, 0x0000ffff is a broken line (long intervals) and 0x55555555 is a dotted line.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;drawlinepat&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;halfxdim16&#039;&#039;&lt;br /&gt;
*&#039;&#039;midydim16&#039;&#039;&lt;br /&gt;
*&#039;&#039;ydim16&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Arrays==&lt;br /&gt;
&#039;&#039;&#039;Legend&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;X&#039;&#039;&#039;: deprecated/do not use (yet)&lt;br /&gt;
&lt;br /&gt;
The following is a listing of all accessible arrays along with their size in brackets. Where the size is variable, it indicates the maximum allowable index plus 1.&amp;lt;br&amp;gt;&lt;br /&gt;
All of the builtin arrays are read-only.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;highlight&#039;&#039; is an array of highlighted points/sprites. Its elements follow the same convention as the `pointhighlight&#039; variable (see above).&lt;br /&gt;
*highlight[&#039;&#039;highlightcnt&#039;&#039;]&lt;br /&gt;
&#039;&#039;highlightsector&#039;&#039; is an array of highlighted sectors.&lt;br /&gt;
*highlightsector[&#039;&#039;highlightsectorcnt&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
These are the (head|next|prev)sprite(stat|sect) arrays.&lt;br /&gt;
*hsect[MAXSECTORS+1]&lt;br /&gt;
*nsect[MAXSPRITES]&lt;br /&gt;
*psect[MAXSPRITES]&lt;br /&gt;
*hstat[MAXSTATUS+1]&lt;br /&gt;
*nstat[MAXSPRITES]&lt;br /&gt;
*pstat[MAXSPRITES]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;tilesiz&#039;&#039;(&#039;&#039;x&#039;&#039;/&#039;&#039;y&#039;&#039;) arrays are indexed by tile numbers and hold the x/y dimensions&lt;br /&gt;
of the loaded tiles. If a tile doesn&#039;t exist, they will be 0.&lt;br /&gt;
*tilesizx[MAXTILES]&lt;br /&gt;
*tilesizy[MAXTILES]&lt;br /&gt;
&lt;br /&gt;
*show2dsector[(MAXSECTORS+7)&amp;gt;&amp;gt;3] &#039;&#039;&#039;X&#039;&#039;&#039; (doesn&#039;t appear to contain highlighted sectors)&lt;br /&gt;
*show2dwall[(MAXWALLS+7)&amp;gt;&amp;gt;3]&lt;br /&gt;
&#039;&#039;show2dsprite&#039;&#039; is a bitmap of which sprites are highlighted with &#039;&#039;&#039;RSHIFT&#039;&#039;&#039;.&lt;br /&gt;
*show2dsprite[(MAXSPRITES+7)&amp;gt;&amp;gt;3]&lt;br /&gt;
&lt;br /&gt;
*keystatus[256] Indexed by scancodes (= KEY_?? constants)&lt;br /&gt;
*alphakeys[27] Contains scancodes of SPACE ([0]) and A through Z ([1] - [26]) keys.&lt;br /&gt;
*numberkeys[10] Contains scancodes of &#039;&#039;&#039;0&#039;&#039;&#039; to &#039;&#039;&#039;9&#039;&#039;&#039; keys.&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
*CLIPMASK0&lt;br /&gt;
*CLIPMASK1&lt;br /&gt;
          &lt;br /&gt;
*MAXSPRITES&lt;br /&gt;
*MAXSECTORS&lt;br /&gt;
*MAXWALLS&lt;br /&gt;
*MAXTILES&lt;br /&gt;
MAXSTATUS is useful for checking whether a sprite number is valid (i.e, whether&lt;br /&gt;
a sprite with the given sprite number is in the map). This is the case if&lt;br /&gt;
sprite[spritenum].statnum is lower than MAXSTATUS. It is needed because sprite&lt;br /&gt;
numbers need not be contiguous during a session.&lt;br /&gt;
*MAXSTATUS&lt;br /&gt;
*MAXSOUNDS&lt;br /&gt;
*NO&lt;br /&gt;
*COLOR_WHITE (used with 3D text commands)&lt;br /&gt;
&lt;br /&gt;
==Keys==&lt;br /&gt;
*KEY_SPACE, KEY_A through KEY_Z (in alphakeys[])&lt;br /&gt;
*KEY_0 through KEY_9 (in numberkeys[])&lt;br /&gt;
*KEY_ENTER, KEY_BS, KEY_TAB&lt;br /&gt;
*KEY_DASH, KEY_EQUAL, KEY_LBRACK, KEY_RBRACK, KEY_SEMI, KEY_QUOTE, KEY_BQUOTE, KEY_BSLASH, KEY_COMMA, KEY_PERIOD, KEY_SLASH&lt;br /&gt;
*KEY_LALT, KEY_LCTRL, KEY_LSHIFT, KEY_RALT, KEY_RCTRL, KEY_RSHIFT&lt;br /&gt;
Keypad keys:&lt;br /&gt;
*KEY_gDEL, KEY_gDOWN, KEY_gEND, KEY_gHOME, KEY_gINS, KEY_gKP5, KEY_gLEFT, KEY_gMINUS, KEY_gPGDN, KEY_gPGUP, KEY_gPLUS, KEY_gRIGHT, KEY_gSLASH, KEY_gSTAR, KEY_gUP&lt;br /&gt;
*KEY_HOME, KEY_UP, KEY_PGUP, KEY_LEFT, KEY_RIGHT, KEY_END , KEY_DOWN, KEY_PGDN, KEY_INSERT, KEY_DELETE&lt;br /&gt;
Some aliases for keypad keys:&lt;br /&gt;
*KEY_KP0 through KEY_KP9, KEY_KPCOMMA&lt;br /&gt;
&lt;br /&gt;
[[Category:Level editing documentation]]&lt;/div&gt;</summary>
		<author><name>Oasiz</name></author>
	</entry>
</feed>