<?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=Rob+Anybody</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=Rob+Anybody"/>
	<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/wiki/Special:Contributions/Rob_Anybody"/>
	<updated>2026-04-08T04:04:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0-alpha</generator>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Lineintersect&amp;diff=13970</id>
		<title>Lineintersect</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Lineintersect&amp;diff=13970"/>
		<updated>2020-08-10T07:03:51Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: second triplet is a point, not a vector&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;lineintersect&#039;&#039;&#039; &amp;lt;ox&amp;gt; &amp;lt;oy&amp;gt; &amp;lt;oz&amp;gt;  &amp;lt;dx&amp;gt; &amp;lt;dy&amp;gt; &amp;lt;dz&amp;gt;  &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt;  &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;  &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt; &amp;lt;ret&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Determines where a line defined by origin point &amp;lt;ox&amp;gt; &amp;lt;oy&amp;gt; &amp;lt;oz&amp;gt;&lt;br /&gt;
and destination point &amp;lt;dx&amp;gt; &amp;lt;dy&amp;gt; &amp;lt;dz&amp;gt;&lt;br /&gt;
intersects the vertical plane defined by the points &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt; and &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The point of intersection, if any, is returned as &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt;,&lt;br /&gt;
with &amp;lt;ret&amp;gt; holding a value of 1 if an intersection exists and 0 otherwise.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Lineintersect&amp;diff=13969</id>
		<title>Lineintersect</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Lineintersect&amp;diff=13969"/>
		<updated>2020-08-10T06:37:07Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;lineintersect&amp;#039;&amp;#039;&amp;#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;  &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;  &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt;  &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;  &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt; &amp;lt;ret&amp;gt;  Projects a line from point &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; along vector &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;, and dete...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;lineintersect&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;  &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;  &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt;  &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;  &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt; &amp;lt;ret&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projects a line from point &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; along vector &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;,&lt;br /&gt;
and determines where it intersects the vertical plane&lt;br /&gt;
defined by the points &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt; and &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The point of intersection, if any, is returned as &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt;,&lt;br /&gt;
with &amp;lt;ret&amp;gt; holding a value of 1 if an intersection exists and 0 otherwise.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Rayintersect&amp;diff=13968</id>
		<title>Rayintersect</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Rayintersect&amp;diff=13968"/>
		<updated>2020-08-10T06:36:25Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;rayintersect&amp;#039;&amp;#039;&amp;#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;  &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;  &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt;  &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;  &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt; &amp;lt;ret&amp;gt;  Projects a ray from point &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; along vector &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;, and determ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;rayintersect&#039;&#039;&#039; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;  &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;  &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt;  &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;  &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt; &amp;lt;ret&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projects a ray from point &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; along vector &amp;lt;vx&amp;gt; &amp;lt;vy&amp;gt; &amp;lt;vz&amp;gt;,&lt;br /&gt;
and determines where it intersects the vertical plane&lt;br /&gt;
defined by the points &amp;lt;x1&amp;gt; &amp;lt;y1&amp;gt; and &amp;lt;x2&amp;gt; &amp;lt;y2&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The point of intersection, if any, is returned as &amp;lt;intx&amp;gt; &amp;lt;inty&amp;gt; &amp;lt;intz&amp;gt;,&lt;br /&gt;
with &amp;lt;ret&amp;gt; holding a value of 1 if an intersection exists and 0 otherwise.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=EVENT_MOVESECTOR&amp;diff=13967</id>
		<title>EVENT MOVESECTOR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=EVENT_MOVESECTOR&amp;diff=13967"/>
		<updated>2020-08-07T21:17:33Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: clarify what &amp;quot;move&amp;quot; means in this context&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EVENT_MOVESECTOR is a [[EDuke32_event_list|Game Event]].&lt;br /&gt;
&lt;br /&gt;
This [[event]] is triggered when a sector is moved.&lt;br /&gt;
This applies to motion on the X and Y axes, like doors,&lt;br /&gt;
but not motion along Z, like elevators.&lt;br /&gt;
&lt;br /&gt;
[[THISACTOR]] is the actor that is moving the sector.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=M32_script_commands&amp;diff=13965</id>
		<title>M32 script commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=M32_script_commands&amp;diff=13965"/>
		<updated>2020-08-06T00:38:19Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* quote commands */ add drawlabel&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 categorized list of every command in Mapster32-script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Legend&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;: acts on current sprite, &#039;&#039;&#039;S&#039;&#039;&#039;: acts on current sprite by pointer (also valid in &amp;quot;for i drawnsprites&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;i&#039;&#039;&#039;: sets current sprite, &#039;&#039;&#039;s&#039;&#039;&#039;: only sets current sprite by pointer&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;D&#039;&#039;&#039;: differs from CON, &#039;&#039;&#039;X&#039;&#039;&#039;: deprecated/do not use (yet)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;var/array/special&#039;&#039;&#039;&#039;&#039;: must be writable, [&#039;&#039;something&#039;&#039;]: optional command field&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A note on the current sprite&#039;&#039;: when the current sprite index &#039;&#039;I&#039;&#039; is set (that is, greater or equal zero), all functions that act on sprites by pointer (&#039;&#039;&#039;S&#039;&#039;&#039;) are also available since the sprite pointer is set to point to the &#039;&#039;sprite[]&#039;&#039; array at index &#039;&#039;I&#039;&#039; in this case. The converse is not true, however: the sprite pointer could be set to a sprite structure other than the main &#039;&#039;sprite[]&#039;&#039; array (such as the &#039;&#039;tsprite[]&#039;&#039; array of sprites drawn on the screen), so code in a scope where the sprite pointer has been set (&#039;&#039;&#039;s&#039;&#039;&#039;) cannot use functions accessing the &#039;&#039;sprite[]&#039;&#039; array (&#039;&#039;&#039;I&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
====basic commands====&lt;br /&gt;
*[[Nullop]]&lt;br /&gt;
*[[Define]]&lt;br /&gt;
*[[Include]]&lt;br /&gt;
*[[Defstate]] | (only for defining)&lt;br /&gt;
*[[Ends]]&lt;br /&gt;
*[[State]] | &#039;&#039;&#039;D&#039;&#039;&#039; (only for calling)&lt;br /&gt;
*[[Onevent]]&lt;br /&gt;
*[[Endevent]]&lt;br /&gt;
*[[Gamevar]] | &#039;&#039;&#039;D&#039;&#039;&#039; (different flags)&lt;br /&gt;
&lt;br /&gt;
====control flow====&lt;br /&gt;
*[[Else]]&lt;br /&gt;
*[[Return]] | &#039;&#039;&#039;D&#039;&#039;&#039; (returns from states)&lt;br /&gt;
*[[Break]] | &#039;&#039;&#039;D&#039;&#039;&#039; (also breaks &#039;&#039;&#039;for&#039;&#039;&#039; and &#039;&#039;&#039;while*&#039;&#039;&#039; loops)&lt;br /&gt;
*[[Switch]]&lt;br /&gt;
*[[Case]]&lt;br /&gt;
*[[Default]]&lt;br /&gt;
*[[Endswitch]]&lt;br /&gt;
*[[Getcurraddress]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Jump]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====struct access (redundant)====&lt;br /&gt;
These are inaccessible in newer versions of Mapster32, use &amp;quot;&#039;&#039;&#039;set&#039;&#039;&#039; &#039;&#039;xyz&#039;&#039; &#039;&#039;zyx&#039;&#039;&amp;quot; instead.&lt;br /&gt;
&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
*Setsector&lt;br /&gt;
*Getsector&lt;br /&gt;
*Setwall&lt;br /&gt;
*Getwall&lt;br /&gt;
*Setsprite&lt;br /&gt;
*Getsprite&lt;br /&gt;
*Gettspr | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*Settspr | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====arrays====&lt;br /&gt;
*[[Gamearray]]&lt;br /&gt;
*[[Setarray]] | (redundant, use &#039;&#039;&#039;set&#039;&#039;&#039;)&lt;br /&gt;
*[[Getarraysize]] &#039;&#039;array&#039;&#039; &#039;&#039;&#039;&#039;&#039;size&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Resizearray]] &#039;&#039;array&#039;&#039; &#039;&#039;newsize&#039;&#039;&lt;br /&gt;
*[[Copy]] &#039;&#039;srcarray&#039;&#039; &#039;&#039;srcidx&#039;&#039; &#039;&#039;&#039;&#039;&#039;dstarray&#039;&#039;&#039;&#039;&#039; &#039;&#039;dstidx&#039;&#039; &#039;&#039;count&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====var commands====&lt;br /&gt;
*[[Randvar]]&lt;br /&gt;
*[[Displayrandvar]]&lt;br /&gt;
*[[Setvar]]&lt;br /&gt;
*[[Addvar]]&lt;br /&gt;
*[[Subvar]]&lt;br /&gt;
*[[Mulvar]]&lt;br /&gt;
*[[Divvar]]&lt;br /&gt;
*[[Modvar]]&lt;br /&gt;
*[[Andvar]]&lt;br /&gt;
*[[Orvar]]&lt;br /&gt;
*[[Xorvar]]&lt;br /&gt;
*[[Shiftvarl]] | (short: &#039;&#039;&#039;shiftl&#039;&#039;&#039;)&lt;br /&gt;
*[[Shiftvarr]] | (short: &#039;&#039;&#039;shiftr&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
====varvar commands====&lt;br /&gt;
*[[Randvarvar]]&lt;br /&gt;
*[[Displayrandvarvar]] | (different from &#039;&#039;&#039;displayrand&#039;&#039;&#039;)&lt;br /&gt;
*[[Setvarvar]]&lt;br /&gt;
*[[Addvarvar]]&lt;br /&gt;
*[[Subvarvar]]&lt;br /&gt;
*[[Mulvarvar]]&lt;br /&gt;
*[[Divvarvar]]&lt;br /&gt;
*[[Modvarvar]]&lt;br /&gt;
*[[Andvarvar]]&lt;br /&gt;
*[[Orvarvar]]&lt;br /&gt;
*[[Xorvarvar]]&lt;br /&gt;
&lt;br /&gt;
====math commands====&lt;br /&gt;
The trigonometric commands interpret values outside the range [0, 2047] correctly as angles modulo 2048.&lt;br /&gt;
*[[Sin]] &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;var&#039;&#039;&lt;br /&gt;
*[[Cos]] &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;var&#039;&#039;&lt;br /&gt;
*[[Displayrand]] &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Inv]] &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Clamp]] &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039; &#039;&#039;min&#039;&#039; &#039;&#039;max&#039;&#039;&lt;br /&gt;
*[[Sqrt]] &#039;&#039;var&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Mulscale]] &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;factor1&#039;&#039; &#039;&#039;factor2&#039;&#039; &#039;&#039;rshiftamount&#039;&#039;&lt;br /&gt;
*[[Divscale]] &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;dividend&#039;&#039; &#039;&#039;divisor&#039;&#039; &#039;&#039;lshiftamount&#039;&#039;&lt;br /&gt;
*[[Dist]] &#039;&#039;&#039;&#039;&#039;res&#039;&#039;&#039;&#039;&#039; &#039;&#039;sprite1&#039;&#039; &#039;&#039;sprite2&#039;&#039;&lt;br /&gt;
*[[Ldist]] &#039;&#039;&#039;&#039;&#039;res&#039;&#039;&#039;&#039;&#039; &#039;&#039;sprite1&#039;&#039; &#039;&#039;sprite2&#039;&#039;&lt;br /&gt;
*[[Getangle]] &#039;&#039;&#039;&#039;&#039;res&#039;&#039;&#039;&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039;&lt;br /&gt;
*[[Getincangle]] &#039;&#039;&#039;&#039;&#039;res&#039;&#039;&#039;&#039;&#039; &#039;&#039;ang1&#039;&#039; &#039;&#039;ang2&#039;&#039;&lt;br /&gt;
*[[A2xy]] &#039;&#039;angle&#039;&#039; &#039;&#039;&#039;&#039;&#039;x&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;y&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Ah2xyz]] &#039;&#039;angle&#039;&#039; &#039;&#039;horiz&#039;&#039; &#039;&#039;&#039;&#039;&#039;x&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;y&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;z&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Calchypotenuse]] &#039;&#039;&#039;&#039;&#039;hypot&#039;&#039;&#039;&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====special commands====&lt;br /&gt;
*[[Sort]] &#039;&#039;&#039;&#039;&#039;array&#039;&#039;&#039;&#039;&#039; &#039;&#039;count&#039;&#039; [&#039;&#039;comparison_state&#039;&#039;]&lt;br /&gt;
*[[Collectsectors]] &#039;&#039;&#039;&#039;&#039;array&#039;&#039;&#039;&#039;&#039; &#039;&#039;count&#039;&#039; &#039;&#039;&#039;&#039;&#039;numcollectedsectors&#039;&#039;&#039;&#039;&#039; [&#039;&#039;comparison_state&#039;&#039;]&lt;br /&gt;
*[[For]] &#039;&#039;&#039;&#039;&#039;itervar&#039;&#039;&#039;&#039;&#039; &#039;&#039;what&#039;&#039; [&#039;&#039;what2&#039;&#039;]&lt;br /&gt;
valid iteration types (&#039;&#039;what&#039;&#039;):&amp;lt;br&amp;gt;&lt;br /&gt;
Note: where the current sprite is affected, it is restored at the end of the loop&lt;br /&gt;
*allsprites (&#039;&#039;&#039;i&#039;&#039;&#039;), allsectors, allwalls, selsprites (&#039;&#039;&#039;i&#039;&#039;&#039;), selsectors, selwalls, drawnsprites (&#039;&#039;&#039;s&#039;&#039;&#039;, indexes tsprite[])&lt;br /&gt;
*spritesofsector &#039;&#039;sector&#039;&#039; (&#039;&#039;&#039;i&#039;&#039;&#039;), loopofwall &#039;&#039;wall&#039;&#039;, wallsofsector &#039;&#039;sector&#039;&#039;, range &#039;&#039;num&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====examples=====&lt;br /&gt;
Using the &#039;&#039;&#039;for&#039;&#039;&#039; command you can create batch modifications in a few lines. (note: these examples don&#039;t claim to be useful)&lt;br /&gt;
&lt;br /&gt;
*making liztroops really big&lt;br /&gt;
 for i allsprites, ifactor LIZTROOP, sizeat 128 128&lt;br /&gt;
&lt;br /&gt;
*translating the whole map by (x,y,z)&lt;br /&gt;
 for i allsectors&lt;br /&gt;
 {&lt;br /&gt;
    add sector[i].ceilingz z, add sector[i].floorz z&lt;br /&gt;
    for j wallsofsector i, { add wall[j].x x, add wall[j].y y }&lt;br /&gt;
    for j spritesofsector i, { add .x x, add .y y, add .z z }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====var if* and while* commands====&lt;br /&gt;
*[[Ifvarl]]&lt;br /&gt;
*[[Ifvarle]]&lt;br /&gt;
*[[Ifvarg]]&lt;br /&gt;
*[[Ifvarge]]&lt;br /&gt;
*[[Ifvare]]&lt;br /&gt;
*[[Ifvarn]]&lt;br /&gt;
*[[Ifvarand]]&lt;br /&gt;
*[[Ifvaror]]&lt;br /&gt;
*[[Ifvarxor]]&lt;br /&gt;
*[[Ifvareither]]&lt;br /&gt;
*[[Ifvarboth]]&lt;br /&gt;
*[[Whilevarn]]&lt;br /&gt;
*[[Whilevarl]]&lt;br /&gt;
&lt;br /&gt;
====varvar if* and while* commands====&lt;br /&gt;
*[[Ifvarvarl]]&lt;br /&gt;
*[[Ifvarvarle]]&lt;br /&gt;
*[[Ifvarvarg]]&lt;br /&gt;
*[[Ifvarvarge]]&lt;br /&gt;
*[[Ifvarvare]]&lt;br /&gt;
*[[Ifvarvarn]]&lt;br /&gt;
*[[Ifvarvarand]]&lt;br /&gt;
*[[Ifvarvaror]]&lt;br /&gt;
*[[Ifvarvarxor]]&lt;br /&gt;
*[[Ifvarvareither]]&lt;br /&gt;
*[[Ifvarvarboth]]&lt;br /&gt;
*[[Whilevarvarn]]&lt;br /&gt;
*[[Whilevarvarl]]&lt;br /&gt;
&lt;br /&gt;
====other if* commands====&lt;br /&gt;
*[[Ifhitkey]] KEY_???&lt;br /&gt;
*[[Ifholdkey]] KEY_???&lt;br /&gt;
*[[Resetkey]] KEY_???&lt;br /&gt;
*[[Ifeitheralt]]&lt;br /&gt;
*[[Ifeitherctrl]]&lt;br /&gt;
*[[Ifeithershift]]&lt;br /&gt;
*[[Ifrnd]] &#039;&#039;number&#039;&#039;&lt;br /&gt;
*[[Ifinside]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;sectnum&#039;&#039;&lt;br /&gt;
*[[Ifangdiffl]] &#039;&#039;angdiff&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifspritepal]] &#039;&#039;pal&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifactor]] &#039;&#039;picnum&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifpdistl]] &#039;&#039;dist&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039; (distance is that of &amp;quot;mapper arrow&amp;quot; to current sprite)&lt;br /&gt;
*[[Ifpdistg]] &#039;&#039;dist&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039; (distance is that of &amp;quot;mapper arrow&amp;quot; to current sprite)&lt;br /&gt;
*[[Ifawayfromwall]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifcansee]] | &#039;&#039;&#039;S&#039;&#039;&#039; (whether &amp;quot;mapper arrow&amp;quot; can see current sprite)&lt;br /&gt;
*[[Ifonwater]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifinwater]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifoutside]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Ifaimingsector]]&lt;br /&gt;
*[[Ifaimingwall]]&lt;br /&gt;
*[[Ifaimingsprite]]&lt;br /&gt;
*[[Ifin3dmode]]&lt;br /&gt;
*[[Ifinteractive]]&lt;br /&gt;
&lt;br /&gt;
====BUILD functions====&lt;br /&gt;
*[[Insertsprite]] | &#039;&#039;&#039;X&#039;&#039;&#039; &#039;&#039;&#039;i&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
*[[Dupsprite]] &#039;&#039;oldsprite&#039;&#039; | &#039;&#039;&#039;i&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
*[[Tdupsprite]] &#039;&#039;sprite&#039;&#039; | &#039;&#039;&#039;s&#039;&#039;&#039; (copies &#039;&#039;sprite&#039;&#039; to tsprite[&#039;&#039;spritesortcnt&#039;&#039;] and increments &#039;&#039;spritesortcnt&#039;&#039;)&lt;br /&gt;
*[[Deletesprite]] &#039;&#039;spritenum&#039;&#039;&lt;br /&gt;
*[[Lastwall]] &#039;&#039;point&#039;&#039; &#039;&#039;&#039;&#039;&#039;resultvar&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Updatecursectnum]]&lt;br /&gt;
*[[Updatesector]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Updatesectorz]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039; &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Getzrange]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;&#039;&#039;&#039;ceilzvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;ceilhitvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;florzvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;florhitvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;walldist&#039;&#039; &#039;&#039;clipmask&#039;&#039;&lt;br /&gt;
*[[Hitscan]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039; &#039;&#039;sectnum&#039;&#039; &#039;&#039;vx&#039;&#039; &#039;&#039;vy&#039;&#039; &#039;&#039;vz&#039;&#039; &#039;&#039;&#039;&#039;&#039;hitsectvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;hitwallvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;hitspritevar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;hitxvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;hityvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;hitzvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;cliptype&#039;&#039;&lt;br /&gt;
*[[Cansee]] &#039;&#039;x1&#039;&#039; &#039;&#039;y1&#039;&#039; &#039;&#039;z1&#039;&#039; &#039;&#039;sect1&#039;&#039; &#039;&#039;x2&#039;&#039; &#039;&#039;y2&#039;&#039; &#039;&#039;z2&#039;&#039; &#039;&#039;sect2&#039;&#039; &#039;&#039;&#039;&#039;&#039;rvar&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Canseespr]] &#039;&#039;sprite1&#039;&#039; &#039;&#039;sprite2&#039;&#039; &#039;&#039;&#039;&#039;&#039;result&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Neartag]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039; &#039;&#039;sectnum&#039;&#039; &#039;&#039;ang&#039;&#039; &#039;&#039;&#039;&#039;&#039;neartagsectorvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;neartagwallvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;neartagspritevar&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;neartaghitdistvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;neartagrange&#039;&#039; &#039;&#039;tagsearch&#039;&#039;&lt;br /&gt;
*[[Rotatepoint]] &#039;&#039;xpivot&#039;&#039; &#039;&#039;ypivot&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;daang&#039;&#039; &#039;&#039;&#039;&#039;&#039;xres&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;yres&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Dragpoint]] &#039;&#039;wallnum&#039;&#039; &#039;&#039;newx&#039;&#039; &#039;&#039;newy&#039;&#039;&lt;br /&gt;
*[[Getceilzofslope]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;&#039;&#039;&#039;resz&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Getflorzofslope]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;&#039;&#039;&#039;resz&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Alignceilslope]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039;&lt;br /&gt;
*[[Alignflorslope]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Bsetsprite&#039;&#039;&#039; &#039;&#039;spritenum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039; ([[Setsprite]] in CON)&lt;br /&gt;
*[[Setfirstwall]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;wallnum&#039;&#039;&lt;br /&gt;
*[[Changespritestat]] &#039;&#039;spritenum&#039;&#039; &#039;&#039;statnum&#039;&#039;&lt;br /&gt;
*[[Changespritesect]] &#039;&#039;spritenum&#039;&#039; &#039;&#039;sectnum&#039;&#039;&lt;br /&gt;
*[[Headspritestat]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Prevspritestat]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Nextspritestat]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Headspritesect]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Prevspritesect]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Nextspritesect]] | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Sectorofwall]] &#039;&#039;wallnum&#039;&#039;&lt;br /&gt;
*[[Fixrepeats]] &#039;&#039;wallnum&#039;&#039;&lt;br /&gt;
The following returns a (positive) game palette index &amp;quot;closest&amp;quot; to the RGB color passed.&lt;br /&gt;
*[[Getclosestcol]] &#039;&#039;r&#039;&#039; &#039;&#039;g&#039;&#039; &#039;&#039;b&#039;&#039; &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====debugging commands====&lt;br /&gt;
*[[Addlogvar]] &#039;&#039;var/array[]/special[].xxx&#039;&#039; (short form: &#039;&#039;&#039;al&#039;&#039;&#039;)&lt;br /&gt;
*[[Addlog]]&lt;br /&gt;
*[[Debug]] &#039;&#039;CONSTANT&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====quote commands====&lt;br /&gt;
*[[Definequote]] &#039;&#039;quotenum&#039;&#039; [text...] | (initial definition of a quote)&lt;br /&gt;
*[[Redefinequote]] &#039;&#039;quotenum&#039;&#039; [text...] | (replacement occurs at runtime)&lt;br /&gt;
*[[Print]] &#039;&#039;quotenum&#039;&#039; | (prints to the OSD)&lt;br /&gt;
*[[Quote]] &#039;&#039;quotenum&#039;&#039;&lt;br /&gt;
*[[Error]] &#039;&#039;quotenum&#039;&#039;&lt;br /&gt;
*[[Printmessage16]] &#039;&#039;quotenum&#039;&#039; | 2D mode only&lt;br /&gt;
*[[Printmessage256]] &#039;&#039;quotenum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; | 3D mode only&lt;br /&gt;
*[[Printext256]] &#039;&#039;quotenum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;color&#039;&#039; &#039;&#039;backcolor&#039;&#039; &#039;&#039;fontsize&#039;&#039; | 3D mode only, -&#039;&#039;color&#039;&#039; is looked up in &#039;&#039;editorcolors&#039;&#039; if &#039;&#039;color&#039;&#039; is negative&lt;br /&gt;
*[[Printext16]] &#039;&#039;quotenum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;color&#039;&#039; &#039;&#039;backcolor&#039;&#039; &#039;&#039;fontsize&#039;&#039; | 2D mode only, color is looked up in &#039;&#039;editorcolors&#039;&#039;&lt;br /&gt;
*[[Drawlabel]] &#039;&#039;quotenum&#039;&#039; &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;color&#039;&#039; &#039;&#039;backcolor&#039;&#039; &#039;&#039;fontsize&#039;&#039; | Draws a small label. 2D mode only; build units.&lt;br /&gt;
&lt;br /&gt;
The following two commands query the user for a number from 0 to &#039;&#039;max&#039;&#039;,&lt;br /&gt;
specifying a negative &#039;&#039;max&#039;&#039; argument will make the allowable number range be &#039;&#039;max&#039;&#039; to -&#039;&#039;max&#039;&#039;: (deprecated)&lt;br /&gt;
*[[Getnumber16]] &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039; &#039;&#039;quotenum&#039;&#039; &#039;&#039;max&#039;&#039; | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Getnumber256]] &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039; &#039;&#039;quotenum&#039;&#039; &#039;&#039;max&#039;&#039; | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Getnumberfromuser]] &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039; &#039;&#039;quotenum&#039;&#039; &#039;&#039;max&#039;&#039; &#039;&#039;flags&#039;&#039;&lt;br /&gt;
Valid &#039;&#039;flags&#039;&#039; are:&lt;br /&gt;
&lt;br /&gt;
: 1: sign  (allow values from -&#039;&#039;max&#039;&#039; to &#039;&#039;max&#039;&#039;)&amp;lt;br/&amp;gt;&lt;br /&gt;
: 2: autocomplete names&amp;lt;br/&amp;gt;&lt;br /&gt;
: 4: autocomplete taglabels&amp;lt;br/&amp;gt;&lt;br /&gt;
: 8: return -1 if cancelled. Otherwise, the initial value is returned, which is the one passed in &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
*[[Qsprintf]] &#039;&#039;&#039;&#039;&#039;destquote&#039;&#039;&#039;&#039;&#039; &#039;&#039;srcquote&#039;&#039; [up to 32 arguments...]&lt;br /&gt;
*[[Qstrcat]] &#039;&#039;&#039;&#039;&#039;destquote&#039;&#039;&#039;&#039;&#039; &#039;&#039;srcquote&#039;&#039;&lt;br /&gt;
*[[Qstrcpy]] &#039;&#039;&#039;&#039;&#039;destquote&#039;&#039;&#039;&#039;&#039; &#039;&#039;srcquote&#039;&#039;&lt;br /&gt;
*[[Qstrlen]] &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; &#039;&#039;quotenum&#039;&#039;&lt;br /&gt;
*[[Qstrncat]] &#039;&#039;&#039;&#039;&#039;destquote&#039;&#039;&#039;&#039;&#039; &#039;&#039;srcquote&#039;&#039; &#039;&#039;count&#039;&#039; | &#039;&#039;&#039;X&#039;&#039;&#039;&lt;br /&gt;
*[[Qsubstr]] &#039;&#039;&#039;&#039;&#039;dstquote&#039;&#039;&#039;&#039;&#039; &#039;&#039;srcquote&#039;&#039; &#039;&#039;start&#039;&#039; &#039;&#039;length&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====findnear* (not tested)====&lt;br /&gt;
*[[Findnearsprite]] &#039;&#039;type&#039;&#039; &#039;&#039;maxdist&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Findnearspritevar]] &#039;&#039;type&#039;&#039; &#039;&#039;maxdistvar&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Findnearsprite3d]] &#039;&#039;type&#039;&#039; &#039;&#039;maxdist&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Findnearsprite3dvar]] &#039;&#039;type&#039;&#039; &#039;&#039;maxdistvar&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Findnearspritez]] &#039;&#039;type&#039;&#039; &#039;&#039;maxdist&#039;&#039; &#039;&#039;maxzdist&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Findnearspritezvar]] &#039;&#039;type&#039;&#039; &#039;&#039;maxdist&#039;&#039; &#039;&#039;maxzdist&#039;&#039; &#039;&#039;&#039;&#039;&#039;resvar&#039;&#039;&#039;&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====misc. commands====&lt;br /&gt;
*[[Getticks]] &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Gettimedate]] (8 arguments...)&lt;br /&gt;
*[[Setaspect]] &#039;&#039;viewingrange&#039;&#039; &#039;&#039;yxaspect&#039;&#039;&lt;br /&gt;
*[[Sethighlight]] &#039;&#039;what&#039;&#039; &#039;&#039;sprite_or_wall_num&#039;&#039; &#039;&#039;set?&#039;&#039;&lt;br /&gt;
: If &#039;&#039;what&#039;&#039; has bit 16384 set, the lower 14 bits of &#039;&#039;sprite_or_wall_num&#039;&#039; are taken as sprite index, else wall index&lt;br /&gt;
*[[Sethighlightsector]] &#039;&#039;sectnum&#039;&#039; &#039;&#039;set?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====current sprite commands====&lt;br /&gt;
*[[Seti]] &#039;&#039;spritenum&#039;&#039; | &#039;&#039;&#039;i&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
*[[Sizeat]] &#039;&#039;xrepeat&#039;&#039; &#039;&#039;yrepeat&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Cstat]] &#039;&#039;cstat&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Cstator]] &#039;&#039;bitstoset&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Clipdist]] &#039;&#039;clipdist&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Spritepal]] &#039;&#039;palnum&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Cactor]] &#039;&#039;picnum&#039;&#039; | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Spgetlotag]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Spgethitag]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Sectgetlotag]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Sectgethitag]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Gettexturefloor]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
*[[Gettextureceiling]] | &#039;&#039;&#039;S&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====drawing commands====&lt;br /&gt;
The suffixes 16 and 256 mean that the commands are to be used in 2D and 3D modes, respectively.&lt;br /&gt;
======used in EVENT_DRAW2DSCREEN======&lt;br /&gt;
*[[Drawline16]] &#039;&#039;x1&#039;&#039; &#039;&#039;y1&#039;&#039; &#039;&#039;x2&#039;&#039; &#039;&#039;y2&#039;&#039; &#039;&#039;color&#039;&#039;&lt;br /&gt;
*[[Drawline16b]] &#039;&#039;x1&#039;&#039; &#039;&#039;y1&#039;&#039; &#039;&#039;x2&#039;&#039; &#039;&#039;y2&#039;&#039; &#039;&#039;color&#039;&#039; | (coordinates are in BUILD units)&lt;br /&gt;
*[[Drawline16z]] &#039;&#039;x1&#039;&#039; &#039;&#039;y1&#039;&#039; &#039;&#039;z1&#039;&#039; &#039;&#039;x2&#039;&#039; &#039;&#039;y2&#039;&#039; &#039;&#039;z2&#039;&#039; &#039;&#039;color&#039;&#039; | (coordinates are in BUILD units)&lt;br /&gt;
*[[Drawcircle16]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;radius&#039;&#039; &#039;&#039;color&#039;&#039;&lt;br /&gt;
*[[Drawcircle16b]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;radius&#039;&#039; &#039;&#039;color&#039;&#039; | (coordinates are in BUILD units)&lt;br /&gt;
*[[Drawcircle16z]] &#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039; &#039;&#039;z&#039;&#039; &#039;&#039;radius&#039;&#039; &#039;&#039;color&#039;&#039; | (coordinates are in BUILD units)&lt;br /&gt;
Specifying nonnegative values for the color will use the 16-color editor palette, whereas negative values -1 to -255 will use a palette of all colors available in 2D mode, where the palette is the base game palette.&lt;br /&gt;
&lt;br /&gt;
======used elsewhere======&lt;br /&gt;
*[[Rotatesprite16]]&lt;br /&gt;
*[[Rotatesprite]]&lt;br /&gt;
*[[Setgamepalette]] &#039;&#039;gamepal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====sound commands====&lt;br /&gt;
All sound commands accept vars. Sounds should appear from current sprite if set and globally otherwise (not tested).&lt;br /&gt;
*[[Ifsound]] &#039;&#039;sound#&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Ifnosounds]]&lt;br /&gt;
*[[Getsoundflags]] &#039;&#039;sound#&#039;&#039; &#039;&#039;&#039;&#039;&#039;var&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*[[Sound]] &#039;&#039;sound#&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Soundonce]] &#039;&#039;sound#&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Stopsound]] &#039;&#039;sound#&#039;&#039; | &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
*[[Globalsound]] &#039;&#039;sound#&#039;&#039;&lt;br /&gt;
*[[Stopallsounds]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Level editing documentation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Quote&amp;diff=13964</id>
		<title>Quote</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Quote&amp;diff=13964"/>
		<updated>2020-08-05T17:32:00Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;quote&#039;&#039;&#039; &amp;lt;quote number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Causes the quote &amp;lt;quote number&amp;gt; as defined by [[definequote]] to be displayed on the top of the screen, center aligned.  The quote fades out after two seconds. This command requires a context where the player is defined, e.g. it cannot be used in [[EVENT_LOADACTOR]].&lt;br /&gt;
&lt;br /&gt;
Quotes also appear in the console and log file, but when the same quote is displayed multiple times in a row, only the first instance will appear in the console and log. This applies &#039;&#039;even if the quote has been redefined&#039;&#039;. To log things for debugging or analysis, consider [[userquote]] instead.&lt;br /&gt;
&lt;br /&gt;
[[Category:Duke3D 1.3/1.5 commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;br /&gt;
[[Category:String manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Userquote&amp;diff=13963</id>
		<title>Userquote</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Userquote&amp;diff=13963"/>
		<updated>2020-08-05T17:27:44Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: specify log behavior&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;userquote&#039;&#039;&#039; &amp;lt;quote number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Causes the quote &amp;lt;quote number&amp;gt; as defined by [[definequote]] to be added to the four line long text buffer that multiplayer kill/death messages and player talk is displayed in. The quotes scroll off of the screen at a rate of one every six seconds. Unlike [[quote]], every userquote appears in the console and log file.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;br /&gt;
[[Category:String manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Actor&amp;diff=13962</id>
		<title>Actor</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Actor&amp;diff=13962"/>
		<updated>2020-08-04T21:37:50Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;actor&#039;&#039;&#039; &amp;lt;picnum&amp;gt; &amp;lt;strength&amp;gt; &amp;lt;action&amp;gt; &amp;lt;move&amp;gt; &amp;lt;moveflag 1&amp;gt; [...] &amp;lt;moveflag N&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;useractor&#039;&#039;&#039; &amp;lt;type&amp;gt; &amp;lt;picnum&amp;gt; &amp;lt;strength&amp;gt; &amp;lt;action&amp;gt; &amp;lt;move&amp;gt; &amp;lt;moveflag 1&amp;gt; [...] &amp;lt;moveflag N&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines parameters for in-game sprites, and allows code to be written for sprites of the specific tile number.&lt;br /&gt;
&lt;br /&gt;
The token &#039;&#039;&#039;enda&#039;&#039;&#039; marks the end of the actor.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;actor&#039;&#039;&#039; MYACTOR&lt;br /&gt;
   [...]&lt;br /&gt;
 &#039;&#039;&#039;enda&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;useractor&#039;&#039;&#039; notenemy MYACTOR2&lt;br /&gt;
   [...]&lt;br /&gt;
 &#039;&#039;&#039;enda&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, &amp;quot;actors&amp;quot; are sprites that run code in game, such as enemies, breakable objects, etc.&lt;br /&gt;
&lt;br /&gt;
When defined with &#039;&#039;&#039;actor&#039;&#039;&#039; or &#039;&#039;&#039;useractor&#039;&#039;&#039;, the sprites will execute their code once every tic, except for dormant enemies. Actors or dormant actors will have a statnum of 1 and 2 respectively.&lt;br /&gt;
&lt;br /&gt;
Prior to v1.4, only tile numbers hard-coded to execute script would work with the &#039;&#039;&#039;actor&#039;&#039;&#039; command. After v1.4 new actors could be defined, and the &#039;&#039;&#039;useractor&#039;&#039;&#039; command was added which allowed actors to be defined as specific types for hard-coded behavior.&lt;br /&gt;
&lt;br /&gt;
With &#039;&#039;&#039;useractor&#039;&#039;&#039;, the old &#039;&#039;&#039;actor&#039;&#039;&#039; command is deprecated.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 define MYACTOR 3585&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;actor&#039;&#039;&#039; MYACTOR 0&lt;br /&gt;
   ifpdistl 1024 &lt;br /&gt;
   { &lt;br /&gt;
     palfrom 32 0 16 0 &lt;br /&gt;
   }&lt;br /&gt;
 enda&lt;br /&gt;
&lt;br /&gt;
See also [[state]].&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
All parameters after &amp;lt;picnum&amp;gt; are optional.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
| &amp;lt;type&amp;gt; || is the actor type for special behavior. Only used by &#039;&#039;&#039;useractor&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;picnum&amp;gt; || You can either input a [[define]]d name, or the tile number directly.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;strength&amp;gt; || is the health of the actor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;action&amp;gt; || is the intial [[action]] an actor uses.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;move&amp;gt; || is the initial [[move]] of the actor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;moveflag&amp;gt; || is a sequence of parameters that specify certain hard-coded movement behavior.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
&lt;br /&gt;
The type is technically a [[bitfield]], though &amp;quot;3&amp;quot; is invalid. It is generally either &amp;quot;enemy&amp;quot;, &amp;quot;enemystayput&amp;quot;, or &amp;quot;notenemy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Value!!DEFS.CON label!![[gameflags]]!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||notenemy||&amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;(None)&amp;lt;/font&amp;gt;||Default. Code begins executing at the start of a level.&lt;br /&gt;
|-&lt;br /&gt;
|1||enemy||SFLAG_BADGUY||Enables hard-coded behavior. Code only begins executing upon player sight.&lt;br /&gt;
|-&lt;br /&gt;
|2||enemystayput||SFLAG_BADGUY&amp;lt;br&amp;gt;SFLAG_BADGUYSTAYPUT||Same as &amp;quot;enemy&amp;quot; plus the [[actor]] will not leave the [[sector]] it is placed in.&lt;br /&gt;
|-&lt;br /&gt;
|4||&amp;lt;font color=&amp;quot;gray&amp;quot;&amp;gt;(None)&amp;lt;/font&amp;gt;||SFLAG_ROTFIXED||The actor&#039;s position in rotating sectors is calculated without rounding errors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Duke3D 1.3/1.5 commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=13961</id>
		<title>Action</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=13961"/>
		<updated>2020-08-04T21:11:37Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: fix redundancy, add commented-out notes, fix spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;action&#039;&#039;&#039; &#039;&#039;&amp;lt;name&amp;gt; &amp;lt;startframe&amp;gt; &amp;lt;frames&amp;gt; &amp;lt;viewtype&amp;gt; &amp;lt;incvalue&amp;gt; &amp;lt;delay&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An action is an animation for an [[actor]]. Actions are defined outside of an [[actor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;name&amp;gt; is the name of the action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startframe&amp;gt; is the starting frame number (relative to the main sprite of the [[actor]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;frames&amp;gt; is the total number of frames in the action. Must be at least 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;viewtype&amp;gt; is the number of sides drawn for the actor.  Prior to 3D models, this method was used to simulate a 3D appearance for sprites.  Valid values are: &lt;br /&gt;
:&#039;&#039;&#039;1&#039;&#039;&#039; - The sprite will appear the same regardless of the angle at which it is viewed.&lt;br /&gt;
:&#039;&#039;&#039;3&#039;&#039;&#039; - The sprite will have 16 angles built from only 4 art tiles. A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite.  The pattern is as follows, with 1, 2, 3, and 4 being the order of the four tiles used, and M denoting that the tile is mirrored: 1M, 2M, 3M, 4M, 4, 3, 2, 1, 1M, 2M, 3M, 4M, 4, 3, 2, 1.&lt;br /&gt;
:&#039;&#039;&#039;5&#039;&#039;&#039; - The sprite will have 8 angles constructed from 5 art tiles, three of which are mirrored.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite using the following pattern: 1, 2, 3, 4, 5, 4M, 3M, 2M. &lt;br /&gt;
:&#039;&#039;&#039;7&#039;&#039;&#039; - The sprite will have 12 angles constructed from 7 art tiles, five of which are mirrored.  A new frame is drawn every 30 degrees in a clockwise pattern beginning with the front of the sprite using the following pattern: 1, 2, 3, 4, 5, 6, 7, 6M, 5M, 4M, 3M, 2M.&lt;br /&gt;
:&#039;&#039;&#039;8&#039;&#039;&#039; - The sprite will have 8 angles constructed from 8 art tiles.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite using the simple pattern: 1, 2, 3, 4, 5, 6, 7, 8.&lt;br /&gt;
&lt;br /&gt;
View type 1 is generally used for pickups and often things like fire hydrants. View type 3 is useful only for very symmetrical actors but does give the most angles. View types 5 and 7 are for enemies and similar which have a single axis of symmetry and where you want a front view such that when they face at you they actually look like they are facing at you. View type 8 is for stuff with little in the way of symmetry.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;incvalue&amp;gt; is the direction of the animation. 1 to advance forward, -1 to go back.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;delay&amp;gt; is the delay between frames.&lt;br /&gt;
&lt;br /&gt;
The delay change every time you add a value of 4, in other words, 1-3 has the same result as zero, 5-7 same as 4, etc.&lt;br /&gt;
&lt;br /&gt;
Also the delay is not proportional to the value, setting 16 doesn&#039;t mean double of speed than 8, the calculation is done with this: the speed of a delay 0 equal to a [[ifcount|tic]] counter; the speed of a delay 4 is 1/2 of it; 8 is 1/3; 12 is 1/4; 16 is 1/5; 20 is 1/6; etc.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
To call an action from within an actor simply put:&lt;br /&gt;
&lt;br /&gt;
action &amp;lt;name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Note: Every frame advance adds 1 to [[actioncount]]. To reset an animation, either call the action again or use [[resetactioncount]]. Starting a new animation will also reset [[actioncount]] to 0.&lt;br /&gt;
&lt;br /&gt;
[[Category:Duke3D 1.3/1.5 commands]]&lt;br /&gt;
[[Category:Sprite manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Randvar&amp;diff=13960</id>
		<title>Randvar</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Randvar&amp;diff=13960"/>
		<updated>2020-08-02T21:10:57Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: clarify rand range&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;randvar&#039;&#039;&#039; &amp;lt;gamevar&amp;gt; &amp;lt;value&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;randvarvar&#039;&#039;&#039; &amp;lt;gamevar&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function generates a random number (using the shared &amp;quot;game&amp;quot; PRNG) from 0 to &amp;lt;value&amp;gt; (inclusive), and assigns it to &amp;lt;gamevar&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This command should not be used in unsynchronized code or it will desynchronize multiplayer games.  See the list of [[unsynchronized events]] for a full list.&lt;br /&gt;
&lt;br /&gt;
In prior releases of DOS EDuke, randvar contained a flaw that would desynchronize multiplayer regardless of where the command was used.  The bug has since been corrected for post-1.0 releases of EDuke32.&lt;br /&gt;
&lt;br /&gt;
{{varsuffix}}&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke commands]]&lt;br /&gt;
[[Category:Gamevar manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Checkavailinven&amp;diff=13939</id>
		<title>Checkavailinven</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Checkavailinven&amp;diff=13939"/>
		<updated>2020-07-31T01:00:30Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;checkavailinven&#039;&#039;&#039; &amp;lt;playerID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Checks for the first available inventory and selects it.&lt;br /&gt;
Also removes empty items from inventory.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Player manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13938</id>
		<title>Packaging mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13938"/>
		<updated>2020-07-30T16:53:36Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* DEF entrypoint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intro==&lt;br /&gt;
&lt;br /&gt;
This guide outlines a scheme for packaging mods,&lt;br /&gt;
including directory structure, essential files, useful CON commands,&lt;br /&gt;
instructions on launching packaged and unpacked mods,&lt;br /&gt;
and tips for working with version control.&lt;br /&gt;
&lt;br /&gt;
This guide assumes you are modding for EDuke32 on Windows;&lt;br /&gt;
you may need to make adjustments for other games&lt;br /&gt;
or operating systems.&lt;br /&gt;
&lt;br /&gt;
==Unpackaged mods==&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to test your mod without ever packaging it,&lt;br /&gt;
by placing your files in a subdirectory alongside the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===Mod directory===&lt;br /&gt;
&lt;br /&gt;
First, create a new subdirectory alongside the EDuke32 executable,&lt;br /&gt;
and name it &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
All of your mod&#039;s files will live here, including&lt;br /&gt;
CON scripts, DEF files, maps, graphical and audio assets, and so on.&lt;br /&gt;
You can name and organize these in subdirectories as you please,&lt;br /&gt;
with only the following exception.&lt;br /&gt;
&lt;br /&gt;
===CON entrypoint===&lt;br /&gt;
&lt;br /&gt;
Next, create a CON script named &#039;&#039;eduke.con&#039;&#039;&lt;br /&gt;
directly inside of the &#039;&#039;mymod&#039;&#039; directory&lt;br /&gt;
and add the following line:&lt;br /&gt;
&lt;br /&gt;
 include game.con&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;game.con&#039;&#039; here refers to a file in &#039;&#039;duke3d.grp&#039;&#039;, not a part of your mod.&lt;br /&gt;
EDuke32 will automatically load &#039;&#039;eduke.con&#039;&#039; if present, or &#039;&#039;game.con&#039;&#039; if not.&lt;br /&gt;
Since &#039;&#039;eduke.con&#039;&#039; is loaded in this case, we must load &#039;&#039;game.con&#039;&#039; ourselves.&lt;br /&gt;
&lt;br /&gt;
===DEF entrypoint===&lt;br /&gt;
&lt;br /&gt;
Now, create a file called &#039;&#039;mymod.def&#039;&#039; and leave it blank for now.&lt;br /&gt;
This will contain any [[DEF_Language]] instructions your mod needs.&lt;br /&gt;
In &#039;&#039;eduke.con&#039;&#039;, add the following line:&lt;br /&gt;
&lt;br /&gt;
 setdefname mymod.def&lt;br /&gt;
&lt;br /&gt;
The [[setdefname]] command tells EDuke32 where to find your DEF file.&lt;br /&gt;
Note that you could name it whatever you like or put it in a subdirectory&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Episodes and levels===&lt;br /&gt;
&lt;br /&gt;
Finally, fire up Mapster32, create a quick map,&lt;br /&gt;
and save it in &#039;&#039;mymod&#039;&#039; as &#039;&#039;mymap01.map&#039;&#039;.&lt;br /&gt;
Add the following to &#039;&#039;eduke.con&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 definevolumename 0 Episode One&lt;br /&gt;
 definelevelname 0 0 mymap01.map 01:02 02:03 My Map One&lt;br /&gt;
&lt;br /&gt;
The [[definevolumename]] command&lt;br /&gt;
registers &amp;quot;Episode One&amp;quot; as the name of your first episode.&lt;br /&gt;
The [[definelevelname]] command registers&lt;br /&gt;
the path to the first map of the first episode,&lt;br /&gt;
as well as target completion times and the name of the map.&lt;br /&gt;
&lt;br /&gt;
Again, you could name the map whatever you like,&lt;br /&gt;
or put it in a subdirectory,&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Testing your mod===&lt;br /&gt;
&lt;br /&gt;
To launch the mod in its unpackaged form,&lt;br /&gt;
simply run the following command:&lt;br /&gt;
&lt;br /&gt;
 eduke32 -j mymod&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not comfortable working from the command line,&lt;br /&gt;
create a shortcut to eduke32.exe, right click it, select &#039;&#039;Properties&#039;&#039;,&lt;br /&gt;
and edit the &#039;&#039;Target&#039;&#039; field to add &#039;&#039;-j&#039;&#039; at the end:&lt;br /&gt;
&lt;br /&gt;
 C:\path\to\eduke32.exe -j&lt;br /&gt;
&lt;br /&gt;
You can now drag your &#039;&#039;mymod&#039;&#039; folder onto the shortcut to launch it.&lt;br /&gt;
If you want the shortcut to be a dedicated launcher for your mod&lt;br /&gt;
instead of having to drag the folder onto it,&lt;br /&gt;
add &#039;&#039;mymod&#039;&#039; after the &#039;&#039;-j&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Packaging mods==&lt;br /&gt;
&lt;br /&gt;
===The easy way===&lt;br /&gt;
&lt;br /&gt;
To package your mod, simply zip up the contents of &#039;&#039;mymod&#039;&#039;&lt;br /&gt;
using a tool like [https://www.7-zip.org/ 7-Zip].&lt;br /&gt;
Be sure to zip up the contents rather than the directory itself;&lt;br /&gt;
the zip file should not include a directory called &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test the packaged mod, simply drag the zip file onto the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===The Git way===&lt;br /&gt;
&lt;br /&gt;
Explaining version control is outside the scope of this tutorial,&lt;br /&gt;
but if you&#039;re already using [https://git-scm.com/ Git], you can use&lt;br /&gt;
[https://git-scm.com/docs/git-archive git-archive] to package your mod:&lt;br /&gt;
&lt;br /&gt;
 # after committing everything...&lt;br /&gt;
 git archive HEAD -o ../mymod.zip&lt;br /&gt;
&lt;br /&gt;
This will keep Git&#039;s dotfiles from getting packaged,&lt;br /&gt;
as well as anything listed in &#039;&#039;.gitignore&#039;&#039;&lt;br /&gt;
or having the &#039;&#039;export-ignore&#039;&#039; attribute.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13937</id>
		<title>Packaging mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13937"/>
		<updated>2020-07-30T03:38:58Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* DEF entrypoint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intro==&lt;br /&gt;
&lt;br /&gt;
This guide outlines a scheme for packaging mods,&lt;br /&gt;
including directory structure, essential files, useful CON commands,&lt;br /&gt;
instructions on launching packaged and unpacked mods,&lt;br /&gt;
and tips for working with version control.&lt;br /&gt;
&lt;br /&gt;
This guide assumes you are modding for EDuke32 on Windows;&lt;br /&gt;
you may need to make adjustments for other games&lt;br /&gt;
or operating systems.&lt;br /&gt;
&lt;br /&gt;
==Unpackaged mods==&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to test your mod without ever packaging it,&lt;br /&gt;
by placing your files in a subdirectory alongside the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===Mod directory===&lt;br /&gt;
&lt;br /&gt;
First, create a new subdirectory alongside the EDuke32 executable,&lt;br /&gt;
and name it &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
All of your mod&#039;s files will live here, including&lt;br /&gt;
CON scripts, DEF files, maps, graphical and audio assets, and so on.&lt;br /&gt;
You can name and organize these in subdirectories as you please,&lt;br /&gt;
with only the following exception.&lt;br /&gt;
&lt;br /&gt;
===CON entrypoint===&lt;br /&gt;
&lt;br /&gt;
Next, create a CON script named &#039;&#039;eduke.con&#039;&#039;&lt;br /&gt;
directly inside of the &#039;&#039;mymod&#039;&#039; directory&lt;br /&gt;
and add the following line:&lt;br /&gt;
&lt;br /&gt;
 include game.con&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;game.con&#039;&#039; here refers to a file in &#039;&#039;duke3d.grp&#039;&#039;, not a part of your mod.&lt;br /&gt;
EDuke32 will automatically load &#039;&#039;eduke.con&#039;&#039; if present, or &#039;&#039;game.con&#039;&#039; if not.&lt;br /&gt;
Since &#039;&#039;eduke.con&#039;&#039; is loaded in this case, we must load &#039;&#039;game.con&#039;&#039; ourselves.&lt;br /&gt;
&lt;br /&gt;
===DEF entrypoint===&lt;br /&gt;
&lt;br /&gt;
Now, create a file called &#039;&#039;mymod.def&#039;&#039; and leave it blank for now.&lt;br /&gt;
This will contain any [[DEF_Language]] instructions your mod needs.&lt;br /&gt;
In &#039;&#039;eduke.con&#039;&#039;, add the following line:&lt;br /&gt;
&lt;br /&gt;
 setdefname mymod.def&lt;br /&gt;
&lt;br /&gt;
The [[setdefname]] command tells Eduke32 where to find your DEF file.&lt;br /&gt;
Note that you could name it whatever you like or put it in a subdirectory&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Episodes and levels===&lt;br /&gt;
&lt;br /&gt;
Finally, fire up Mapster32, create a quick map,&lt;br /&gt;
and save it in &#039;&#039;mymod&#039;&#039; as &#039;&#039;mymap01.map&#039;&#039;.&lt;br /&gt;
Add the following to &#039;&#039;eduke.con&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 definevolumename 0 Episode One&lt;br /&gt;
 definelevelname 0 0 mymap01.map 01:02 02:03 My Map One&lt;br /&gt;
&lt;br /&gt;
The [[definevolumename]] command&lt;br /&gt;
registers &amp;quot;Episode One&amp;quot; as the name of your first episode.&lt;br /&gt;
The [[definelevelname]] command registers&lt;br /&gt;
the path to the first map of the first episode,&lt;br /&gt;
as well as target completion times and the name of the map.&lt;br /&gt;
&lt;br /&gt;
Again, you could name the map whatever you like,&lt;br /&gt;
or put it in a subdirectory,&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Testing your mod===&lt;br /&gt;
&lt;br /&gt;
To launch the mod in its unpackaged form,&lt;br /&gt;
simply run the following command:&lt;br /&gt;
&lt;br /&gt;
 eduke32 -j mymod&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not comfortable working from the command line,&lt;br /&gt;
create a shortcut to eduke32.exe, right click it, select &#039;&#039;Properties&#039;&#039;,&lt;br /&gt;
and edit the &#039;&#039;Target&#039;&#039; field to add &#039;&#039;-j&#039;&#039; at the end:&lt;br /&gt;
&lt;br /&gt;
 C:\path\to\eduke32.exe -j&lt;br /&gt;
&lt;br /&gt;
You can now drag your &#039;&#039;mymod&#039;&#039; folder onto the shortcut to launch it.&lt;br /&gt;
If you want the shortcut to be a dedicated launcher for your mod&lt;br /&gt;
instead of having to drag the folder onto it,&lt;br /&gt;
add &#039;&#039;mymod&#039;&#039; after the &#039;&#039;-j&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Packaging mods==&lt;br /&gt;
&lt;br /&gt;
===The easy way===&lt;br /&gt;
&lt;br /&gt;
To package your mod, simply zip up the contents of &#039;&#039;mymod&#039;&#039;&lt;br /&gt;
using a tool like [https://www.7-zip.org/ 7-Zip].&lt;br /&gt;
Be sure to zip up the contents rather than the directory itself;&lt;br /&gt;
the zip file should not include a directory called &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test the packaged mod, simply drag the zip file onto the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===The Git way===&lt;br /&gt;
&lt;br /&gt;
Explaining version control is outside the scope of this tutorial,&lt;br /&gt;
but if you&#039;re already using [https://git-scm.com/ Git], you can use&lt;br /&gt;
[https://git-scm.com/docs/git-archive git-archive] to package your mod:&lt;br /&gt;
&lt;br /&gt;
 # after committing everything...&lt;br /&gt;
 git archive HEAD -o ../mymod.zip&lt;br /&gt;
&lt;br /&gt;
This will keep Git&#039;s dotfiles from getting packaged,&lt;br /&gt;
as well as anything listed in &#039;&#039;.gitignore&#039;&#039;&lt;br /&gt;
or having the &#039;&#039;export-ignore&#039;&#039; attribute.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13936</id>
		<title>Packaging mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13936"/>
		<updated>2020-07-30T03:38:35Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* CON entrypoint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intro==&lt;br /&gt;
&lt;br /&gt;
This guide outlines a scheme for packaging mods,&lt;br /&gt;
including directory structure, essential files, useful CON commands,&lt;br /&gt;
instructions on launching packaged and unpacked mods,&lt;br /&gt;
and tips for working with version control.&lt;br /&gt;
&lt;br /&gt;
This guide assumes you are modding for EDuke32 on Windows;&lt;br /&gt;
you may need to make adjustments for other games&lt;br /&gt;
or operating systems.&lt;br /&gt;
&lt;br /&gt;
==Unpackaged mods==&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to test your mod without ever packaging it,&lt;br /&gt;
by placing your files in a subdirectory alongside the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===Mod directory===&lt;br /&gt;
&lt;br /&gt;
First, create a new subdirectory alongside the EDuke32 executable,&lt;br /&gt;
and name it &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
All of your mod&#039;s files will live here, including&lt;br /&gt;
CON scripts, DEF files, maps, graphical and audio assets, and so on.&lt;br /&gt;
You can name and organize these in subdirectories as you please,&lt;br /&gt;
with only the following exception.&lt;br /&gt;
&lt;br /&gt;
===CON entrypoint===&lt;br /&gt;
&lt;br /&gt;
Next, create a CON script named &#039;&#039;eduke.con&#039;&#039;&lt;br /&gt;
directly inside of the &#039;&#039;mymod&#039;&#039; directory&lt;br /&gt;
and add the following line:&lt;br /&gt;
&lt;br /&gt;
 include game.con&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;game.con&#039;&#039; here refers to a file in &#039;&#039;duke3d.grp&#039;&#039;, not a part of your mod.&lt;br /&gt;
EDuke32 will automatically load &#039;&#039;eduke.con&#039;&#039; if present, or &#039;&#039;game.con&#039;&#039; if not.&lt;br /&gt;
Since &#039;&#039;eduke.con&#039;&#039; is loaded in this case, we must load &#039;&#039;game.con&#039;&#039; ourselves.&lt;br /&gt;
&lt;br /&gt;
===DEF entrypoint===&lt;br /&gt;
&lt;br /&gt;
Now, create a file called &#039;&#039;mymod.def&#039;&#039; and leave it blank for now.&lt;br /&gt;
This will contain any [[DEF_Language]] instructions your mod needs.&lt;br /&gt;
In &#039;&#039;eduke.con&#039;&#039;, add the following line:&lt;br /&gt;
&lt;br /&gt;
 setdefname mymod.def&lt;br /&gt;
&lt;br /&gt;
The [setdefname] command tells Eduke32 where to find your DEF file.&lt;br /&gt;
Note that you could name it whatever you like or put it in a subdirectory&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Episodes and levels===&lt;br /&gt;
&lt;br /&gt;
Finally, fire up Mapster32, create a quick map,&lt;br /&gt;
and save it in &#039;&#039;mymod&#039;&#039; as &#039;&#039;mymap01.map&#039;&#039;.&lt;br /&gt;
Add the following to &#039;&#039;eduke.con&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 definevolumename 0 Episode One&lt;br /&gt;
 definelevelname 0 0 mymap01.map 01:02 02:03 My Map One&lt;br /&gt;
&lt;br /&gt;
The [[definevolumename]] command&lt;br /&gt;
registers &amp;quot;Episode One&amp;quot; as the name of your first episode.&lt;br /&gt;
The [[definelevelname]] command registers&lt;br /&gt;
the path to the first map of the first episode,&lt;br /&gt;
as well as target completion times and the name of the map.&lt;br /&gt;
&lt;br /&gt;
Again, you could name the map whatever you like,&lt;br /&gt;
or put it in a subdirectory,&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Testing your mod===&lt;br /&gt;
&lt;br /&gt;
To launch the mod in its unpackaged form,&lt;br /&gt;
simply run the following command:&lt;br /&gt;
&lt;br /&gt;
 eduke32 -j mymod&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not comfortable working from the command line,&lt;br /&gt;
create a shortcut to eduke32.exe, right click it, select &#039;&#039;Properties&#039;&#039;,&lt;br /&gt;
and edit the &#039;&#039;Target&#039;&#039; field to add &#039;&#039;-j&#039;&#039; at the end:&lt;br /&gt;
&lt;br /&gt;
 C:\path\to\eduke32.exe -j&lt;br /&gt;
&lt;br /&gt;
You can now drag your &#039;&#039;mymod&#039;&#039; folder onto the shortcut to launch it.&lt;br /&gt;
If you want the shortcut to be a dedicated launcher for your mod&lt;br /&gt;
instead of having to drag the folder onto it,&lt;br /&gt;
add &#039;&#039;mymod&#039;&#039; after the &#039;&#039;-j&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Packaging mods==&lt;br /&gt;
&lt;br /&gt;
===The easy way===&lt;br /&gt;
&lt;br /&gt;
To package your mod, simply zip up the contents of &#039;&#039;mymod&#039;&#039;&lt;br /&gt;
using a tool like [https://www.7-zip.org/ 7-Zip].&lt;br /&gt;
Be sure to zip up the contents rather than the directory itself;&lt;br /&gt;
the zip file should not include a directory called &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test the packaged mod, simply drag the zip file onto the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===The Git way===&lt;br /&gt;
&lt;br /&gt;
Explaining version control is outside the scope of this tutorial,&lt;br /&gt;
but if you&#039;re already using [https://git-scm.com/ Git], you can use&lt;br /&gt;
[https://git-scm.com/docs/git-archive git-archive] to package your mod:&lt;br /&gt;
&lt;br /&gt;
 # after committing everything...&lt;br /&gt;
 git archive HEAD -o ../mymod.zip&lt;br /&gt;
&lt;br /&gt;
This will keep Git&#039;s dotfiles from getting packaged,&lt;br /&gt;
as well as anything listed in &#039;&#039;.gitignore&#039;&#039;&lt;br /&gt;
or having the &#039;&#039;export-ignore&#039;&#039; attribute.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13935</id>
		<title>Packaging mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Packaging_mods&amp;diff=13935"/>
		<updated>2020-07-30T03:03:23Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Create tutorial on packaging mods&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intro==&lt;br /&gt;
&lt;br /&gt;
This guide outlines a scheme for packaging mods,&lt;br /&gt;
including directory structure, essential files, useful CON commands,&lt;br /&gt;
instructions on launching packaged and unpacked mods,&lt;br /&gt;
and tips for working with version control.&lt;br /&gt;
&lt;br /&gt;
This guide assumes you are modding for EDuke32 on Windows;&lt;br /&gt;
you may need to make adjustments for other games&lt;br /&gt;
or operating systems.&lt;br /&gt;
&lt;br /&gt;
==Unpackaged mods==&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to test your mod without ever packaging it,&lt;br /&gt;
by placing your files in a subdirectory alongside the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===Mod directory===&lt;br /&gt;
&lt;br /&gt;
First, create a new subdirectory alongside the EDuke32 executable,&lt;br /&gt;
and name it &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
All of your mod&#039;s files will live here, including&lt;br /&gt;
CON scripts, DEF files, maps, graphical and audio assets, and so on.&lt;br /&gt;
You can name and organize these in subdirectories as you please,&lt;br /&gt;
with only the following exception.&lt;br /&gt;
&lt;br /&gt;
===CON entrypoint===&lt;br /&gt;
&lt;br /&gt;
Next, create a CON script named &#039;&#039;eduke.con&#039;&#039;&lt;br /&gt;
directly inside of the &#039;&#039;mymod&#039;&#039; directory&lt;br /&gt;
and add the following line:&lt;br /&gt;
&lt;br /&gt;
 include game.con&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;game.con&#039;&#039; here refers to a file in &#039;&#039;duke3d.grp&#039;&#039;, not a part of your mod.&lt;br /&gt;
Eduke32 will automatically load &#039;&#039;eduke.con&#039;&#039; if present, or &#039;&#039;game.con&#039;&#039; if not.&lt;br /&gt;
Since &#039;&#039;eduke.con&#039;&#039; is loaded in this case, we must load &#039;&#039;game.con&#039;&#039; ourselves.&lt;br /&gt;
&lt;br /&gt;
===DEF entrypoint===&lt;br /&gt;
&lt;br /&gt;
Now, create a file called &#039;&#039;mymod.def&#039;&#039; and leave it blank for now.&lt;br /&gt;
This will contain any [[DEF_Language]] instructions your mod needs.&lt;br /&gt;
In &#039;&#039;eduke.con&#039;&#039;, add the following line:&lt;br /&gt;
&lt;br /&gt;
 setdefname mymod.def&lt;br /&gt;
&lt;br /&gt;
The [setdefname] command tells Eduke32 where to find your DEF file.&lt;br /&gt;
Note that you could name it whatever you like or put it in a subdirectory&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Episodes and levels===&lt;br /&gt;
&lt;br /&gt;
Finally, fire up Mapster32, create a quick map,&lt;br /&gt;
and save it in &#039;&#039;mymod&#039;&#039; as &#039;&#039;mymap01.map&#039;&#039;.&lt;br /&gt;
Add the following to &#039;&#039;eduke.con&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 definevolumename 0 Episode One&lt;br /&gt;
 definelevelname 0 0 mymap01.map 01:02 02:03 My Map One&lt;br /&gt;
&lt;br /&gt;
The [[definevolumename]] command&lt;br /&gt;
registers &amp;quot;Episode One&amp;quot; as the name of your first episode.&lt;br /&gt;
The [[definelevelname]] command registers&lt;br /&gt;
the path to the first map of the first episode,&lt;br /&gt;
as well as target completion times and the name of the map.&lt;br /&gt;
&lt;br /&gt;
Again, you could name the map whatever you like,&lt;br /&gt;
or put it in a subdirectory,&lt;br /&gt;
and adjust the line above as necessary.&lt;br /&gt;
&lt;br /&gt;
===Testing your mod===&lt;br /&gt;
&lt;br /&gt;
To launch the mod in its unpackaged form,&lt;br /&gt;
simply run the following command:&lt;br /&gt;
&lt;br /&gt;
 eduke32 -j mymod&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not comfortable working from the command line,&lt;br /&gt;
create a shortcut to eduke32.exe, right click it, select &#039;&#039;Properties&#039;&#039;,&lt;br /&gt;
and edit the &#039;&#039;Target&#039;&#039; field to add &#039;&#039;-j&#039;&#039; at the end:&lt;br /&gt;
&lt;br /&gt;
 C:\path\to\eduke32.exe -j&lt;br /&gt;
&lt;br /&gt;
You can now drag your &#039;&#039;mymod&#039;&#039; folder onto the shortcut to launch it.&lt;br /&gt;
If you want the shortcut to be a dedicated launcher for your mod&lt;br /&gt;
instead of having to drag the folder onto it,&lt;br /&gt;
add &#039;&#039;mymod&#039;&#039; after the &#039;&#039;-j&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Packaging mods==&lt;br /&gt;
&lt;br /&gt;
===The easy way===&lt;br /&gt;
&lt;br /&gt;
To package your mod, simply zip up the contents of &#039;&#039;mymod&#039;&#039;&lt;br /&gt;
using a tool like [https://www.7-zip.org/ 7-Zip].&lt;br /&gt;
Be sure to zip up the contents rather than the directory itself;&lt;br /&gt;
the zip file should not include a directory called &#039;&#039;mymod&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To test the packaged mod, simply drag the zip file onto the EDuke32 executable.&lt;br /&gt;
&lt;br /&gt;
===The Git way===&lt;br /&gt;
&lt;br /&gt;
Explaining version control is outside the scope of this tutorial,&lt;br /&gt;
but if you&#039;re already using [https://git-scm.com/ Git], you can use&lt;br /&gt;
[https://git-scm.com/docs/git-archive git-archive] to package your mod:&lt;br /&gt;
&lt;br /&gt;
 # after committing everything...&lt;br /&gt;
 git archive HEAD -o ../mymod.zip&lt;br /&gt;
&lt;br /&gt;
This will keep Git&#039;s dotfiles from getting packaged,&lt;br /&gt;
as well as anything listed in &#039;&#039;.gitignore&#039;&#039;&lt;br /&gt;
or having the &#039;&#039;export-ignore&#039;&#039; attribute.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Swinging_Doors&amp;diff=13934</id>
		<title>Swinging Doors</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Swinging_Doors&amp;diff=13934"/>
		<updated>2020-07-26T03:25:46Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* Swinging Doors */ Edit on behalf of corpusc on Duke4 discord&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Build Intro}}&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE: Much of information on this page is from around 1999.  Some may be outdated, and some may be incorrect -- this page exists to get you started with the Level Editing and may not currently cover some of the additional features available in Mapster32.&amp;lt;/strong&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
==Swinging Doors==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Map Name: [[Media:Tutorial.map|TUTORIAL.MAP]] (ROOM 1-D)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Swinging doors are possibly the coolest and most useful doors in Duke Nukem 3D, but they can be a pain to construct. Follow these steps, however, and you should be able to make a working swinging door.&lt;br /&gt;
&lt;br /&gt;
:STEP 1: Create the room and the hallway that the door will separate. The ceiling height of the hallway should be the height of the door. The hallway and the room should be two separate sectors (there should be a red line between these two sectors in 2D mode).&lt;br /&gt;
&lt;br /&gt;
:STEP 2: Create the door sector on the side of the red line that the door will swing in to. This sector should be valid player space. In 3D mode, raise the floor of this sector to the height that you want the door to be (or you can lower the ceiling; whichever you prefer).&lt;br /&gt;
&lt;br /&gt;
::NOTE 1: The door sector should be made within another, valid sector.&lt;br /&gt;
&lt;br /&gt;
:STEP 3: Now move the door sector to where it should be. One side of the door should be in the exact position as the red line separating the hallway from the room (i.e. - two of the vertices of the door should sit exactly on top of the two vertices of the hallway and room junction).&lt;br /&gt;
&lt;br /&gt;
::NOTE 2: The door should be in the sector in which it will swing into. If it is not, some big problems can occur.&lt;br /&gt;
&lt;br /&gt;
:STEP 4: Give the door sector a sector lotag value of 23.&lt;br /&gt;
&lt;br /&gt;
:STEP 5: Place one sector effector sprite in the door. Give this sprite a lotag value of 11, and a unique hitag value. Now you need to move the sector effector at the pivot point for the door. Turn off the grid lock feature by pressing the [L] key in 2D mode. Move the sector effector sprite as close to the pivoting corner of the door as you can, but *do not* place this sprite on the corner itself. Zoom in as far as you can possibly go in 2D mode to see just where you are putting it.&lt;br /&gt;
&lt;br /&gt;
:STEP 6: Now you need to set the angle for the door. If you want the door to swing in a clockwise direction, point the sector effector south. If you want the door to swing in a counter-clockwise direction, point the sector effector north.&lt;br /&gt;
&lt;br /&gt;
:STEP 7: Place one Music&amp;amp;SFX sprite in the door. Give this sprite a lotag value of 165. You are now finished! Take a look at the tutorial map if you don&#039;t quite understand.&lt;br /&gt;
&lt;br /&gt;
::NOTE 3: Swinging doors will not work correctly in any of the following situations:&lt;br /&gt;
&lt;br /&gt;
::* If the floor or ceiling is sloped.&lt;br /&gt;
::* If the door swings into another sector.&lt;br /&gt;
::* If the door is not a valid player space sector.&lt;br /&gt;
&lt;br /&gt;
:STEP 8 (optional): Put a GPSPEED sprite in the door to control its speed.&lt;br /&gt;
&lt;br /&gt;
::* Supports only values 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ...&lt;br /&gt;
&lt;br /&gt;
==Swinging Glass Doors==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Map Name: [[Media:Tutorial.map|TUTORIAL.MAP]] (ROOM 1-E)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Swinging glass doors look great and add a nice touch to virtually any level. They aren&#039;t easy, however, so follow these instructions very carefully.&lt;br /&gt;
&lt;br /&gt;
:STEP 1: Create a swinging door (see the swinging door how-to) but do not raise the door sector up from the floor.&lt;br /&gt;
&lt;br /&gt;
:STEP 2: At the end of the door farthest from the pivot point (or farthest from the sector effector with lotag 11 - same thing) create a small square sector inside of the door. This sector should *NOT* be valid player space (i.e. - the walls of this sector should be white).&lt;br /&gt;
&lt;br /&gt;
:STEP 3: Mask the outermost red line of the door itself, changing the mask texture to the glass texture. The [M] key in 3D mode creates a masked wall. Press the [B] and [H] keys on this mask. A point can be inserted on this line (before masking it) if desired, in order to prevent the glass texture from being as long as the door.&lt;br /&gt;
&lt;br /&gt;
:STEP 4: Lower the ceiling of the door sector a few [PGDN] units (2 works nicely) and raise the floor of the door sector a few [PGUP] units (again, 2 works nicely). You&#039;re done! Take a look at the tutorial map if you don&#039;t quite understand.&lt;br /&gt;
&lt;br /&gt;
==Problems and Fixes with Swinging Doors==&lt;br /&gt;
&lt;br /&gt;
The following is a list of common problems and their solutions for working with swinging doors.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PROBLEM&#039;&#039;&#039;: My door disappears when it opens! What do I do?&lt;br /&gt;
:&#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: The problem here is that a corner of your door is actually going *outside* of your map (into nothingness) and is causing your door to disappear. Either move the sector effector sprite with the lotag of 11 closer to the vertex of the door, or angle the corner that travels outside the map. Also make sure that you are not building a door that swings in sectors of different height or sloped sectors.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PROBLEM&#039;&#039;&#039;: My door swings in the wrong direction! How do I fix this?&lt;br /&gt;
:&#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: You need to fix the direction that the sector-effector is pointing. To make the door swing clockwise, the sector effector needs to point upwards. To make it swing counter clockwise, you need to point the SE down.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PROBLEM&#039;&#039;&#039;: When I make my door, I try to move it and it loses it&#039;s unique sector lotag/hitag.&lt;br /&gt;
:&#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: The &#039;door&#039; sector has to be created inside the sector where it will swing into. Do not create it and then move it into another sector or the it will lose it&#039;s unique lotag/hitag.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PROBLEM&#039;&#039;&#039;: When I open my door, the walls move with it! How do I fix this?&lt;br /&gt;
:&#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: When you create the &#039;door&#039; sector, it should be a free standing sector. In other words the vertices should NOT be connected to any other vertices. AFTER the door sector has been made, you may move it (to the door hole) and now the vertices may overlap because they will not connect now. Be sure of this or the walls will be pulled along with the door!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PROBLEM&#039;&#039;&#039;: When I open my swinging door, the door kills me! How can I stop this from happening?&lt;br /&gt;
:&#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: Make sure that the sector effector sprite is actually INSIDE of the sector, and NOT on a line of the sector.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PROBLEM&#039;&#039;&#039;: When I open one swinging door, a completely different door opens up. What&#039;s the deal?&lt;br /&gt;
:&#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: The hitags for your sector effector sprites are the same. You must use UNIQUE hitags for doors that you want to open separately.&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing Doors]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User_talk:Micky_C&amp;diff=13931</id>
		<title>User talk:Micky C</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User_talk:Micky_C&amp;diff=13931"/>
		<updated>2020-07-22T03:04:50Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: message&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey, made some edits to your TROR guide to remove some outdated bits specific to rendering backends. Hendricks266 suggested I give you a heads up in case you feel like editing in more current info some time. -- Rob&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=True_Room_Over_Room_Mapping_Guide&amp;diff=13930</id>
		<title>True Room Over Room Mapping Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=True_Room_Over_Room_Mapping_Guide&amp;diff=13930"/>
		<updated>2020-07-22T02:19:15Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* Polymost renderer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Build Intro}}&lt;br /&gt;
&lt;br /&gt;
True Room Over Room is a feature new to EDuke32 that allows for the construction of [[sector]]s in a vertical arrangement. Other build games (Shadow Warrior, Blood, Redneck Rampage) are able to fake ROR by having sectors in different parts of the map and rendering them on top of each other, and EDuke32 has a similar feature using Sector Effectors. The difference between game ROR and TROR is that the sectors are physically on top of each other, making editing a lot easier and more automatic, while also making it easier to visualize what you&#039;re building. For the more technically minded, TROR is part of the engine and map format themselves, instead of an effect bolted on in the game code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TROR Editing Modes==&lt;br /&gt;
There are two modes you should be aware of before starting to build with TROR.&lt;br /&gt;
&lt;br /&gt;
===Side view (orthographic view) mode===&lt;br /&gt;
This mode allows you see a 3D representation of your map while in 2D mode. This is toggled with &#039;&#039;&#039;[F3]&#039;&#039;&#039;. It can be rotated with the &#039;&#039;&#039;[Q]&#039;&#039;&#039; and &#039;&#039;&#039;[W]&#039;&#039;&#039; buttons, and the angle of viewing can be changed by pressing &#039;&#039;&#039;[A]&#039;&#039;&#039; and &#039;&#039;&#039;[Z]&#039;&#039;&#039;.&lt;br /&gt;
This mode is absolutely essential not only because it allows you to actually see what you&#039;re doing, but because in order to properly use TROR, you need to designate which is the &#039;active&#039; layer that new sectors will connect to. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be done in 2 ways. &lt;br /&gt;
&lt;br /&gt;
The first way is to press &#039;&#039;&#039;[Ctrl-A]&#039;&#039;&#039; which will grey out all other layers except the one the viewpoint (the arrow in 2D/side view mode)is in, which is the active layer. You can move the view point up and down, allowing you to edit above and below layers, by either pressing &#039;&#039;&#039;[page up]&#039;&#039;&#039; and &#039;&#039;&#039;[page down]&#039;&#039;&#039; respectively, or more accurately by pressing down the &#039;&#039;&#039;[middle mouse button]&#039;&#039;&#039; and moving the mouse forward or backwards. This method is usually prefered as it gives you much more control over the vertical position of the viewpoint. If you find the greyed-out walls distracting, you can remove them altogether by pressing &#039;&#039;&#039;[Ctrl-Alt-A]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The second way allows for more precision as you can narrow the active editing range to the height of a single (or set of) sectors. Firstly, select the sector(s) that you want to be able to edit with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;, and press &#039;&#039;&#039;[Ctrl-R]&#039;&#039;&#039;. It&#039;s as easy as that. Press &#039;&#039;&#039;[Ctrl-R]&#039;&#039;&#039; without having any sectors highlighted to unlock the range again and be able to edit them normally.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Invisible surfaces viewing mode=== &lt;br /&gt;
This is for 3D mode when you want to toggle seeing invisible objects.&lt;br /&gt;
All you have to do to toggle this mode is press &#039;&#039;&#039;[I]&#039;&#039;&#039;, which primarily allows you to see objects you&#039;ve made invisible with &#039;&#039;&#039;[&#039;-I]&#039;&#039;&#039;. However, the reason why it&#039;s so useful here, is that it also shows you the boundaries between TROR layers (which are invisible in-game). This is a huge benefit when you want to visualize/figure out what&#039;s actually going on. It also allows you to edit the TROR surfaces and apply transparent or masked floors, and edit characteristics like the blocking and hitscan bits.&lt;br /&gt;
&lt;br /&gt;
==Properties and Terminology==&lt;br /&gt;
TROR is created by selecting a sector and extending it (this will be covered later in method). This means that it creates a new sector directly on top of or below the selected sector, which is exactly the same size and shape as the original. The ceiling of the bottom sector is linked with the floor of the top sector. It then makes sense that the extended sector is called an &#039;&#039;&#039;extension&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can have more than one extension on a sector. You can extend it above and below, then take the bottom and extend that down again and again, and the same with the top. You are effectively stacking sectors on top of each other, so these sectors are part of a &#039;&#039;&#039;stack&#039;&#039;&#039;. The great thing about stacks (even with only one extension) is that if you move the vertex of a wall of one layer, it will automatically move the vertices of all the other layers, so that they&#039;re easy to change the shape of without worrying about breaking the connection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can highlight a group of sectors and extend them all at the same time so that there can be a single extension covering them all. This is useful because it saves walls, and you can still edit all the child sectors with ease. Now, as soon as you extend these sectors so that they share an extension, they all become a part of the same &#039;&#039;&#039;bunch&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you take a room with a child sector in the middle, and extend everything upwards except the child layer, there will now be void space in the top layer where the child sector is. If you press &#039;&#039;&#039;[Ctrl-S]&#039;&#039;&#039; there to make it into a child sector in the top layer, you&#039;ll then find that you have a floating normal (non-TROR) sector between the two TROR layers that you can do with as you please. This is called an &#039;&#039;&#039;island&#039;&#039;&#039;. I suppose it&#039;s still an island even if you don&#039;t make it a child sector in the top layer but hey, now you can create floating sectors. These can potentially be glitchy if you&#039;re not using the polymer renderer, but we&#039;ll get onto that later.&lt;br /&gt;
&lt;br /&gt;
==TROR related keys==&lt;br /&gt;
The following are a list of keys which are related to editing TROR. They can also be found in the [http://wiki.eduke32.com/wiki/Build/Mapster32_Keyboard_Commands mapster32 keyboard commands page]&lt;br /&gt;
&lt;br /&gt;
===2D mode===&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; sector extension prompt (sectors to extend must be highlighted)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; make sandwich [&#039;&#039;if extending a sector in a direction that has already been extended, see below&#039;&#039;]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; punch loop through extension (loop points must be highlighted, e.g. with &#039;&#039;&#039;[Right Shift]&#039;&#039;&#039;+&#039;&#039;&#039;[Left Ctrl]&#039;&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-A]&#039;&#039;&#039; toggle auto-grayout of non-extended sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-J]&#039;&#039;&#039; TROR-join sectors. The selection must consist of the two sets of sectors you wish to join.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-U]&#039;&#039;&#039; Clear extension: delete the bunch (i.e. ceiling-floor connection) of the aimed-at sector&#039;s floor&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[PGUP]&#039;&#039;&#039;/&#039;&#039;&#039;[PGDN]&#039;&#039;&#039; Change &#039;player&#039; height in discrete steps in order to go through the different levels&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-tab]&#039;&#039;&#039; Display one currently aimed at sector (of potentially many that lie under the mouse crosshair)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[HOME]&#039;&#039;&#039; and &#039;&#039;&#039;[END]&#039;&#039;&#039; as modifiers to AltGr: select all sectors whose floor&#039;s/ceiling&#039;s bunchnum equal the bunchnum of the aimed at sector (useful for further operations on whole bunches)&lt;br /&gt;
&lt;br /&gt;
===3D mode===&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039; invisibility preview: toggle fake ROR texture on non-masked portals&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LENTER+CTRL&#039;&#039;&#039; When aiming at an extended floor/ceiling, paste to all floors/ceilings of the bunch of the aimed at one&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;T&#039;&#039;&#039;, &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;H&#039;&#039;&#039; work as with walls, though they set/toggle the bits only on &#039;&#039;&#039;one&#039;&#039;&#039; side&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Highlighting===&lt;br /&gt;
Not really specific to TROR, but having greater control over which or how many sectors you can highlight makes doing extensions in TROR much easier. Make sure you&#039;re familiar with [http://wiki.eduke32.com/wiki/Level_editing#Copying_and_Pasting_Sectors advanced sector highlighting].&lt;br /&gt;
&lt;br /&gt;
The information on the advanced features is outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can highlight a second, third, and multiple sectors by holding down &#039;&#039;&#039;[&#039;]&#039;&#039;&#039; as you drag the selection box over them. This way you can highlight sectors in different parts of the map. Likewise, use the &#039;&#039;&#039;[;]&#039;&#039;&#039; key to deselect sectors. A small plus or minus will appear next to the cursor depending on which button you&#039;re holding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can select individual sectors with the mouse by moving the cursor inside the sector you want, holding &#039;&#039;&#039;[RIGHT ALT]&#039;&#039;&#039;, and holding &#039;&#039;&#039;[RIGHT CTRL]&#039;&#039;&#039; as you release &#039;&#039;&#039;[RIGHT ALT]&#039;&#039;&#039;. The sector is now highlighted. This method of selection also works with &#039;&#039;&#039;[&#039;]&#039;&#039;&#039; and &#039;&#039;&#039;[;]&#039;&#039;&#039; to select/deselect additional sectors by mouse. Simply hold &#039;&#039;&#039;[RIGHT ALT]&#039;&#039;&#039; and the appropriate button depending on what you want to do, then hold &#039;&#039;&#039;[RIGHT CTRL]&#039;&#039;&#039; while releasing the other buttons. This becomes very quick and easy to do after doing it a few times.&lt;br /&gt;
&lt;br /&gt;
==TROR Mapping Examples==&lt;br /&gt;
&lt;br /&gt;
===Manhole Sewer Example===&lt;br /&gt;
&lt;br /&gt;
In this straightforward example, you&#039;re going to make a manhole that goes below a street, and some area around the end of the hole at the bottom.&lt;br /&gt;
&lt;br /&gt;
1. Create the child sector where you want the manhole to be.&lt;br /&gt;
&lt;br /&gt;
2. Highlight the sector with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
3. Press &#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039;. Mapster will prompt you whether you want to extend up or down.&lt;br /&gt;
&lt;br /&gt;
4. We want to extend down so press &#039;&#039;&#039;[Z]&#039;&#039;&#039; (&#039;&#039;&#039;[A]&#039;&#039;&#039; if you&#039;re extending up).&lt;br /&gt;
&lt;br /&gt;
5. Go into side view mode with &#039;&#039;&#039;[F3]&#039;&#039;&#039;, and move the viewpoint down until you&#039;re editing the bottom layer.&lt;br /&gt;
&lt;br /&gt;
6. The child sector you created should now have a white boundary, with the street sectors above either greyed out or gone depending on your settings. &lt;br /&gt;
&lt;br /&gt;
7. Now you can treat the manhole sector (the extension) as the very first room you&#039;ve made on a new map. You can draw sectors on the side of it to attach some rooms there. If you go into 3D mode, you should be able to see that if you go down that manhole, there should now be some area at the bottom which overlaps the street. This was not previously possible without using some kind of cheap trick. Congratulations, you&#039;ve just made TROR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Two Story Building Example===&lt;br /&gt;
&lt;br /&gt;
I&#039;m sure that a big reason that people want to use TROR is to build multiple story buildings, and this is how you do it.&lt;br /&gt;
&lt;br /&gt;
1. Design the first floor of your building, both inside and out. This is going to be the first layer, which means the ceiling of every sector, especially the outdoor sectors should not be any higher than the roof of the first floor. Pretend that the second floor doesn&#039;t even exist.&lt;br /&gt;
&lt;br /&gt;
2. Make your windows, doors, and anything you want.&lt;br /&gt;
&lt;br /&gt;
Highlight with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039; all of the &#039;&#039;outdoor&#039;&#039; sectors (the outdoor sectors should all have the same ceiling height, and should not be parallaxed). Knowing your advanced highlighting will come in useful here to select all the sectors.&lt;br /&gt;
&lt;br /&gt;
3. Extend the highlighted area up, and make the top layer the active editing layer.&lt;br /&gt;
&lt;br /&gt;
4. You should notice that the outline of your house has become completely white, and the area inside the house is empty. This is because this area is the second floor of your house.&lt;br /&gt;
&lt;br /&gt;
5. Make a sector inside the house outline, this will be the room on the second floor of your house. Draw small sectors between that room and the house outline to create second floor windows. Alternatively you could just press &#039;&#039;&#039;[Ctrl-S]&#039;&#039;&#039; inside the house sector to make it a regular child sector, and if you go into 3D mode, you&#039;ll see your house has a roof you can stand on top of.&lt;br /&gt;
&lt;br /&gt;
6. If you&#039;re learning TROR for the first time, it is very helpful at this point to go into 3D mode and press &#039;&#039;&#039;[i]&#039;&#039;&#039; to reveal the boundaries between layers so that you can understand what you&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
7. You can connect the ground floor to the second floor the same way you&#039;d connect two sector-over-sector sectors; by having a staircase or lift that connects to a different area on the top floor than it does on the bottom (because a lift for example cannot directly cross TROR layers, therefore it must be connected to sectors which do not overlap; i.e have the entrance on one side and the exit on the other.)&lt;br /&gt;
Or you can connect the ground floor and second floor via TROR and have some sprite stairs or something.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage you should have a perfect two story house where you can look into and enter both stories. Cool stuff eh? ;)&lt;br /&gt;
&lt;br /&gt;
There&#039;s nothing stopping you from going on to build a third.. forth.. fifth.. floor in the same manner either.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===TROR water example===&lt;br /&gt;
&lt;br /&gt;
This is how you create transparent water using TROR. It works just like regular water, but there are a few things you need to be aware of.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Create a main sector, then a child sector in that and extend it downwards. &lt;br /&gt;
&lt;br /&gt;
2. Make both the top and bottom of the TROR surface masked or transparent, and give it the water texture.&lt;br /&gt;
&lt;br /&gt;
3. Give the floor of the top sector a lotag of 1 for water. Give the floor of the bottom sector a lotag of 2 for underwater.&lt;br /&gt;
&lt;br /&gt;
4. Place an SE 7 with the same hitag in the same position in both the top and bottom sector.&lt;br /&gt;
&lt;br /&gt;
5. This is the one that people normally forget. Set the TROR surface in both the top and bottom layer to BLOCKING otherwise it will not work as intended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See, it&#039;s not too bad, just remember the lotags and the blocking. Note if you split up the water sector or add more sectors, make sure those sectors are in both the top and bottom layers, and have new SE 7s, just like normal water. In the future TROR water will be more automatic in that you won&#039;t need the SE 7, however this is incomplete as of this writing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Something that might make life a bit easier is that if you extend the floor of the below-water sector downwards, you can then edit the floor of the new bottom layer and make as complex as you want without having to worry about placing lots of SE 7s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Retro-fitting via Joining Example===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re absolutely clueless with the whole idea of extending, or you want to go back and retrofit some TROR into maps you&#039;ve done in the past, there&#039;s a very easy way of joining them to form TROR.&lt;br /&gt;
If you have two sectors that have the same shape, area, and external vertices have the same relative positions (essentially they&#039;re the same sector, at least as far as their edges are concerned), then all you have to do is highlight both sectors with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;, and press &#039;&#039;&#039;[Ctrl-J]&#039;&#039;&#039; to join, the same as joining two sectors normally. It will then prompt you with a few questions such as which sector you want to have on top of the other, which sector(s) you want to move (doesn&#039;t matter most of the time), and whether you&#039;d like to move all the connected non-TROR sectors as well (definitely yes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The good thing about this method is that besides the questions you have to answer, mapster does everything automatically, it even moves the heights for you. Now there&#039;ll be a quick example of this method below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Make a child sector in a larger sector and copy-paste it into void space.&lt;br /&gt;
&lt;br /&gt;
2. Give the floor of the original child sector and the ceiling of the new sector the water texture.&lt;br /&gt;
&lt;br /&gt;
3. Highlight both the child sector and new sector with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
4. Press &#039;&#039;&#039;[Ctrl-J]&#039;&#039;&#039; and answer the simple questions.&lt;br /&gt;
&lt;br /&gt;
5. You should end up with a TROR water sector just as you would via the extension method. You can now alter the transparency of the water to your preference.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Sandwiching and Sector Punching===&lt;br /&gt;
It&#039;s possible and easy to create a new TROR layer between two TROR layers. All you have to do is highlight one of them, and extend it as you would normally, and it automatically adds a new layer in the middle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to easily create an island sector in the middle of a TROR sector. This is called &#039;&#039;sector punching&#039;&#039;, and mainly involves stamping a child sector into the sector below or above. Follow the example below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Extend a sector downwards.&lt;br /&gt;
&lt;br /&gt;
2. Create a child sector in the original sector.&lt;br /&gt;
&lt;br /&gt;
3. Select the vertices of the child sector with &#039;&#039;&#039;[Right-Shift]&#039;&#039;&#039; or &#039;&#039;&#039;[R-Ctrl + R-Shift]&#039;&#039;&#039; and press &#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; as though you&#039;re extending a sector.&lt;br /&gt;
&lt;br /&gt;
4. It will prompt you whether to punch up or down, in this case, choose down and hit &#039;&#039;&#039;[Enter]&#039;&#039;&#039;. A sector identical in size, shape and position should now be in the bottom layer.&lt;br /&gt;
&lt;br /&gt;
5. Point the mouse cursor at the child sector in the top layer and press &#039;&#039;&#039;[Ctrl-U]&#039;&#039;&#039;. It will prompt you whether you want to break the connection, and unless you press [Ctrl-U] accidentally, you usually do.&lt;br /&gt;
&lt;br /&gt;
6. The child sector should now be a floating sector island. Have fun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;&#039;[Ctrl-U]&#039;&#039;&#039; only breaks the connection of a single sector if that sector has been punched. Otherwise it&#039;ll break the connection of the entire bunch, which is usually bad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===List of TROR maps===&lt;br /&gt;
&lt;br /&gt;
This (hopefully up to date) list contains maps which make heavy use of the TROR feature in order to make a huge variety of constructions. They each contain a wealth of examples for you to look at to see what&#039;s possible and how it works/how to make it. This is not a complete list, as other maps make minor or simple use of the effect and hence are not listed here.&lt;br /&gt;
&lt;br /&gt;
1. The trueror.map in the Samples folder included with eduke32 contains a large amount of random examples of TROR.&lt;br /&gt;
&lt;br /&gt;
2. Retaliation is a small hi-tech map by Loke that was the first proper TROR map and makes some great use of the feature. [http://www.scent-88.com/reviews/R/retaliation/retaliation.php Download here]&lt;br /&gt;
&lt;br /&gt;
3. Parkade is a large city themed map containing large multiple story buildings, along with a large amount of unique, pioneering uses of the feature, made by myself (Micky C) and Paul B. It is the largest, most extensive TROR map and perhaps the best example of what TROR is capable of so far, if I do say so myself. [http://www.scent-88.com/reviews/P/parkade/parkade.php Download here]&lt;br /&gt;
&lt;br /&gt;
4. Brooklyn Bridge is another city themed map which also makes extensive and interesting use of TROR, such as an alien ship that flies over water, shooting rockets, and in vents. [http://www.scent-88.com/reviews/B/brooklyn/brooklyn.php Download here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tricks and Effects with TROR==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SE 13 destructible floor/ceiling===&lt;br /&gt;
&lt;br /&gt;
If you have a TROR extension in the floor, you can place an SE 13 on it (facing downwards in 2D mode, and it will become a solid floor in-game (blocked and masked). When the hitag is activated, the TROR surface will become invisible as though a hole has just formed in the floor. You can place the SE 13 on the surface, or above, in which case the floor will initially have the height of the SE 13 just like with the original effect. You can also place it near the ceiling to make the SE 13 control the ceiling instead, or have one near the ceiling and one near the floor to control both.&lt;br /&gt;
&lt;br /&gt;
When placed in a TROR extension with many sectors, it will not just control the sector, but rather the entire extension. So you can add sectors and give them different textures and don&#039;t have to worry about adding extra SE 13&#039;s. If you want to have TROR surfaces have different heights with different SE 13 sprites, they need to be different extensions; i.e they need to have a sector in both the top and bottom layer, and be extended individually.&lt;br /&gt;
&lt;br /&gt;
The SE 13 also works with TROR slopes, allowing you to create relatively complex destructible objects compared to sprites. But remember that TROR is pretty wall hungry, so keep an eye on complexity.&lt;br /&gt;
Note that regardless of whether a TROR surface is set to masked or transparent in mapster, it will always become invisible after SE 13 activation.&lt;br /&gt;
&lt;br /&gt;
===TROR water height manipulation===&lt;br /&gt;
&lt;br /&gt;
TROR water can also be made to move up and down using the SE 31/32, much like the raising/lowering submergible water in e1l4 Toxic Dump. The effect is the same, however it&#039;s easier with TROR, because you only have to set up the effect on one side, either in the top layer or bottom layer, because this effect is set up so that if the ceiling of the bottom sector is moved, it moves the floor of the top sector as well, and vice versa. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual Glitches and Workarounds==&lt;br /&gt;
&lt;br /&gt;
===Software renderer===&lt;br /&gt;
Even though TROR sectors are already physically overlapping, the 8-bit software renderer still needs to render them separately, having to do an extra rendering pass for each additional TROR extension in view. Theoretically if you create a huge amount of extensions in the same area the framerate could potentially drop to unplayable levels, however this is far fetched and I wouldn&#039;t worry about it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The real problem with the software renderer is HOM glitching. In each rendering pass, there can only be one area along the x-interval drawn. For example, if you have an island on the ground, the area between you and the island will be fine, but everything on the other side of the island will show HOM. Try it out yourself to see what I mean. Technically this means that TROR extensions cannot contain islands (although it&#039;s been kind of hacked in to do exta-extra passes to overcome this problem, I wouldn&#039;t rely on them for perfect drawing.)&lt;br /&gt;
&lt;br /&gt;
However, this can be overcome by breaking up the sector surrounding the child sector, and extending each sector individually. This means there will be multiple drawing portals around the island instead of one big one, and none of the individual extensions would contain the island, hence it should draw fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This HOM doesn&#039;t just occur due to islands, it can also happen when part of a normal sector is jutting out into a TROR sector, this can be thought of here as a mini-island even though it&#039;s connected to something. Don&#039;t call it a mini-island, I only called it that to explain why it would cause that glitching. This means that TROR extensions should be &#039;&#039;convex&#039;&#039;, i.e if you draw a straight line through a TROR portal so that it leaves the sector, and then comes back, it is not convex (and is most likely due to something jutting out.) However if you draw a line through it and this does not happen, as is the case for a circle, square etc.. then it is convex, and should draw fine.&lt;br /&gt;
&lt;br /&gt;
Also note that currently the software renderer doesn&#039;t allow the player to see through more than 8 layers of TROR (it draws the texture on the surface instead). This normally isn&#039;t a problem in small sectors of TROR because the player typically won&#039;t be able to look up high enough to see the 8 layers due to vertical distortion. The limit could potentially be increased if someone desperately needed it (talk to the devs for that.)&lt;br /&gt;
&lt;br /&gt;
Having void sectors (white-walled sectors with null space inside them) inside a TROR sector, or inside a sector adjacent to/bounding a TROR sector, it will cause visual glitches when viewed from some angles. Consider turning potential void sectors into child sectors, and raise the floor to the ceiling to fix this, as the result would look identical to having a void sector, but without the glitching.&lt;br /&gt;
&lt;br /&gt;
===Polymer renderer===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Polymer is not actively developed at this time and should only be used as a last resort.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Masked floors and ceilings in polymer are always the last thing drawn on the screen. That means if you have a transparent surface such as a masked wall or sprite, it would cause everything all the TROR masked surfaces behind the transparent surface to stop being drawn and become invisible. There&#039;s no real work around for this, just try not to use masked walls or sprites with big transparent surfaces around TROR masked surfaces.&lt;br /&gt;
&lt;br /&gt;
Other than that, polymer is by far the most stable renderer for TROR, and apart from what&#039;s written above, is 100% glitch free, though it may be slow sometimes. It works by drawing the entire scene, TROR and all in a single rendering pass. This means that it doesn&#039;t require any additional computer power to draw TROR, hence TROR will not affect the framerate in polymer.&lt;br /&gt;
&lt;br /&gt;
===Polymost renderer===&lt;br /&gt;
[needs description]&lt;br /&gt;
&lt;br /&gt;
==Random Trivia==&lt;br /&gt;
Extended sectors can be sloped, but the bunch has to be 1:1 in that case. I.e you can&#039;t have any child sectors within a sloped TROR sector. If you want different TROR sectors with different slopes, you must use completely different extensions for that, as opposed to breaking up a single extension.&lt;br /&gt;
&lt;br /&gt;
Maps containing one or more TROR bunches are saved in a new map format (v9) since some fields had to be taken over: xrepeat is unavailable on TROR&#039;ed floors and ceilings, and on walls it&#039;s lotag if the ceiling, and extra if the floor of the wall&#039;s sector is extended. When in-game, these get transferred to internal arrays though.&lt;br /&gt;
&lt;br /&gt;
The system is supposed to be used for &#039;large-scale&#039; RoR, as a rule of thumb each affected sector should be at least a Duke high [that&#039;s too strict though].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Level editing documentation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=True_Room_Over_Room_Mapping_Guide&amp;diff=13929</id>
		<title>True Room Over Room Mapping Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=True_Room_Over_Room_Mapping_Guide&amp;diff=13929"/>
		<updated>2020-07-22T02:18:51Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: /* Polymer renderer */ not renderer of choice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Build Intro}}&lt;br /&gt;
&lt;br /&gt;
True Room Over Room is a feature new to EDuke32 that allows for the construction of [[sector]]s in a vertical arrangement. Other build games (Shadow Warrior, Blood, Redneck Rampage) are able to fake ROR by having sectors in different parts of the map and rendering them on top of each other, and EDuke32 has a similar feature using Sector Effectors. The difference between game ROR and TROR is that the sectors are physically on top of each other, making editing a lot easier and more automatic, while also making it easier to visualize what you&#039;re building. For the more technically minded, TROR is part of the engine and map format themselves, instead of an effect bolted on in the game code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TROR Editing Modes==&lt;br /&gt;
There are two modes you should be aware of before starting to build with TROR.&lt;br /&gt;
&lt;br /&gt;
===Side view (orthographic view) mode===&lt;br /&gt;
This mode allows you see a 3D representation of your map while in 2D mode. This is toggled with &#039;&#039;&#039;[F3]&#039;&#039;&#039;. It can be rotated with the &#039;&#039;&#039;[Q]&#039;&#039;&#039; and &#039;&#039;&#039;[W]&#039;&#039;&#039; buttons, and the angle of viewing can be changed by pressing &#039;&#039;&#039;[A]&#039;&#039;&#039; and &#039;&#039;&#039;[Z]&#039;&#039;&#039;.&lt;br /&gt;
This mode is absolutely essential not only because it allows you to actually see what you&#039;re doing, but because in order to properly use TROR, you need to designate which is the &#039;active&#039; layer that new sectors will connect to. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be done in 2 ways. &lt;br /&gt;
&lt;br /&gt;
The first way is to press &#039;&#039;&#039;[Ctrl-A]&#039;&#039;&#039; which will grey out all other layers except the one the viewpoint (the arrow in 2D/side view mode)is in, which is the active layer. You can move the view point up and down, allowing you to edit above and below layers, by either pressing &#039;&#039;&#039;[page up]&#039;&#039;&#039; and &#039;&#039;&#039;[page down]&#039;&#039;&#039; respectively, or more accurately by pressing down the &#039;&#039;&#039;[middle mouse button]&#039;&#039;&#039; and moving the mouse forward or backwards. This method is usually prefered as it gives you much more control over the vertical position of the viewpoint. If you find the greyed-out walls distracting, you can remove them altogether by pressing &#039;&#039;&#039;[Ctrl-Alt-A]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The second way allows for more precision as you can narrow the active editing range to the height of a single (or set of) sectors. Firstly, select the sector(s) that you want to be able to edit with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;, and press &#039;&#039;&#039;[Ctrl-R]&#039;&#039;&#039;. It&#039;s as easy as that. Press &#039;&#039;&#039;[Ctrl-R]&#039;&#039;&#039; without having any sectors highlighted to unlock the range again and be able to edit them normally.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Invisible surfaces viewing mode=== &lt;br /&gt;
This is for 3D mode when you want to toggle seeing invisible objects.&lt;br /&gt;
All you have to do to toggle this mode is press &#039;&#039;&#039;[I]&#039;&#039;&#039;, which primarily allows you to see objects you&#039;ve made invisible with &#039;&#039;&#039;[&#039;-I]&#039;&#039;&#039;. However, the reason why it&#039;s so useful here, is that it also shows you the boundaries between TROR layers (which are invisible in-game). This is a huge benefit when you want to visualize/figure out what&#039;s actually going on. It also allows you to edit the TROR surfaces and apply transparent or masked floors, and edit characteristics like the blocking and hitscan bits.&lt;br /&gt;
&lt;br /&gt;
==Properties and Terminology==&lt;br /&gt;
TROR is created by selecting a sector and extending it (this will be covered later in method). This means that it creates a new sector directly on top of or below the selected sector, which is exactly the same size and shape as the original. The ceiling of the bottom sector is linked with the floor of the top sector. It then makes sense that the extended sector is called an &#039;&#039;&#039;extension&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can have more than one extension on a sector. You can extend it above and below, then take the bottom and extend that down again and again, and the same with the top. You are effectively stacking sectors on top of each other, so these sectors are part of a &#039;&#039;&#039;stack&#039;&#039;&#039;. The great thing about stacks (even with only one extension) is that if you move the vertex of a wall of one layer, it will automatically move the vertices of all the other layers, so that they&#039;re easy to change the shape of without worrying about breaking the connection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can highlight a group of sectors and extend them all at the same time so that there can be a single extension covering them all. This is useful because it saves walls, and you can still edit all the child sectors with ease. Now, as soon as you extend these sectors so that they share an extension, they all become a part of the same &#039;&#039;&#039;bunch&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you take a room with a child sector in the middle, and extend everything upwards except the child layer, there will now be void space in the top layer where the child sector is. If you press &#039;&#039;&#039;[Ctrl-S]&#039;&#039;&#039; there to make it into a child sector in the top layer, you&#039;ll then find that you have a floating normal (non-TROR) sector between the two TROR layers that you can do with as you please. This is called an &#039;&#039;&#039;island&#039;&#039;&#039;. I suppose it&#039;s still an island even if you don&#039;t make it a child sector in the top layer but hey, now you can create floating sectors. These can potentially be glitchy if you&#039;re not using the polymer renderer, but we&#039;ll get onto that later.&lt;br /&gt;
&lt;br /&gt;
==TROR related keys==&lt;br /&gt;
The following are a list of keys which are related to editing TROR. They can also be found in the [http://wiki.eduke32.com/wiki/Build/Mapster32_Keyboard_Commands mapster32 keyboard commands page]&lt;br /&gt;
&lt;br /&gt;
===2D mode===&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; sector extension prompt (sectors to extend must be highlighted)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; make sandwich [&#039;&#039;if extending a sector in a direction that has already been extended, see below&#039;&#039;]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; punch loop through extension (loop points must be highlighted, e.g. with &#039;&#039;&#039;[Right Shift]&#039;&#039;&#039;+&#039;&#039;&#039;[Left Ctrl]&#039;&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-A]&#039;&#039;&#039; toggle auto-grayout of non-extended sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-J]&#039;&#039;&#039; TROR-join sectors. The selection must consist of the two sets of sectors you wish to join.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-U]&#039;&#039;&#039; Clear extension: delete the bunch (i.e. ceiling-floor connection) of the aimed-at sector&#039;s floor&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[PGUP]&#039;&#039;&#039;/&#039;&#039;&#039;[PGDN]&#039;&#039;&#039; Change &#039;player&#039; height in discrete steps in order to go through the different levels&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Ctrl-tab]&#039;&#039;&#039; Display one currently aimed at sector (of potentially many that lie under the mouse crosshair)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[HOME]&#039;&#039;&#039; and &#039;&#039;&#039;[END]&#039;&#039;&#039; as modifiers to AltGr: select all sectors whose floor&#039;s/ceiling&#039;s bunchnum equal the bunchnum of the aimed at sector (useful for further operations on whole bunches)&lt;br /&gt;
&lt;br /&gt;
===3D mode===&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039; invisibility preview: toggle fake ROR texture on non-masked portals&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LENTER+CTRL&#039;&#039;&#039; When aiming at an extended floor/ceiling, paste to all floors/ceilings of the bunch of the aimed at one&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;T&#039;&#039;&#039;, &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;H&#039;&#039;&#039; work as with walls, though they set/toggle the bits only on &#039;&#039;&#039;one&#039;&#039;&#039; side&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Highlighting===&lt;br /&gt;
Not really specific to TROR, but having greater control over which or how many sectors you can highlight makes doing extensions in TROR much easier. Make sure you&#039;re familiar with [http://wiki.eduke32.com/wiki/Level_editing#Copying_and_Pasting_Sectors advanced sector highlighting].&lt;br /&gt;
&lt;br /&gt;
The information on the advanced features is outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can highlight a second, third, and multiple sectors by holding down &#039;&#039;&#039;[&#039;]&#039;&#039;&#039; as you drag the selection box over them. This way you can highlight sectors in different parts of the map. Likewise, use the &#039;&#039;&#039;[;]&#039;&#039;&#039; key to deselect sectors. A small plus or minus will appear next to the cursor depending on which button you&#039;re holding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can select individual sectors with the mouse by moving the cursor inside the sector you want, holding &#039;&#039;&#039;[RIGHT ALT]&#039;&#039;&#039;, and holding &#039;&#039;&#039;[RIGHT CTRL]&#039;&#039;&#039; as you release &#039;&#039;&#039;[RIGHT ALT]&#039;&#039;&#039;. The sector is now highlighted. This method of selection also works with &#039;&#039;&#039;[&#039;]&#039;&#039;&#039; and &#039;&#039;&#039;[;]&#039;&#039;&#039; to select/deselect additional sectors by mouse. Simply hold &#039;&#039;&#039;[RIGHT ALT]&#039;&#039;&#039; and the appropriate button depending on what you want to do, then hold &#039;&#039;&#039;[RIGHT CTRL]&#039;&#039;&#039; while releasing the other buttons. This becomes very quick and easy to do after doing it a few times.&lt;br /&gt;
&lt;br /&gt;
==TROR Mapping Examples==&lt;br /&gt;
&lt;br /&gt;
===Manhole Sewer Example===&lt;br /&gt;
&lt;br /&gt;
In this straightforward example, you&#039;re going to make a manhole that goes below a street, and some area around the end of the hole at the bottom.&lt;br /&gt;
&lt;br /&gt;
1. Create the child sector where you want the manhole to be.&lt;br /&gt;
&lt;br /&gt;
2. Highlight the sector with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
3. Press &#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039;. Mapster will prompt you whether you want to extend up or down.&lt;br /&gt;
&lt;br /&gt;
4. We want to extend down so press &#039;&#039;&#039;[Z]&#039;&#039;&#039; (&#039;&#039;&#039;[A]&#039;&#039;&#039; if you&#039;re extending up).&lt;br /&gt;
&lt;br /&gt;
5. Go into side view mode with &#039;&#039;&#039;[F3]&#039;&#039;&#039;, and move the viewpoint down until you&#039;re editing the bottom layer.&lt;br /&gt;
&lt;br /&gt;
6. The child sector you created should now have a white boundary, with the street sectors above either greyed out or gone depending on your settings. &lt;br /&gt;
&lt;br /&gt;
7. Now you can treat the manhole sector (the extension) as the very first room you&#039;ve made on a new map. You can draw sectors on the side of it to attach some rooms there. If you go into 3D mode, you should be able to see that if you go down that manhole, there should now be some area at the bottom which overlaps the street. This was not previously possible without using some kind of cheap trick. Congratulations, you&#039;ve just made TROR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Two Story Building Example===&lt;br /&gt;
&lt;br /&gt;
I&#039;m sure that a big reason that people want to use TROR is to build multiple story buildings, and this is how you do it.&lt;br /&gt;
&lt;br /&gt;
1. Design the first floor of your building, both inside and out. This is going to be the first layer, which means the ceiling of every sector, especially the outdoor sectors should not be any higher than the roof of the first floor. Pretend that the second floor doesn&#039;t even exist.&lt;br /&gt;
&lt;br /&gt;
2. Make your windows, doors, and anything you want.&lt;br /&gt;
&lt;br /&gt;
Highlight with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039; all of the &#039;&#039;outdoor&#039;&#039; sectors (the outdoor sectors should all have the same ceiling height, and should not be parallaxed). Knowing your advanced highlighting will come in useful here to select all the sectors.&lt;br /&gt;
&lt;br /&gt;
3. Extend the highlighted area up, and make the top layer the active editing layer.&lt;br /&gt;
&lt;br /&gt;
4. You should notice that the outline of your house has become completely white, and the area inside the house is empty. This is because this area is the second floor of your house.&lt;br /&gt;
&lt;br /&gt;
5. Make a sector inside the house outline, this will be the room on the second floor of your house. Draw small sectors between that room and the house outline to create second floor windows. Alternatively you could just press &#039;&#039;&#039;[Ctrl-S]&#039;&#039;&#039; inside the house sector to make it a regular child sector, and if you go into 3D mode, you&#039;ll see your house has a roof you can stand on top of.&lt;br /&gt;
&lt;br /&gt;
6. If you&#039;re learning TROR for the first time, it is very helpful at this point to go into 3D mode and press &#039;&#039;&#039;[i]&#039;&#039;&#039; to reveal the boundaries between layers so that you can understand what you&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
7. You can connect the ground floor to the second floor the same way you&#039;d connect two sector-over-sector sectors; by having a staircase or lift that connects to a different area on the top floor than it does on the bottom (because a lift for example cannot directly cross TROR layers, therefore it must be connected to sectors which do not overlap; i.e have the entrance on one side and the exit on the other.)&lt;br /&gt;
Or you can connect the ground floor and second floor via TROR and have some sprite stairs or something.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage you should have a perfect two story house where you can look into and enter both stories. Cool stuff eh? ;)&lt;br /&gt;
&lt;br /&gt;
There&#039;s nothing stopping you from going on to build a third.. forth.. fifth.. floor in the same manner either.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===TROR water example===&lt;br /&gt;
&lt;br /&gt;
This is how you create transparent water using TROR. It works just like regular water, but there are a few things you need to be aware of.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Create a main sector, then a child sector in that and extend it downwards. &lt;br /&gt;
&lt;br /&gt;
2. Make both the top and bottom of the TROR surface masked or transparent, and give it the water texture.&lt;br /&gt;
&lt;br /&gt;
3. Give the floor of the top sector a lotag of 1 for water. Give the floor of the bottom sector a lotag of 2 for underwater.&lt;br /&gt;
&lt;br /&gt;
4. Place an SE 7 with the same hitag in the same position in both the top and bottom sector.&lt;br /&gt;
&lt;br /&gt;
5. This is the one that people normally forget. Set the TROR surface in both the top and bottom layer to BLOCKING otherwise it will not work as intended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See, it&#039;s not too bad, just remember the lotags and the blocking. Note if you split up the water sector or add more sectors, make sure those sectors are in both the top and bottom layers, and have new SE 7s, just like normal water. In the future TROR water will be more automatic in that you won&#039;t need the SE 7, however this is incomplete as of this writing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Something that might make life a bit easier is that if you extend the floor of the below-water sector downwards, you can then edit the floor of the new bottom layer and make as complex as you want without having to worry about placing lots of SE 7s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Retro-fitting via Joining Example===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re absolutely clueless with the whole idea of extending, or you want to go back and retrofit some TROR into maps you&#039;ve done in the past, there&#039;s a very easy way of joining them to form TROR.&lt;br /&gt;
If you have two sectors that have the same shape, area, and external vertices have the same relative positions (essentially they&#039;re the same sector, at least as far as their edges are concerned), then all you have to do is highlight both sectors with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;, and press &#039;&#039;&#039;[Ctrl-J]&#039;&#039;&#039; to join, the same as joining two sectors normally. It will then prompt you with a few questions such as which sector you want to have on top of the other, which sector(s) you want to move (doesn&#039;t matter most of the time), and whether you&#039;d like to move all the connected non-TROR sectors as well (definitely yes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The good thing about this method is that besides the questions you have to answer, mapster does everything automatically, it even moves the heights for you. Now there&#039;ll be a quick example of this method below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Make a child sector in a larger sector and copy-paste it into void space.&lt;br /&gt;
&lt;br /&gt;
2. Give the floor of the original child sector and the ceiling of the new sector the water texture.&lt;br /&gt;
&lt;br /&gt;
3. Highlight both the child sector and new sector with &#039;&#039;&#039;[Right-Alt]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
4. Press &#039;&#039;&#039;[Ctrl-J]&#039;&#039;&#039; and answer the simple questions.&lt;br /&gt;
&lt;br /&gt;
5. You should end up with a TROR water sector just as you would via the extension method. You can now alter the transparency of the water to your preference.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Sandwiching and Sector Punching===&lt;br /&gt;
It&#039;s possible and easy to create a new TROR layer between two TROR layers. All you have to do is highlight one of them, and extend it as you would normally, and it automatically adds a new layer in the middle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to easily create an island sector in the middle of a TROR sector. This is called &#039;&#039;sector punching&#039;&#039;, and mainly involves stamping a child sector into the sector below or above. Follow the example below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Extend a sector downwards.&lt;br /&gt;
&lt;br /&gt;
2. Create a child sector in the original sector.&lt;br /&gt;
&lt;br /&gt;
3. Select the vertices of the child sector with &#039;&#039;&#039;[Right-Shift]&#039;&#039;&#039; or &#039;&#039;&#039;[R-Ctrl + R-Shift]&#039;&#039;&#039; and press &#039;&#039;&#039;[Ctrl-E]&#039;&#039;&#039; as though you&#039;re extending a sector.&lt;br /&gt;
&lt;br /&gt;
4. It will prompt you whether to punch up or down, in this case, choose down and hit &#039;&#039;&#039;[Enter]&#039;&#039;&#039;. A sector identical in size, shape and position should now be in the bottom layer.&lt;br /&gt;
&lt;br /&gt;
5. Point the mouse cursor at the child sector in the top layer and press &#039;&#039;&#039;[Ctrl-U]&#039;&#039;&#039;. It will prompt you whether you want to break the connection, and unless you press [Ctrl-U] accidentally, you usually do.&lt;br /&gt;
&lt;br /&gt;
6. The child sector should now be a floating sector island. Have fun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;&#039;[Ctrl-U]&#039;&#039;&#039; only breaks the connection of a single sector if that sector has been punched. Otherwise it&#039;ll break the connection of the entire bunch, which is usually bad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===List of TROR maps===&lt;br /&gt;
&lt;br /&gt;
This (hopefully up to date) list contains maps which make heavy use of the TROR feature in order to make a huge variety of constructions. They each contain a wealth of examples for you to look at to see what&#039;s possible and how it works/how to make it. This is not a complete list, as other maps make minor or simple use of the effect and hence are not listed here.&lt;br /&gt;
&lt;br /&gt;
1. The trueror.map in the Samples folder included with eduke32 contains a large amount of random examples of TROR.&lt;br /&gt;
&lt;br /&gt;
2. Retaliation is a small hi-tech map by Loke that was the first proper TROR map and makes some great use of the feature. [http://www.scent-88.com/reviews/R/retaliation/retaliation.php Download here]&lt;br /&gt;
&lt;br /&gt;
3. Parkade is a large city themed map containing large multiple story buildings, along with a large amount of unique, pioneering uses of the feature, made by myself (Micky C) and Paul B. It is the largest, most extensive TROR map and perhaps the best example of what TROR is capable of so far, if I do say so myself. [http://www.scent-88.com/reviews/P/parkade/parkade.php Download here]&lt;br /&gt;
&lt;br /&gt;
4. Brooklyn Bridge is another city themed map which also makes extensive and interesting use of TROR, such as an alien ship that flies over water, shooting rockets, and in vents. [http://www.scent-88.com/reviews/B/brooklyn/brooklyn.php Download here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tricks and Effects with TROR==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SE 13 destructible floor/ceiling===&lt;br /&gt;
&lt;br /&gt;
If you have a TROR extension in the floor, you can place an SE 13 on it (facing downwards in 2D mode, and it will become a solid floor in-game (blocked and masked). When the hitag is activated, the TROR surface will become invisible as though a hole has just formed in the floor. You can place the SE 13 on the surface, or above, in which case the floor will initially have the height of the SE 13 just like with the original effect. You can also place it near the ceiling to make the SE 13 control the ceiling instead, or have one near the ceiling and one near the floor to control both.&lt;br /&gt;
&lt;br /&gt;
When placed in a TROR extension with many sectors, it will not just control the sector, but rather the entire extension. So you can add sectors and give them different textures and don&#039;t have to worry about adding extra SE 13&#039;s. If you want to have TROR surfaces have different heights with different SE 13 sprites, they need to be different extensions; i.e they need to have a sector in both the top and bottom layer, and be extended individually.&lt;br /&gt;
&lt;br /&gt;
The SE 13 also works with TROR slopes, allowing you to create relatively complex destructible objects compared to sprites. But remember that TROR is pretty wall hungry, so keep an eye on complexity.&lt;br /&gt;
Note that regardless of whether a TROR surface is set to masked or transparent in mapster, it will always become invisible after SE 13 activation.&lt;br /&gt;
&lt;br /&gt;
===TROR water height manipulation===&lt;br /&gt;
&lt;br /&gt;
TROR water can also be made to move up and down using the SE 31/32, much like the raising/lowering submergible water in e1l4 Toxic Dump. The effect is the same, however it&#039;s easier with TROR, because you only have to set up the effect on one side, either in the top layer or bottom layer, because this effect is set up so that if the ceiling of the bottom sector is moved, it moves the floor of the top sector as well, and vice versa. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual Glitches and Workarounds==&lt;br /&gt;
&lt;br /&gt;
===Software renderer===&lt;br /&gt;
Even though TROR sectors are already physically overlapping, the 8-bit software renderer still needs to render them separately, having to do an extra rendering pass for each additional TROR extension in view. Theoretically if you create a huge amount of extensions in the same area the framerate could potentially drop to unplayable levels, however this is far fetched and I wouldn&#039;t worry about it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The real problem with the software renderer is HOM glitching. In each rendering pass, there can only be one area along the x-interval drawn. For example, if you have an island on the ground, the area between you and the island will be fine, but everything on the other side of the island will show HOM. Try it out yourself to see what I mean. Technically this means that TROR extensions cannot contain islands (although it&#039;s been kind of hacked in to do exta-extra passes to overcome this problem, I wouldn&#039;t rely on them for perfect drawing.)&lt;br /&gt;
&lt;br /&gt;
However, this can be overcome by breaking up the sector surrounding the child sector, and extending each sector individually. This means there will be multiple drawing portals around the island instead of one big one, and none of the individual extensions would contain the island, hence it should draw fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This HOM doesn&#039;t just occur due to islands, it can also happen when part of a normal sector is jutting out into a TROR sector, this can be thought of here as a mini-island even though it&#039;s connected to something. Don&#039;t call it a mini-island, I only called it that to explain why it would cause that glitching. This means that TROR extensions should be &#039;&#039;convex&#039;&#039;, i.e if you draw a straight line through a TROR portal so that it leaves the sector, and then comes back, it is not convex (and is most likely due to something jutting out.) However if you draw a line through it and this does not happen, as is the case for a circle, square etc.. then it is convex, and should draw fine.&lt;br /&gt;
&lt;br /&gt;
Also note that currently the software renderer doesn&#039;t allow the player to see through more than 8 layers of TROR (it draws the texture on the surface instead). This normally isn&#039;t a problem in small sectors of TROR because the player typically won&#039;t be able to look up high enough to see the 8 layers due to vertical distortion. The limit could potentially be increased if someone desperately needed it (talk to the devs for that.)&lt;br /&gt;
&lt;br /&gt;
Having void sectors (white-walled sectors with null space inside them) inside a TROR sector, or inside a sector adjacent to/bounding a TROR sector, it will cause visual glitches when viewed from some angles. Consider turning potential void sectors into child sectors, and raise the floor to the ceiling to fix this, as the result would look identical to having a void sector, but without the glitching.&lt;br /&gt;
&lt;br /&gt;
===Polymer renderer===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Polymer is not actively developed at this time and should only be used as a last resort.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Masked floors and ceilings in polymer are always the last thing drawn on the screen. That means if you have a transparent surface such as a masked wall or sprite, it would cause everything all the TROR masked surfaces behind the transparent surface to stop being drawn and become invisible. There&#039;s no real work around for this, just try not to use masked walls or sprites with big transparent surfaces around TROR masked surfaces.&lt;br /&gt;
&lt;br /&gt;
Other than that, polymer is by far the most stable renderer for TROR, and apart from what&#039;s written above, is 100% glitch free, though it may be slow sometimes. It works by drawing the entire scene, TROR and all in a single rendering pass. This means that it doesn&#039;t require any additional computer power to draw TROR, hence TROR will not affect the framerate in polymer.&lt;br /&gt;
&lt;br /&gt;
===Polymost renderer===&lt;br /&gt;
The polymost renderer is bad, M&#039;kay? It&#039;s like a comic relief in bad Hollywood films who can&#039;t do anything right. Don&#039;t use it. It has also been observed that some TROR constructions work perfectly on some computers, however are incredibly glitchy on others, so if you do decide to use this renderer, and TROR works for you, make sure you have two or three other people check it on their setups before you release your map. There are no plans to add complete polymost TROR compatibility as polymost will be obsolete once polymer is finished and optimised. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Random Trivia==&lt;br /&gt;
Extended sectors can be sloped, but the bunch has to be 1:1 in that case. I.e you can&#039;t have any child sectors within a sloped TROR sector. If you want different TROR sectors with different slopes, you must use completely different extensions for that, as opposed to breaking up a single extension.&lt;br /&gt;
&lt;br /&gt;
Maps containing one or more TROR bunches are saved in a new map format (v9) since some fields had to be taken over: xrepeat is unavailable on TROR&#039;ed floors and ceilings, and on walls it&#039;s lotag if the ceiling, and extra if the floor of the wall&#039;s sector is extended. When in-game, these get transferred to internal arrays though.&lt;br /&gt;
&lt;br /&gt;
The system is supposed to be used for &#039;large-scale&#039; RoR, as a rule of thumb each affected sector should be at least a Duke high [that&#039;s too strict though].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Level editing documentation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Setdefname&amp;diff=13928</id>
		<title>Setdefname</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Setdefname&amp;diff=13928"/>
		<updated>2020-07-20T01:45:05Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;setdefname&amp;#039;&amp;#039;&amp;#039; &amp;lt;name&amp;gt;  Sets the name of the DEF file to load. Use this to override the default (for example duke3d.def).&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;setdefname&#039;&#039;&#039; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the name of the DEF file to load. Use this to override the default (for example duke3d.def).&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Setgamename&amp;diff=13927</id>
		<title>Setgamename</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Setgamename&amp;diff=13927"/>
		<updated>2020-07-20T01:43:24Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;setgamename&amp;#039;&amp;#039;&amp;#039; &amp;lt;name&amp;gt;  Sets the name of the game as seen by the operating system. This name will appear in the title bar of the game window in windowed mode.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;setgamename&#039;&#039;&#039; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the name of the game as seen by the operating system. This name will appear in the title bar of the game window in windowed mode.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=EVENT_SETDEFAULTS&amp;diff=13926</id>
		<title>EVENT SETDEFAULTS</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=EVENT_SETDEFAULTS&amp;diff=13926"/>
		<updated>2020-07-19T03:50:27Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EVENT_SETDEFAULTS is [[EDuke32 event list|Game Event]].&lt;br /&gt;
&lt;br /&gt;
This event is used when the game is initializing. It&#039;s the ideal place to change the value of [[Members_of_the_userdef_structure|userdefs]] if its only required to change them once.&lt;br /&gt;
&lt;br /&gt;
It takes place after the game set the default settings, but before the .cfg files save / load them, meaning you can change the defaults settings of the game (as the name suggests). For example, if you change the value of [[screen_size]], that will be the status bar size that will be displayed in a clean installation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Getticks&amp;diff=13925</id>
		<title>Getticks</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Getticks&amp;diff=13925"/>
		<updated>2020-07-18T16:49:15Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: This appears to be ticks since eduke32 started, not the OS.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;getticks&#039;&#039;&#039; &amp;lt;gamevar&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Writes the amount of milliseconds(1 second = 1000 millisecond) since the game started to &amp;lt;gamevar&amp;gt;. This clock isn&#039;t synced with the game which means that it must not be used for the gameplay if the mod is supposed to work in multiplayer. This command is useful for visual animating(especially in [[EVENT_DISPLAYMENU]]) and for performance profiling.&lt;br /&gt;
&lt;br /&gt;
Example code(animation)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar prevtick -1 0&lt;br /&gt;
gamevar curtick   0 0&lt;br /&gt;
gamevar tmp       0 0 // =curtick-prevtick&lt;br /&gt;
&lt;br /&gt;
gamevar y         0 0&lt;br /&gt;
&lt;br /&gt;
onevent EVENT_DISPLAYMENU&lt;br /&gt;
  getticks curtick&lt;br /&gt;
  ifvare prevtick -1 setvar tmp 0 else&lt;br /&gt;
  {&lt;br /&gt;
    setvarvar tmp curtick&lt;br /&gt;
    subvarvar tmp prevtick&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  mulvar tmp 8800&lt;br /&gt;
  addvarvar y tmp&lt;br /&gt;
  ifvarg y 13107200 setvar y 0 // 200*65536=13107200&lt;br /&gt;
  rotatesprite16 0 y 65536 0 0 0 0 26 0 0 xdim ydim&lt;br /&gt;
&lt;br /&gt;
  setvarvar prevtick curtick&lt;br /&gt;
endevent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example code(performance profiling)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar i 0 0&lt;br /&gt;
gamevar j 0 0&lt;br /&gt;
&lt;br /&gt;
// Loop from 0 to NUMWALLS-1&lt;br /&gt;
state process_normal&lt;br /&gt;
  setvar j 0&lt;br /&gt;
  whilevarn j 1000&lt;br /&gt;
  {&lt;br /&gt;
    setvar i 0&lt;br /&gt;
    whilevarvarn i NUMWALLS&lt;br /&gt;
    {&lt;br /&gt;
      addvar i 1&lt;br /&gt;
    }&lt;br /&gt;
    addvar j 1&lt;br /&gt;
  }&lt;br /&gt;
ends&lt;br /&gt;
&lt;br /&gt;
// Loop from NUMWALLS-1 to 0&lt;br /&gt;
state process_backward&lt;br /&gt;
  setvar j 0&lt;br /&gt;
  whilevarn j 1000&lt;br /&gt;
  {&lt;br /&gt;
    setvarvar i NUMWALLS&lt;br /&gt;
    subvar i 1&lt;br /&gt;
    whilevarn i -1&lt;br /&gt;
    {&lt;br /&gt;
      subvar i 1&lt;br /&gt;
    }&lt;br /&gt;
    addvar j 1&lt;br /&gt;
  }&lt;br /&gt;
ends&lt;br /&gt;
&lt;br /&gt;
onevent EVENT_ENTERLEVEL&lt;br /&gt;
  gamevar val1 0 0&lt;br /&gt;
  gamevar val2 0 0&lt;br /&gt;
&lt;br /&gt;
  addlogvar NUMWALLS&lt;br /&gt;
&lt;br /&gt;
  getticks val1&lt;br /&gt;
  state process_normal&lt;br /&gt;
  getticks val2&lt;br /&gt;
  subvarvar val2 val1&lt;br /&gt;
  addlogvar val2&lt;br /&gt;
&lt;br /&gt;
  getticks val1&lt;br /&gt;
  state process_backward&lt;br /&gt;
  getticks val2&lt;br /&gt;
  subvarvar val2 val1&lt;br /&gt;
  addlogvar val2&lt;br /&gt;
endevent&lt;br /&gt;
/*&lt;br /&gt;
output&lt;br /&gt;
CONLOGVAR: L=1266 NUMWALLS  (read-only) (Global) =14793&lt;br /&gt;
CONLOGVAR: L=1272 val2  (Global) =1628 // normal&lt;br /&gt;
CONLOGVAR: L=1278 val2  (Global) =1285 // reverse&lt;br /&gt;
&lt;br /&gt;
It shows how that processing in reverse order is faster.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Build/Mapster32_Keyboard_Commands&amp;diff=13924</id>
		<title>Build/Mapster32 Keyboard Commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Build/Mapster32_Keyboard_Commands&amp;diff=13924"/>
		<updated>2020-07-16T20:51:48Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Add an example of (&amp;#039;C) command; remove message asking for explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 3D Mode: Mouse ==&lt;br /&gt;
&lt;br /&gt;
The purpose of mouse in 3D mode is pointing at some objects in a map and looking around (&#039;&#039;&#039;F3&#039;&#039;&#039; toggles mouse look).&lt;br /&gt;
&lt;br /&gt;
Mouse pointer always points (see info about it at the bottom of the screen) at one of these objects:&lt;br /&gt;
&lt;br /&gt;
# wall&lt;br /&gt;
# ceiling of sector&lt;br /&gt;
# floor of sector&lt;br /&gt;
# sprite&lt;br /&gt;
# masked wall (non-transparent or semi-transparent wall between sectors)&lt;br /&gt;
&lt;br /&gt;
It&#039;s important to understand this concept:&lt;br /&gt;
&lt;br /&gt;
* Some commands work differently depending on the current object (the object the mouse points at).&lt;br /&gt;
* Some commands manipulate only the current object&lt;br /&gt;
* Some commands manipulate the selected (also called &amp;quot;highlighted&amp;quot;) sprites/sectors in 2D mode&lt;br /&gt;
* Some commands work globally.&lt;br /&gt;
&lt;br /&gt;
===Mouse buttons===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;LEFT&#039;&#039;&#039; || lock the current object. The current object won&#039;t be changing as long as the button is pressed.&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;WHEEL&#039;&#039;&#039; || change shade (&#039;&#039;&#039;+CTRL&#039;&#039;&#039;: in increments of 4)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;WHEEL+ALT&#039;&#039;&#039; || change visibility&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+WHEEL&#039;&#039;&#039; || change tile&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;RIGHT+WHEEL&#039;&#039;&#039; || move object up/down&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;MIDDLE&#039;&#039;&#039; || temporary mouse look (when not in UnrealEd-style mouse mode)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Additionally, there is UnrealEd-style mouse navigation in 3D mode (toggle it with &#039;&#039;&#039;F5&#039;&#039;&#039;), with the following bindings:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;RIGHT&#039;&#039;&#039; || mouse look&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT&#039;&#039;&#039; || x: turning&amp;lt;br&amp;gt;y: move forward/back&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+RIGHT&#039;&#039;&#039; || x: strafe left/right&amp;lt;br&amp;gt;y: move up/down&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;MIDDLE&#039;&#039;&#039; || y: move in viewing direction&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
The console variable &#039;&#039;pk_uedaccel&#039;&#039; changes the speed of navigation exponentially (valid values are 0-5).&lt;br /&gt;
&lt;br /&gt;
It is possible to move around objects using the mouse and holding down specific modifier keys:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+ALT&#039;&#039;&#039; || move object up/down (&#039;&#039;&#039;+CTRL&#039;&#039;&#039;: in larger increments)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+SHIFT&#039;&#039;&#039; || move sprite in horizontal plane (&#039;&#039;&#039;+CTRL&#039;&#039;&#039;: grid-aligned)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
The two preceding controls also work on a set of sprites highlighted in 2D mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+SHIFT&#039;&#039;&#039; || pan ceiling/floor/wall texture&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+CTRL&#039;&#039;&#039; || scale wall texture or size of sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+CTRL&#039;&#039;&#039; || change slope of floor/ceiling&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== 3D Mode: Selecting Tile Mode ==&lt;br /&gt;
&lt;br /&gt;
After pressing the &#039;&#039;&#039;V&#039;&#039;&#039; key in 3D mode, Mapster32 switches to &amp;quot;select tile&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
====Keys====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;UP/DOWN,&amp;lt;br&amp;gt;LEFT/RIGHT,&amp;lt;br&amp;gt;PGUP/PGDN,&amp;lt;br&amp;gt;HOME/END&#039;&#039;&#039; || movements (&#039;&#039;&#039;CTRL&#039;&#039;&#039; modifies some commands)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP /&#039;&#039;&#039; || zoom in&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP *&#039;&#039;&#039; || zoom out&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;Z&#039;&#039;&#039; || toggle tile zoom&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;G&#039;&#039;&#039; || goto specified tile&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;U&#039;&#039;&#039; || goto start of user defined art (3584)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;A&#039;&#039;&#039; || goto start of Atomic edition&#039;s art (4096)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;E&#039;&#039;&#039; || goto start of extended art (6144,9216)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;S&#039;&#039;&#039; || Search for a named tile. When ^ is entered as the first character, anchor string at the beginning.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;V&#039;&#039;&#039; || select from all tiles&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;T&#039;&#039;&#039; || select from pre-defined tile group which can be edited in tiles.cfg or added from within the tile selector. For this, press &#039;&#039;&#039;SPACE&#039;&#039;&#039; on the tiles to be grouped (&#039;&#039;&#039;CTRL-SPACE&#039;&#039;&#039; to select a range from starting from the last selection with &#039;&#039;&#039;SPACE&#039;&#039;&#039;). When you&#039;re ready, press &#039;&#039;&#039;Ctrl-G&#039;&#039;&#039; and you&#039;ll be queried for a group hotkey and name. The new tile group should now be saved persistently in tiles.cfg.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;ESC&#039;&#039;&#039; || cancel&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;ENTER&#039;&#039;&#039; || accept&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Mouse====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;LEFT&#039;&#039;&#039; || select&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;CTRL+WHEEL&#039;&#039;&#039; || zoom&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;WHEEL&#039;&#039;&#039; || scroll&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;RIGHT&#039;&#039;&#039; || smooth scrolling&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==  3D Mode: Keys ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;UP&#039;&#039;&#039; || move forward&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;DOWN&#039;&#039;&#039; || move backward&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LEFT+RCTRL&#039;&#039;&#039; || move left&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;RIGHT+RCTRL&#039;&#039;&#039; || move right&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;A&#039;&#039;&#039; || move up&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;Z&#039;&#039;&#039; || move down&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;+LSHIFT&#039;&#039;&#039; || speed up movements&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;LEFT&#039;&#039;&#039; || turn left&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;RIGHT&#039;&#039;&#039; || turn right&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;A+LALT&#039;&#039;&#039; || look down&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;Z+LALT&#039;&#039;&#039; || look up&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;F1&#039;&#039;&#039; || toggle help&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F3&#039;&#039;&#039; || toggle mouselook&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F4&#039;&#039;&#039; || toggle ambience sounds&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F5&#039;&#039;&#039; || toggle UnrealEd-style mouse navigation&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F6&#039;&#039;&#039; || toggle automatic SECTOREFFECTOR help&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F7&#039;&#039;&#039; || toggle automatic sector tag help&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F9&#039;&#039;&#039; || load and activate/deactivate maphacks&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F11&#039;&#039;&#039; || brightness&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F12&#039;&#039;&#039; || screenshot&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F12+SHIFT&#039;&#039;&#039; || inverted screenshot&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;V&#039;&#039;&#039; || set sector visibility&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;;&amp;amp;nbsp;V&#039;&#039;&#039; || set sector visibility on all selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;V&#039;&#039;&#039; || choose tile&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;3&#039;&#039;&#039; || toggle Sector over Sector. See documentation here: http://www.users.on.net/~triforce/cduke3d/&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;BACKSPACE&#039;&#039;&#039; || clear all flags for wall/sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;BACKSPACE&#039;&#039;&#039; || clear nextwall (&amp;quot;red wall&amp;quot;) link for aimed at wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;P&#039;&#039;&#039; || paste palette to all selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;;&amp;amp;nbsp;P&#039;&#039;&#039; || paste palette to all selected sectors &amp;amp; sprites&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;S&#039;&#039;&#039; || insert sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;DEL&#039;&#039;&#039; || delete sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;,&#039;&#039;&#039; || rotate sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;.&#039;&#039;&#039; || rotate sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039; || slowly rotate sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; || slowly rotate sprite&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.&#039;&#039;&#039; (period): search &amp;amp; fix panning of the wall to the right (&#039;&#039;&#039;,&#039;&#039;&#039; (comma): to the left), has 3 modifiers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;+SHIFT&#039;&#039;&#039;: auto-align at most one wall&lt;br /&gt;
* &#039;&#039;&#039;+ALT&#039;&#039;&#039;: (since r4361: don&#039;t) copy over texel width in world units (i.e. &amp;quot;how much the wall is stretched&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;+&#039;&#039;&#039;&#039; (quote): align immediate upper and lower TROR neighbors&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;SPACE&#039;&#039;&#039; || lock to object (same as left mouse button)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;PGUP/PGDN+ALT&#039;&#039;&#039; || when aiming at red wall, select the floor or ceiling of the nextsector (useful for e.g. raising a lowered door when standing near it), depending on whether the aim is at the top or bottom of the wall&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;CAPS LOCK&#039;&#039;&#039; || cycle zmode&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;Z&#039;&#039;&#039; || cycle zmode&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;L&#039;&#039;&#039; || change the coordinates of the current object&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;M&#039;&#039;&#039; || set the extra of the current object&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;1&#039;&#039;&#039; || toggle one sided sprite/wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;2&#039;&#039;&#039; || toggle bottom wall swapping&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;O&#039;&#039;&#039; || set top or bottom orientation of wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;O&#039;&#039;&#039; || ornament sprite onto wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;M&#039;&#039;&#039; || toggle masking wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;H&#039;&#039;&#039; || toggle hitscan sensitivity&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;H+SHIFT&#039;&#039;&#039; || toggle one side hitscan sensitivity for the wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;H&#039;&#039;&#039; || set hitag of the current object&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;KP_MINUS&#039;&#039;&#039; || shades down individual sector/wall/sprite or selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_MINUS+ALT&#039;&#039;&#039; || decreases visibility of sector or selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_MINUS+ALT+SHIFT&#039;&#039;&#039; || slowly decreases visibility of sector or selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_MINUS+ALT+CTRL&#039;&#039;&#039; || decreases global visibility&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_PLUS&#039;&#039;&#039; || shades up individual sector/wall/sprite or selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_PLUS+ALT&#039;&#039;&#039; || increases visibility of sector or selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_PLUS+ALT+SHIFT&#039;&#039;&#039; || slowly increases visibility of sector or selected sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_PLUS+ALT+CTRL&#039;&#039;&#039; || increases global visibility&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Note: &#039;&#039;&#039;ALT, CTRL, SHIFT&#039;&#039;&#039; are modifiers so they work with mouse too.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;PLUS/MINUS&#039;&#039;&#039; || cycle tile&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;E&#039;&#039;&#039; || toggle sector texture expansion&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;R&#039;&#039;&#039; || toggle sector texture relativity alignment&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;R&#039;&#039;&#039; || cycle sprite aligment between:  wall aligned, floor aligned, view aligned&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;R&#039;&#039;&#039; || toggle framerate&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F&#039;&#039;&#039; || flip the current object (&#039;&#039;&#039;+SHIFT&#039;&#039;&#039;: reverse direction)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F+ALT&#039;&#039;&#039; || set the first wall of sector&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;PAGE UP&#039;&#039;&#039; || move up selected sprites or sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;PAGE DN&#039;&#039;&#039; || move down selected sprites or sectors&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;PAGE UP+CTRL&#039;&#039;&#039; || put selected sprites on ceiling&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;PAGE DN+CTRL&#039;&#039;&#039; || put selected sprites on ground&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;+CTRL&#039;&#039;&#039; || speed up movement&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;+END&#039;&#039;&#039; || slow down movement&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;+HOME&#039;&#039;&#039; || slow down movement even more&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Note: &#039;&#039;&#039;CTRL, HOME, END&#039;&#039;&#039; are modifiers so they work with mouse too.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;N&#039;&#039;&#039; || toggle &#039;no-autoshade&#039;-bit of sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;I&#039;&#039;&#039; || toggle sprite invisibility&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;D&#039;&#039;&#039; || cycle skill level&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;X&#039;&#039;&#039; || toggle sprite shade and SE light effect preview&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;W&#039;&#039;&#039; || toggle sprite display by class (no effectors/actors)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;Y&#039;&#039;&#039; || toggle purple background&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;C&#039;&#039;&#039; || copy shade from the clipboard to all objects in the map which are the same tile as the tile of the object that in the clipboard. It works separately for sectors/walls/sprites depending on the current object. For example, if several walls use tile 123, and you darken one of them, copy with &#039;&#039;&#039;tab&#039;&#039;&#039;, and hit &#039;&#039;&#039;&#039;&amp;amp;nbsp;C&#039;&#039;&#039;, all walls with tile 123 will take on the darker shade (but non-walls with tile 123 will remain unchanged).&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;T&#039;&#039;&#039; || set lotag&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;H&#039;&#039;&#039; || set hitag&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;S&#039;&#039;&#039; || set shade&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;G&#039;&#039;&#039; || set picnum&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;B&#039;&#039;&#039; || toggle blocking&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;B+SHIFT&#039;&#039;&#039; || toggle one side blocking for the wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;T&#039;&#039;&#039; || cycles translucence for sprites/masked walls (and ceilings/floors for ROR)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;F2&#039;&#039;&#039; || toggle clipboard preview&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;F2+SHIFT&#039;&#039;&#039; || toggle current sprite preview&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;TAB&#039;&#039;&#039; || copy to the clipboard&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LENTER+CTRL+SHIFT&#039;&#039;&#039; || autoshade wall&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;LENTER&#039;&#039;&#039; || paste picnum only&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;;&amp;amp;nbsp;LENTER&#039;&#039;&#039; || on ceilings/floors, auto-align with reference in &#039;&#039;&#039;TAB&#039;&#039;&#039;bed clipboard (incomplete for relative-aligned references)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LENTER+SHIFT&#039;&#039;&#039; || paste some visual (shading+pal) properties of the clipboard on sector/wall/sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LENTER+CTRL&#039;&#039;&#039; || paste some visual (picnum+shading+pal) properties of the clipboard on sector/wall/sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;LENTER&#039;&#039;&#039; || paste all (picnum+shading+pal+flags+tags+extra) properties of the clipboard on sector/wall/sprite&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Note: some fields are only pasted if the type of &#039;thing&#039; in the clipboard (wall/sprite/sector) equals that of the aimed at object&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;C&#039;&#039;&#039; || toggle center sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;ALT+C&#039;&#039;&#039; || replace all tiles in the map with one from the clipboard&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;A&#039;&#039;&#039; || toggle autosave. The interval is configurable (default: every 3 minutes)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;&#039;&amp;amp;nbsp;N&#039;&#039;&#039; || toggle noclip for the camera&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;N+CTRL&#039;&#039;&#039; || toggle noclip for sprites&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;[&#039;&#039;&#039; || slopes up fast&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;[+RSHIFT&#039;&#039;&#039; || slope up with medium speed&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;[+LSHIFT&#039;&#039;&#039; || slope up slowly&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;[+ALT&#039;&#039;&#039; || align slope to the floor of adjoining sector&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;]&#039;&#039;&#039; || slope down fast&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;]+RSHIFT&#039;&#039;&#039; || slope down with medium speed&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;]+LSHIFT&#039;&#039;&#039; || slope down slowly&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;]+ALT&#039;&#039;&#039; || align slope to the ceiling of adjoining sector&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;KP_4&#039;&#039;&#039; || panning floor/ceiling horizontally&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_6&#039;&#039;&#039; || panning floor/ceiling horizontally&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_2&#039;&#039;&#039; || panning floor/ceiling vertically&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_8&#039;&#039;&#039; || panning floor/ceiling vertically&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_4&#039;&#039;&#039; || scaling wall/sprite horizontally&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_6&#039;&#039;&#039; || scaling wall/sprite horizontally&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_2&#039;&#039;&#039; || scaling wall/sprite vertically&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;KP_8&#039;&#039;&#039; || scaling wall/sprite vertically&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;+SHIFT&#039;&#039;&#039; or &#039;&#039;&#039;+ALT&#039;&#039;&#039; || force panning (for walls); the latter is an alternative if Shift-KP5-KP*-combinations are dead.&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;+KP_5&#039;&#039;&#039; || speed up&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;/&#039;&#039;&#039; || Reset panning, repeat and flags to defaults&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;/+SHIFT&#039;&#039;&#039; || set xrepeat to yrepeat (makes square)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;P&#039;&#039;&#039; || enable/disable parallax&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;P+CTRL&#039;&#039;&#039; || change parallax type (works only in classic render, not saved into maps)&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;P+CTRL&#039;&#039;&#039; || Playtest map from current position&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;P+ALT+CTRL&#039;&#039;&#039; || Playtest map from start position&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;P+ALT&#039;&#039;&#039; || change pal of sector/wall/sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;D+ALT&#039;&#039;&#039; || adjust clip distance of the sprite&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;RENTER&#039;&#039;&#039; || switch to 2D mode&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;S+CTRL&#039;&#039;&#039; || save map&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;L+CTRL&#039;&#039;&#039; || load last saved map&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | &#039;&#039;&#039;ESC&#039;&#039;&#039; || quit&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== 2D Mode: Mouse ==&lt;br /&gt;
&lt;br /&gt;
The purpose of mouse in 2D mode is pointing, selecting, moving object in a map.&lt;br /&gt;
&lt;br /&gt;
Every time mouse is pointing at one of these:&lt;br /&gt;
&lt;br /&gt;
# Nothing&lt;br /&gt;
# Sector&lt;br /&gt;
# Sector and wall&lt;br /&gt;
# Sector and sprite&lt;br /&gt;
# Wall (wall without sector - map is corrupt)&lt;br /&gt;
# Sprite (sprite without sector - map is corrupt)&lt;br /&gt;
&lt;br /&gt;
Some commands work differently depending on the current object (the object the mouse points at).&lt;br /&gt;
&lt;br /&gt;
To solve the ambiguity between sectors and walls/sprites, one usually must press ALT to work with walls/sprites instead of sectors.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;RSHIFT&#039;&#039;&#039; (select vertices/sprites) modifiers===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;;&#039;&#039;&#039;: set difference&lt;br /&gt;
* &#039;&#039;&#039; &#039; &#039;&#039;&#039; (quote character): set union&lt;br /&gt;
&lt;br /&gt;
(note that they have to be depressed when &#039;&#039;&#039;RSHIFT&#039;&#039;&#039; is &#039;&#039;released&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RCTRL&#039;&#039;&#039; select only sprites (not walls)&lt;br /&gt;
* &#039;&#039;&#039;END&#039;&#039;&#039; select from all sectors, even grayed out ones&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;RALT&#039;&#039;&#039; (select sectors) modifiers===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;;&#039;&#039;&#039;: set difference&lt;br /&gt;
* &#039;&#039;&#039; &#039; &#039;&#039;&#039; (quote character): set union&lt;br /&gt;
&lt;br /&gt;
(note that they have to be depressed when &#039;&#039;&#039;RALT&#039;&#039;&#039; is &#039;&#039;released&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
* when &#039;&#039;&#039;RCTRL&#039;&#039;&#039; is pressed at &#039;&#039;&#039;RALT&#039;&#039;&#039; release time, then for a sector to be selected, it must be &amp;quot;inside&amp;quot; the mouse pointer instead of being surrounded by the rectangle&lt;br /&gt;
* when holding &#039;&#039;&#039;RSHIFT&#039;&#039;&#039;, will select all sectors, even grayed out ones&lt;br /&gt;
&lt;br /&gt;
See the [[#TROR related keys|TROR section]] for &#039;&#039;&#039;HOME&#039;&#039;&#039; and &#039;&#039;&#039;END&#039;&#039;&#039; modifiers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WHEEL&#039;&#039;&#039; zoom&lt;br /&gt;
* &#039;&#039;&#039;WHEEL+ALT&#039;&#039;&#039; move camera and zoom&lt;br /&gt;
* &#039;&#039;&#039;LEFT BUTTON&#039;&#039;&#039; drag sectors/vertices/sprites&lt;br /&gt;
* &#039;&#039;&#039;RIGHT BUTTON&#039;&#039;&#039; move camera&lt;br /&gt;
* &#039;&#039;&#039;RIGHT MIDDLE&#039;&#039;&#039; move camera&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LSHIFT&#039;&#039;&#039;+&#039;&#039;&#039;LMB&#039;&#039;&#039; (with RSHIFT-highlighted points) interactively scale highlighted points (+&#039;&#039;&#039;CTRL&#039;&#039;&#039; forces square aspect)&lt;br /&gt;
* &#039;&#039;&#039;LSHIFT&#039;&#039;&#039;+&#039;&#039;&#039;RMB&#039;&#039;&#039; (with RSHIFT-highlighted points) interactively rotate highlighted points&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;LSHIFT&#039;&#039;&#039; is released before the mouse button, the interactive scaling/rotation is canceled.&lt;br /&gt;
&lt;br /&gt;
==  2D Mode: Keys ==&lt;br /&gt;
&#039;&#039;&#039;F1&#039;&#039;&#039; show help&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F2&#039;&#039;&#039; show sound index&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F3&#039;&#039;&#039; enter/quit side-view mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;in side-view mode:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Q&#039;&#039;&#039;, &#039;&#039;&#039;W&#039;&#039;&#039;: orbit around center&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;Z&#039;&#039;&#039;: change azimuth&lt;br /&gt;
* &#039;&#039;&#039;MMB&#039;&#039;&#039;: change &amp;quot;player&amp;quot; z&lt;br /&gt;
* &#039;&#039;&#039;RMB&#039;&#039;&#039;: change &amp;quot;player&amp;quot; x/y&lt;br /&gt;
&#039;&#039;&#039;F4&#039;&#039;&#039; toggle first wall preview&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F5&#039;&#039;&#039; show item count&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F6&#039;&#039;&#039; show actor count when pointed at wall&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F6&#039;&#039;&#039; show Sector Effector help when pointed at sprite&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F7&#039;&#039;&#039; edit sector data&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F8&#039;&#039;&#039; edit wall/sprite data&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F9&#039;&#039;&#039; show the Sector Tags help&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F10&#039;&#039;&#039; toggle 2D3D mode (3D preview window in 2D mode)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F10+SHIFT&#039;&#039;&#039; resize 2D3D window&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CTRL+ARROWS&#039;&#039;&#039; move 2D3D window&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F12&#039;&#039;&#039; screenshot&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F12+SHIFT&#039;&#039;&#039; inverted screenshot&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SCROLL LOCK&#039;&#039;&#039; set starting position&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LSHIFT&#039;&#039;&#039; show coordinates/linking sprites&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LSHIFT+[&#039;&#039;&#039;, &#039;&#039;&#039;LSHIFT+]&#039;&#039;&#039; cycle linking sprites&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;M&#039;&#039;&#039; set extra of sector&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;M+ALT&#039;&#039;&#039; set extra of wall/sprite&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/&#039;&#039;&#039; Reset panning, repeat and flags to defaults&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/+SHIFT&#039;&#039;&#039; set xrepeat to yrepeat (makes square)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KP_4&#039;&#039;&#039; scaling sprite horizontally&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;KP_6&#039;&#039;&#039; scaling sprite horizontally&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;KP_2&#039;&#039;&#039; scaling sprite vertically&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;KP_8&#039;&#039;&#039; scaling sprite vertically&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;+KP_5&#039;&#039;&#039; speed up&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; cycle sprite alignment&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; S&#039;&#039;&#039; set sprite size&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; F&#039;&#039;&#039; function menu&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F7+ALT&#039;&#039;&#039; search sector lotag&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F8+ALT&#039;&#039;&#039; on wall: search wall lotag&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F8+ALT&#039;&#039;&#039; on sprite: generic sprite search&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039; search backward&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;]&#039;&#039;&#039; search forward&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;G&#039;&#039;&#039; cycle grid size&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;G+SHIFT&#039;&#039;&#039; cycle grid size backward&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; L&#039;&#039;&#039; set sprite/wall coordinates&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; 3&#039;&#039;&#039; cycle modes of showing object&#039;s name&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; 7&#039;&#039;&#039; swap lotag and hitag of wall/sprite&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; J&#039;&#039;&#039; jump to position of object (asks for sector/wall/sprite, or x,y)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[+ALT&#039;&#039;&#039; goto previous corruption&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;]+ALT&#039;&#039;&#039; goto next corruption&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;X&#039;&#039;&#039; flip selected sectors in x&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Y&#039;&#039;&#039; flip selected sectors in y&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;X+ALT&#039;&#039;&#039; mirror selected sectors in x&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Y+ALT&#039;&#039;&#039; mirror selected sectors in y&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; toggle blocking&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B+SHIFT&#039;&#039;&#039; toggle one side blocking for wall&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;F+ALT&#039;&#039;&#039; set the first wall of sector&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;O&#039;&#039;&#039; ornament sprite onto wall&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;,&#039;&#039;&#039; rotate sprite/selected sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;.&#039;&#039;&#039; rotate sprite/selected sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039; [i.e. &#039;&#039;&#039;,+SHIFT&#039;&#039;&#039;] slowly rotate sprite/selected sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; [i.e. &#039;&#039;&#039;.+SHIFT&#039;&#039;&#039;] slowly rotate sprite/selected sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;,+ALT&#039;&#039;&#039;, &#039;&#039;&#039;.+ALT&#039;&#039;&#039; rotate highlighted sectors by a manually entered angle&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;T&#039;&#039;&#039; set sector lotag&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;T+ALT&#039;&#039;&#039; set wall/sprite lotag&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;T+CTRL&#039;&#039;&#039; toggle show tags&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;H&#039;&#039;&#039; set sector hitag&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;H+ALT&#039;&#039;&#039; set wall/sprite hitag&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;H+CTRL&#039;&#039;&#039; toggle hitscan sensitivity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;H+CTRL+SHIFT&#039;&#039;&#039; toggle hitscan sensitivity&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;P&#039;&#039;&#039; set sector pal&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;E&#039;&#039;&#039; set sprite status list&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TAB&#039;&#039;&#039; show sector data&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TAB+SHIFT&#039;&#039;&#039; show wall/sprite data&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TAB+CTRL&#039;&#039;&#039; enable/disable filling of aimed-at sector&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LCTRL+RSHIFT&#039;&#039;&#039; select all walls of the current sector (point at a wall and holding &#039;&#039;&#039;LCTRL&#039;&#039;&#039;, press and release &#039;&#039;&#039;RSHIFT&#039;&#039;&#039;). Set ops (see RSHIFT above) work too.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; zoom in&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Z&#039;&#039;&#039; zoom out&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;L&#039;&#039;&#039; toggle grid lock&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;J&#039;&#039;&#039; join sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039; insert sprite, pressing a key from &#039;&#039;&#039;1&#039;&#039;&#039; to &#039;&#039;&#039;0&#039;&#039;&#039; on the upper row before pressing &#039;&#039;&#039;S&#039;&#039;&#039; will make the inserted sprite&#039;s picnum be 1 to 10, respectively&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;S+ALT&#039;&#039;&#039; make inner sector&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C&#039;&#039;&#039; duplicate sectors/sprites&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C&#039;&#039;&#039; start circle attached to a wall&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;KP +&#039;&#039;&#039; increase amount of walls in circle&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;KP -&#039;&#039;&#039; decrease amount of walls in circle&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SPACE&#039;&#039;&#039; start/end drawing of sector, end drawing of circle&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LENTER&#039;&#039;&#039; when having some walls drawn, insert points at intersections with existing walls; clear drawn walls then&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LENTER&#039;&#039;&#039; check nextwall pointer for the highlighted line&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LENTER&#039;&#039;&#039; when having drawn some walls, batch-insert points where the drawn lines intersect with non-grayed-out walls&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LSHIFT+LCTRL+LENTER&#039;&#039;&#039; check ALL pointers (manual attempt to recover map)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;BACKSPACE&#039;&#039;&#039; remove the last wall during drawing sector&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DEL&#039;&#039;&#039; delete sprite&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DEL+CTRL&#039;&#039;&#039; delete sector&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DEL+CTRL+LShift&#039;&#039;&#039; delete highlighted sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;INS&#039;&#039;&#039; duplicate sectors/sprites&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;INS&#039;&#039;&#039; start circle attached to a wall&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;INS&#039;&#039;&#039; add vertex to wall&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RENTER&#039;&#039;&#039; switch to 3D mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ESC&#039;&#039;&#039; menu&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; A&#039;&#039;&#039; toggle autosave(every 3 minutes)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039; N&#039;&#039;&#039; toggle noclip&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;S+CTRL&#039;&#039;&#039; save map&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;L+CTRL&#039;&#039;&#039; load map&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;P+CTRL&#039;&#039;&#039; Playtest map from current position&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;P+CTRL+ALT&#039;&#039;&#039; Playtest map from start position&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R+CTRL&#039;&#039;&#039; manual grayout: if some sectors are highlighted, make the editable z range [min ceiling z, max floor z] of those; else reset z limits&lt;br /&gt;
&lt;br /&gt;
==TROR related keys==&lt;br /&gt;
===2D mode===&lt;br /&gt;
&#039;&#039;&#039;E+CTRL&#039;&#039;&#039; sector extension prompt (sectors to extend must be highlighted)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;E+CTRL&#039;&#039;&#039; make sandwich [&#039;&#039;needs better explanation&#039;&#039;]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;E+CTRL&#039;&#039;&#039; punch loop through extension (loop points must be highlighted, e.g. with &#039;&#039;&#039;RSHIFT&#039;&#039;&#039;+&#039;&#039;&#039;LCTRL&#039;&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A+CTRL&#039;&#039;&#039; toggle auto-grayout of non-extended sectors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;J+CTRL&#039;&#039;&#039; TROR-join sectors. The selection must consist of the two sets of sectors you wish to join.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;U+CTRL&#039;&#039;&#039; Clear extension: delete the bunch (i.e. ceiling-floor connection) of the aimed-at sector&#039;s floor&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PGUP&#039;&#039;&#039;/&#039;&#039;&#039;PGDN&#039;&#039;&#039; Change &#039;player&#039; height in discrete steps in order to go through the different levels&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TAB+CTRL&#039;&#039;&#039; Display one currently aimed at sector (of potentially many that lie under the mouse crosshair)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;HOME&#039;&#039;&#039; and &#039;&#039;&#039;END&#039;&#039;&#039; (as modifiers to &#039;&#039;&#039;RALT&#039;&#039;&#039;): select all sectors whose floor&#039;s/ceiling&#039;s bunchnum equal the bunchnum of the aimed at sector (useful for further operations on whole bunches)&lt;br /&gt;
&lt;br /&gt;
===3D mode===&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039; invisibility preview: toggle fake ROR texture on non-masked portals&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LENTER+CTRL&#039;&#039;&#039; When aiming at an extended floor/ceiling, paste to all floors/ceilings of the bunch of the aimed at one&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;T&#039;&#039;&#039;, &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;H&#039;&#039;&#039; work as with walls, though they set/toggle the bits only on &#039;&#039;&#039;one&#039;&#039;&#039; side&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Some console commands/variables==&lt;br /&gt;
&lt;br /&gt;
See &amp;quot;help &amp;lt;console-command/var&amp;gt;&amp;quot; for help on a particular command/variable.&lt;br /&gt;
&lt;br /&gt;
pk_quickmapcycling&amp;lt;br&amp;gt;&lt;br /&gt;
pk_uedaccel&amp;lt;br&amp;gt;&lt;br /&gt;
osd_tryscript&amp;lt;br&amp;gt;&lt;br /&gt;
sideview_reversehorizrot&amp;lt;br&amp;gt;&lt;br /&gt;
fixmaponsave_sprites&amp;lt;br&amp;gt;&lt;br /&gt;
show_heightindicators&amp;lt;br&amp;gt;&lt;br /&gt;
show_ambiencesounds&amp;lt;br&amp;gt;&lt;br /&gt;
corruptcheck_noalreadyrefd&amp;lt;br&amp;gt;&lt;br /&gt;
corruptcheck&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mapster32 keys as tables (unmaintained and obsolete)==&lt;br /&gt;
&lt;br /&gt;
Below are the Mapster32 keys as three sortable tables. They are sorted such that the more &#039;basic&#039; keys are at the top.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The column headers have the following meaning:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;key/keys&#039;&#039;&#039;: self-explanatory. Where a key starts with a &#039;+&#039; on a line of its own,&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;it means that it should be pressed simultaneously with the first one in the&lt;br /&gt;
same table row.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;type&#039;&#039;&#039;: type of command: info=informational, edit=editing, navi=navigation,&lt;br /&gt;
disp=display, misc=miscellany&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sec&#039;&#039;&#039;, &#039;&#039;&#039;spr&#039;&#039;&#039;,&#039;&#039;&#039;wal&#039;&#039;&#039;: in case of an editing command, whether it&lt;br /&gt;
potentially acts on &#039;&#039;&#039;sec&#039;&#039;&#039;tors, &#039;&#039;&#039;spr&#039;&#039;&#039;ites, and/or &#039;&#039;&#039;wal&#039;&#039;&#039;ls.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;adv&#039;&#039;&#039;: whether the command is &#039;advanced&#039;. This is set somewhat arbitrarily.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;new&#039;&#039;&#039;: whether the functionality of the command is new to Mapster32. An &#039;&#039;&#039;e&#039;&#039;&#039; means that it&#039;s enhanced from BUILD.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;N&#039;&#039;&#039;: a running number. To restore the original order, sort by it.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Mapster 32 keys &amp;amp;mdash; shared keys for 2D and 3D mode&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot;&lt;br /&gt;
! key/keys!!description!!type!!sec&amp;lt;br&amp;gt;!!spr&amp;lt;br&amp;gt;!!wal&amp;lt;br&amp;gt;!!adv&amp;lt;br&amp;gt;!!new&amp;lt;br&amp;gt;!!N&lt;br /&gt;
|-&lt;br /&gt;
! F1&lt;br /&gt;
|help||info||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||0&lt;br /&gt;
|-&lt;br /&gt;
! UP/DOWN &amp;lt;br&amp;gt; LEFT/RIGHT &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+LShift&lt;br /&gt;
|move forward/back &amp;lt;br&amp;gt; turn left/right (&#039;&#039;&#039;+RCtrl&#039;&#039;&#039;: strafe) &amp;lt;br&amp;gt; speed up movements||navi||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||1&lt;br /&gt;
|-&lt;br /&gt;
! RENTER&lt;br /&gt;
|toggle between 2D and 3D modes||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||2&lt;br /&gt;
|-&lt;br /&gt;
! B &lt;br /&gt;
|toggle blocking of wall/sprite (&#039;&#039;&#039;+Shift&#039;&#039;&#039;: one-sided)||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||3&lt;br /&gt;
|-&lt;br /&gt;
! R&lt;br /&gt;
|cycle sprite aligment||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||4&lt;br /&gt;
|-&lt;br /&gt;
! ,/.&lt;br /&gt;
|rotate sprite (&#039;&#039;&#039;+Shift&#039;&#039;&#039;: slowly)||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||5&lt;br /&gt;
|-&lt;br /&gt;
! DEL&lt;br /&gt;
|delete sprite||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||6&lt;br /&gt;
|-&lt;br /&gt;
! /&lt;br /&gt;
|reset panning, repeat and flags||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||7&lt;br /&gt;
|-&lt;br /&gt;
! Alt+F&lt;br /&gt;
|set first wall of sector||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||8&lt;br /&gt;
|-&lt;br /&gt;
! /+Shift&lt;br /&gt;
|set xrepeat to yrepeat (make square)||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||9&lt;br /&gt;
|-&lt;br /&gt;
! \&#039;N &lt;br /&gt;
|toggle camera clipping||navi||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||10&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+N&lt;br /&gt;
|toggle sprite clipping through floors/ceilings||edit||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||11&lt;br /&gt;
|-&lt;br /&gt;
! \&#039;A &lt;br /&gt;
|toggle autosave (interval configurable in mapster32.cfg)||misc||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||12&lt;br /&gt;
|-&lt;br /&gt;
! (Shift+)F12&lt;br /&gt;
|capture (inverted) screenshot||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||13&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+L&lt;br /&gt;
|load map||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||14&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+S&lt;br /&gt;
|save map||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||15&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+P&lt;br /&gt;
|playtest map from current position||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||16&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+Alt+P&lt;br /&gt;
|playtest map from starting position||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Mapster 32 keys &amp;amp;mdash; 2D mode&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot;&lt;br /&gt;
! key/keys!!description!!type!!sec&amp;lt;br&amp;gt;!!spr&amp;lt;br&amp;gt;!!wal&amp;lt;br&amp;gt;!!adv&amp;lt;br&amp;gt;!!new&amp;lt;br&amp;gt;!!N&lt;br /&gt;
|-&lt;br /&gt;
! A/Z&lt;br /&gt;
|zoom in/out||disp||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||0&lt;br /&gt;
|-&lt;br /&gt;
! L&lt;br /&gt;
|toggle grid lock||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||1&lt;br /&gt;
|-&lt;br /&gt;
! G (+Shift)&lt;br /&gt;
|cycle grid size (backwards), set auto grid||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;e&#039;&#039;&#039;&amp;lt;/center&amp;gt;||2&lt;br /&gt;
|-&lt;br /&gt;
! S&lt;br /&gt;
|insert sprite &amp;lt;br&amp;gt;(prefix 1-0 on upper row: set picnum to 1-10, resp.)||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;e&#039;&#039;&#039;&amp;lt;/center&amp;gt;||3&lt;br /&gt;
|-&lt;br /&gt;
! O&lt;br /&gt;
|ornament sprite onto wall||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||4&lt;br /&gt;
|-&lt;br /&gt;
! J&lt;br /&gt;
|join sectors||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||5&lt;br /&gt;
|-&lt;br /&gt;
! P&lt;br /&gt;
|set sector pal||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||6&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+H&lt;br /&gt;
|toggle hitscan sensitivity||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||7&lt;br /&gt;
|-&lt;br /&gt;
! T (+Alt)&lt;br /&gt;
|set lotag of sector (wall/sprite)||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||8&lt;br /&gt;
|-&lt;br /&gt;
! H (+Alt)&lt;br /&gt;
|set hitag of sector (wall/sprite)||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||9&lt;br /&gt;
|-&lt;br /&gt;
! KP4/6/2/8&lt;br /&gt;
|scale sprite (+&#039;&#039;&#039;KP5&#039;&#039;&#039;: speed up)||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||10&lt;br /&gt;
|-&lt;br /&gt;
! SPACE&lt;br /&gt;
|draw sector; end circle drawing||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||11&lt;br /&gt;
|-&lt;br /&gt;
! BACKSPACE&lt;br /&gt;
|remove last wall when drawing sector||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||12&lt;br /&gt;
|-&lt;br /&gt;
! BACKSPACE&lt;br /&gt;
|cycle 2D display mode (textured/non-textured)||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||13&lt;br /&gt;
|-&lt;br /&gt;
! INS&lt;br /&gt;
|add vertex to wall||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||14&lt;br /&gt;
|-&lt;br /&gt;
! DEL+Ctrl&lt;br /&gt;
|delete sector||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||15&lt;br /&gt;
|-&lt;br /&gt;
! C &amp;lt;br&amp;gt; KP+/KP-&lt;br /&gt;
|start circle drawing from wall &amp;lt;br&amp;gt; increase/decrease amount of walls in circle||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||16&lt;br /&gt;
|-&lt;br /&gt;
! Alt+S&lt;br /&gt;
|make sector from inner loop||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||17&lt;br /&gt;
|-&lt;br /&gt;
! RShift &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; +;/&#039;&lt;br /&gt;
|select group of walls and sprites &amp;lt;br&amp;gt; set difference/union||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||18&lt;br /&gt;
|-&lt;br /&gt;
! RAlt &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; +;/&#039; &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+RCtrl&lt;br /&gt;
|select group of sectors &amp;lt;br&amp;gt; set difference/union &amp;lt;br&amp;gt; point sector selection||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||19&lt;br /&gt;
|-&lt;br /&gt;
! INS or C&lt;br /&gt;
|duplicate selected sectors/sprites||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||20&lt;br /&gt;
|-&lt;br /&gt;
! SCROLLLOCK&lt;br /&gt;
|set starting position||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||21&lt;br /&gt;
|-&lt;br /&gt;
! TAB&lt;br /&gt;
|show sector data||info||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||22&lt;br /&gt;
|-&lt;br /&gt;
! TAB+Ctrl &amp;lt;br&amp;gt; (or TAB+Shift)&lt;br /&gt;
|show wall/sprite data||info||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||23&lt;br /&gt;
|-&lt;br /&gt;
! LShift&lt;br /&gt;
|show coords||info||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||24&lt;br /&gt;
|-&lt;br /&gt;
! M (+Alt)&lt;br /&gt;
|set extra of sector (wall/sprite)||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||25&lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
|set sprite status list||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||26&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+T&lt;br /&gt;
|toggle show tags||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||27&lt;br /&gt;
|-&lt;br /&gt;
! &#039;3&lt;br /&gt;
|cycle modes of showing object&#039;s name||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||28&lt;br /&gt;
|-&lt;br /&gt;
! &#039;7&lt;br /&gt;
|swap lotag and hitag of wall/sprite||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||29&lt;br /&gt;
|-&lt;br /&gt;
! &#039;J&lt;br /&gt;
|jump to position (X,Y)||misc||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||30&lt;br /&gt;
|-&lt;br /&gt;
! &#039;S&lt;br /&gt;
|set sprite size||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||31&lt;br /&gt;
|-&lt;br /&gt;
! &#039;L&lt;br /&gt;
|set wall/sprite coordinates||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||32&lt;br /&gt;
|-&lt;br /&gt;
! &#039;F&lt;br /&gt;
|Special functions menu&amp;lt;blockquote&amp;gt;&#039;&#039;Replace invalid tiles&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Delete all spr of tile #&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Set map sky shade&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Set map sky height&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Global Z coord shift&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Resize selection&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Global shade divide&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Global visibility divide&#039;&#039;&amp;lt;/blockquote&amp;gt;||edit||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||33&lt;br /&gt;
|-&lt;br /&gt;
! X/Y (+Alt)&lt;br /&gt;
|flip (mirror) selected sectors in x/y||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||34&lt;br /&gt;
|-&lt;br /&gt;
! F2&lt;br /&gt;
|show sound index (root CON file to fetch sound &amp;lt;br&amp;gt;definitions from can be specified at startup; &amp;lt;br&amp;gt;default is GAME.CON)||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||35&lt;br /&gt;
|-&lt;br /&gt;
! F4&lt;br /&gt;
|toggle first wall highlighting||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||36&lt;br /&gt;
|-&lt;br /&gt;
! F5&lt;br /&gt;
|show item count||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||37&lt;br /&gt;
|-&lt;br /&gt;
! F6&lt;br /&gt;
|show actor count (when pointed at sprite: SE help)||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||38&lt;br /&gt;
|-&lt;br /&gt;
! F7&lt;br /&gt;
|edit sector data||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||39&lt;br /&gt;
|-&lt;br /&gt;
! F8&lt;br /&gt;
|edit wall/sprite data||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||40&lt;br /&gt;
|-&lt;br /&gt;
! F9&lt;br /&gt;
|show ST help||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||41&lt;br /&gt;
|-&lt;br /&gt;
! F10&lt;br /&gt;
|show 3D preview window in 2D mode||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||41&lt;br /&gt;
|-&lt;br /&gt;
! Alt+F7&lt;br /&gt;
|search sector by tag||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||42&lt;br /&gt;
|-&lt;br /&gt;
! Alt+F8&lt;br /&gt;
|search wall by tag/search sprite||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;e&#039;&#039;&#039;&amp;lt;/center&amp;gt;||43&lt;br /&gt;
|-&lt;br /&gt;
! ]/[&lt;br /&gt;
|search forward/backward||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||44&lt;br /&gt;
|-&lt;br /&gt;
! LCtrl+RShift&lt;br /&gt;
|select all walls of current sector &amp;lt;br&amp;gt;(point at a wall and holding &#039;&#039;&#039;LCtrl&#039;&#039;&#039;, press &#039;&#039;&#039;RShift&#039;&#039;&#039;)||edit||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||45&lt;br /&gt;
|-&lt;br /&gt;
! LENTER&lt;br /&gt;
|check pointers for current sector &amp;lt;br&amp;gt;(&#039;&#039;&#039;+LCtrl+LShift&#039;&#039;&#039;: check ALL pointers)||edit||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||46&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Mapster 32 keys &amp;amp;mdash; 3D mode&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot;&lt;br /&gt;
! key/keys!!description!!type!!sec&amp;lt;br&amp;gt;!!spr&amp;lt;br&amp;gt;!!wal&amp;lt;br&amp;gt;!!adv&amp;lt;br&amp;gt;!!new&amp;lt;br&amp;gt;!!N&lt;br /&gt;
|-&lt;br /&gt;
! A/Z &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+Ctrl &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+LShift&lt;br /&gt;
|move up/down &amp;lt;br&amp;gt; look down/up &amp;lt;br&amp;gt; speed up movements||navi||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||0&lt;br /&gt;
|-&lt;br /&gt;
! CAPSLOCK  or &#039;Z&lt;br /&gt;
|cycle zmode||navi||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||1&lt;br /&gt;
|-&lt;br /&gt;
! KP+/KP-&lt;br /&gt;
|change shade||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||2&lt;br /&gt;
|-&lt;br /&gt;
! KP+/KP-+Alt &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+Alt+Shift &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+Ctrl+Alt&lt;br /&gt;
|change visibility &amp;lt;br&amp;gt; change visibility in smaller increments &amp;lt;br&amp;gt; change global visibility||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||3&lt;br /&gt;
|-&lt;br /&gt;
! ]/[ &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+RShift &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+LShift&lt;br /&gt;
|slope down/up &amp;lt;br&amp;gt; smaller increments &amp;lt;br&amp;gt; smallest increments ||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||4&lt;br /&gt;
|-&lt;br /&gt;
! [+Alt&lt;br /&gt;
|align slope to floor of adjoining sector||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||5&lt;br /&gt;
|-&lt;br /&gt;
! ]+Alt&lt;br /&gt;
|align slope to ceiling of adjoining sector||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||6&lt;br /&gt;
|-&lt;br /&gt;
! PGUP/PGDN &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+END &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+HOME&lt;br /&gt;
|move object up/down (&#039;&#039;&#039;+Ctrl&#039;&#039;&#039; on sectors: 4x) &amp;lt;br&amp;gt; 1/2 of normal increments &amp;lt;br&amp;gt; 1/4 of normal increments||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||7&lt;br /&gt;
|-&lt;br /&gt;
! PGUP+Ctrl&lt;br /&gt;
|put sprite on ceiling||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||8&lt;br /&gt;
|-&lt;br /&gt;
! PGDN+Ctrl&lt;br /&gt;
|put sprite on ground||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||9&lt;br /&gt;
|-&lt;br /&gt;
! KP4/6/2/8 &amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;+Shift or +Alt&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;+KP5&lt;br /&gt;
|pan floor/ceiling or scale wall/sprite &amp;lt;br&amp;gt;force panning &amp;lt;br&amp;gt; speed up||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||10&lt;br /&gt;
|-&lt;br /&gt;
! V&lt;br /&gt;
|choose tile||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||11&lt;br /&gt;
|-&lt;br /&gt;
! S&lt;br /&gt;
|insert sprite||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||12&lt;br /&gt;
|-&lt;br /&gt;
! G&lt;br /&gt;
|set picnum||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||13&lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
|toggle sector texture expansion||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||14&lt;br /&gt;
|-&lt;br /&gt;
! F&lt;br /&gt;
|flip texture||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||15&lt;br /&gt;
|-&lt;br /&gt;
! R&lt;br /&gt;
|toggle sector texture relativity||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||16&lt;br /&gt;
|-&lt;br /&gt;
! &#039;T&lt;br /&gt;
|set lotag||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||17&lt;br /&gt;
|-&lt;br /&gt;
! &#039;H&lt;br /&gt;
|set hitag||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||18&lt;br /&gt;
|-&lt;br /&gt;
! &#039;S&lt;br /&gt;
|set shade||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||19&lt;br /&gt;
|-&lt;br /&gt;
! Alt+P&lt;br /&gt;
|set pal||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||20&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
|toggle one sided sprite/wall||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||21&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
|toggle bottom wall swapping||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||22&lt;br /&gt;
|-&lt;br /&gt;
! M&lt;br /&gt;
|toggle masking wall||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||23&lt;br /&gt;
|-&lt;br /&gt;
! O&lt;br /&gt;
|toggle wall orientation||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||24&lt;br /&gt;
|-&lt;br /&gt;
! O&lt;br /&gt;
|ornament sprite onto wall||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||25&lt;br /&gt;
|-&lt;br /&gt;
! C&lt;br /&gt;
|toggle sprite centering||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||26&lt;br /&gt;
|-&lt;br /&gt;
! H&lt;br /&gt;
|toggle hitscan sensitivity (&#039;&#039;&#039;+Shift&#039;&#039;&#039;: one-sided)||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||27&lt;br /&gt;
|-&lt;br /&gt;
! T&lt;br /&gt;
|cycle translucence||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||28&lt;br /&gt;
|-&lt;br /&gt;
! P&lt;br /&gt;
|toggle parallax||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||29&lt;br /&gt;
|-&lt;br /&gt;
! &#039;V&lt;br /&gt;
|set sector visibility||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||30&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+P (obsolete)&lt;br /&gt;
|change parallax type (classic renderer only)||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||31&lt;br /&gt;
|-&lt;br /&gt;
! .&lt;br /&gt;
|search &amp;amp;amp; fix panning of the wall to the right||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||32&lt;br /&gt;
|-&lt;br /&gt;
! &#039;L&lt;br /&gt;
|set coordinates||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||33&lt;br /&gt;
|-&lt;br /&gt;
! &#039;M&lt;br /&gt;
|set extra||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||34&lt;br /&gt;
|-&lt;br /&gt;
! +/-&lt;br /&gt;
|cycle tile||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||35&lt;br /&gt;
|-&lt;br /&gt;
! TAB&lt;br /&gt;
|copy to clipboard||edit||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||36&lt;br /&gt;
|-&lt;br /&gt;
! LENTER&lt;br /&gt;
|paste all (pic+shade+pal+flags+tags+extra)||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||37&lt;br /&gt;
|-&lt;br /&gt;
! &#039;LENTER&lt;br /&gt;
|paste picnum only||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||38&lt;br /&gt;
|-&lt;br /&gt;
! LENTER+Shift&lt;br /&gt;
|paste shading+pal||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||39&lt;br /&gt;
|-&lt;br /&gt;
! LENTER+Ctrl&lt;br /&gt;
|paste picnum+shading+pal||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||40&lt;br /&gt;
|-&lt;br /&gt;
! Alt+C&lt;br /&gt;
|replace all &amp;quot;same&amp;quot; tiles with clipboard tile||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||41&lt;br /&gt;
|-&lt;br /&gt;
! Alt+D&lt;br /&gt;
|adjust clipping distance of sprite||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||42&lt;br /&gt;
|-&lt;br /&gt;
! ;V&lt;br /&gt;
|set sector visibility on all selected sectors||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||43&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
|toggle Sector over Sector &amp;lt;br&amp;gt;(see http://www.users.on.net/~triforce/cduke3d/)||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||44&lt;br /&gt;
|-&lt;br /&gt;
! &#039;BACKSPACE&lt;br /&gt;
|clear all flags for wall/sprite||edit||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||45&lt;br /&gt;
|-&lt;br /&gt;
! &#039;P&lt;br /&gt;
|set palette of all sprites/walls/floors/ceilings &amp;lt;br&amp;gt;(respectively) in all selected sectors||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||46&lt;br /&gt;
|-&lt;br /&gt;
! ;P&lt;br /&gt;
|set palette of all sprites/walls/floors/ceilings &amp;lt;br&amp;gt;in all selected sectors||edit||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||47&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+Shift&amp;lt;br&amp;gt;+LENTER&lt;br /&gt;
|autoshade wall||edit||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;x&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||48&lt;br /&gt;
|-&lt;br /&gt;
! F2&lt;br /&gt;
|toggle clipboard preview||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||49&lt;br /&gt;
|-&lt;br /&gt;
! F2+Shift&lt;br /&gt;
|toggle current tile display||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||50&lt;br /&gt;
|-&lt;br /&gt;
! F3&lt;br /&gt;
|toggle mouselook||misc||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||51&lt;br /&gt;
|-&lt;br /&gt;
! F4&lt;br /&gt;
|toggle ambient sounds||misc||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||52&lt;br /&gt;
|-&lt;br /&gt;
! F5&lt;br /&gt;
|toggle mouse navigation||navi||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||53&lt;br /&gt;
|-&lt;br /&gt;
! F6&lt;br /&gt;
|toggle automatic SE help||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||54&lt;br /&gt;
|-&lt;br /&gt;
! F7&lt;br /&gt;
|toggle automatic ST help||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||55&lt;br /&gt;
|-&lt;br /&gt;
! F9&lt;br /&gt;
|reload and activate maphacks||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||56&lt;br /&gt;
|-&lt;br /&gt;
! F10&lt;br /&gt;
|disable maphacks||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||57&lt;br /&gt;
|-&lt;br /&gt;
! F11&lt;br /&gt;
|cycle brightness||misc||||||||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||58&lt;br /&gt;
|-&lt;br /&gt;
! &#039;D&lt;br /&gt;
|cycle skill level||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||59&lt;br /&gt;
|-&lt;br /&gt;
! &#039;X&lt;br /&gt;
|toggle sprite shade preview||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||60&lt;br /&gt;
|-&lt;br /&gt;
! &#039;W&lt;br /&gt;
|toggle sprite display||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||61&lt;br /&gt;
|-&lt;br /&gt;
! &#039;Y&lt;br /&gt;
|toggle purple background||disp||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||62&lt;br /&gt;
|-&lt;br /&gt;
! &#039;C&lt;br /&gt;
|copy shade from clipboard to all &amp;quot;same&amp;quot; objects||edit||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||63&lt;br /&gt;
|-&lt;br /&gt;
! &#039;R&lt;br /&gt;
|toggle framerate display||info||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;n&amp;lt;/center&amp;gt;||64&lt;br /&gt;
|-&lt;br /&gt;
! Ctrl+T&lt;br /&gt;
|when pointing on a letter sprite: text entry tool &amp;lt;br&amp;gt;(alphabets are configurable in tiles.cfg)||edit||||||||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||&amp;lt;center&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;&amp;lt;/center&amp;gt;||65&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=For&amp;diff=13923</id>
		<title>For</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=For&amp;diff=13923"/>
		<updated>2020-07-15T15:12:45Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Add note about conditional evaluation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;for&#039;&#039;&#039; &amp;lt;gamevar&amp;gt; &amp;lt;function&amp;gt; { [...] }&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;for&#039;&#039;&#039; &amp;lt;gamevar&amp;gt; &amp;lt;function&amp;gt; &amp;lt;value&amp;gt; { [...] }&lt;br /&gt;
&lt;br /&gt;
Executes the code in the curly braces for every instance of the function specified, and &amp;lt;[[gamevar]]&amp;gt; stores the sprite/sector/wall/etc found in the current function.&lt;br /&gt;
&lt;br /&gt;
For example, setting &amp;lt;function&amp;gt; to &#039;&#039;&#039;allsprites&#039;&#039;&#039; will execute the code for every sprite in-game, and the var specified in &amp;lt;[[gamevar]]&amp;gt; will be set to the sprite number of the current sprite it&#039;s on.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
| &#039;&#039;&#039;allsprites&#039;&#039;&#039; || All actors/sprites in-game.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;allsectors&#039;&#039;&#039; || All sectors in the map.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;allwalls&#039;&#039;&#039; || All walls in the map.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;activelights&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;lights&#039;&#039;&#039; || All active polymer lights.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;drawnsprites&#039;&#039;&#039; || Only the sprites currently being drawn.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spritesofsector&#039;&#039;&#039;&amp;lt;sectnum&amp;gt;&amp;lt;br /&amp;gt; &#039;&#039;&#039;sprofsec&#039;&#039;&#039;&amp;lt;sectnum&amp;gt; || All sprites in the given sector.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spritesofstatus&#039;&#039;&#039; &amp;lt;statnum&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;sprofstat&#039;&#039;&#039; &amp;lt;statnum&amp;gt; || All sprites with the given [[statnum]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;wallsofsector&#039;&#039;&#039; &amp;lt;sectnum&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;walofsec&#039;&#039;&#039; &amp;lt;sectnum&amp;gt; || The walls of the given sector.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;loopofwall&#039;&#039;&#039; &amp;lt;wall num&amp;gt; || All walls in the same loop of the given wall.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;range&#039;&#039;&#039; &amp;lt;num&amp;gt; || A range from 0 to the number specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike other loop forms, the conditional statement is &#039;&#039;not&#039;&#039; re-evaluated each iteration. For example, the following loop will log 1 through 10:&lt;br /&gt;
&lt;br /&gt;
 var i&lt;br /&gt;
 var j 10&lt;br /&gt;
 for i range j {&lt;br /&gt;
     add i 1 // only affects current iteration; log 1..10 instead of 0..9&lt;br /&gt;
     sub j 1 // same as above; effectively does nothing in this example&lt;br /&gt;
     al i&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Extra&amp;diff=13922</id>
		<title>Extra</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Extra&amp;diff=13922"/>
		<updated>2020-07-12T16:13:34Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Add a note about wall[].extra from https://voidpoint.io/terminx/eduke32/-/issues/92#note_1695&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extra is available for [[sector]], [[hittype]], [[sprite]], and [[Members of the wall structure|wall]] structs.&lt;br /&gt;
&lt;br /&gt;
For [[sprite|sprites]], &#039;&#039;&#039;extra&#039;&#039;&#039; typically the actor-in-question&#039;s health value. It&#039;s also used to store the damage of hard-coded projectiles. See also [[htextra]].&lt;br /&gt;
&lt;br /&gt;
For a [[sector|sector]], &#039;&#039;&#039;extra&#039;&#039;&#039; contains the value of any GSPEED sprites that were in the sector (Gspeed sprites are deleted when the level loads up) &lt;br /&gt;
&lt;br /&gt;
For a [[wall|wall]], &#039;&#039;&#039;extra&#039;&#039;&#039; is reset to -1 at map load time in-game because the game uses the field for internal purposes. You can access the values before they&#039;re wiped in [[EVENT_PRELEVEL]], however.&lt;br /&gt;
&lt;br /&gt;
[[Category:Sector structure members]]&lt;br /&gt;
[[Category:Sprite structure members]]&lt;br /&gt;
[[Category:Wall structure members]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Randomseed&amp;diff=13921</id>
		<title>Randomseed</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Randomseed&amp;diff=13921"/>
		<updated>2020-07-12T15:11:22Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Document randomseed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The value used to seed the shared &amp;quot;game&amp;quot; PRNG.&lt;br /&gt;
&lt;br /&gt;
It is initially set to 1996. It can be set to an arbitrary value with [[getticks]]:&lt;br /&gt;
&lt;br /&gt;
 getticks randomseed&lt;br /&gt;
&lt;br /&gt;
Note that the value of &#039;&#039;&#039;randomseed&#039;&#039;&#039; will &#039;&#039;change&#039;&#039; when invoking the PRNG through functions like [[randvar]]. If you want to record the seed for future play sessions, do it before invoking the generator.&lt;br /&gt;
&lt;br /&gt;
[[Category:Constantly updated gamevars]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Category:Gamevar_manipulation&amp;diff=13920</id>
		<title>Category:Gamevar manipulation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Category:Gamevar_manipulation&amp;diff=13920"/>
		<updated>2020-07-09T23:32:24Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Mention global var hoisting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definition ==&lt;br /&gt;
&#039;&#039;&#039;gamevar&#039;&#039;&#039; &amp;lt;varname&amp;gt; &amp;lt;value&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;var&#039;&#039;&#039; &amp;lt;varname&amp;gt; &amp;lt;value&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gamevar is a variable that can be used to store numerical data which can then be referenced between [[actor]]s, [[state]]s and [[event]]s. &#039;&#039;&#039;var&#039;&#039;&#039; is hereby semantically equivalent to &#039;&#039;&#039;gamevar&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The gamevar&#039;s flags define a bitmap that determines how the variable is treated by the game. For instance, a gamevar with flags of 0 is known as a global variable.  A global variable exists once in the code, and any time a global variable is set, the new value is seen by all [[actor]]s and [[event]]s.  A gamevar with flag bit 1 set is a per-player variable, which exists once for each player in the game.  A gamevar with flag bit 2 set is a per-[[actor]] variable, which exists as many times in the code as there are [[sprite]]s in the map.  This means that each [[sprite]] has its own copy of a per-[[actor]] variable stored in memory. &#039;&#039;&#039;Note that a gamevar can only be defined as either global, per-player, or per-actor, but not as a combination thereof.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Gamevars are stored as &#039;&#039;&#039;signed 32-bit integers&#039;&#039;&#039; and therefore have a value range of &#039;&#039;-2,147,483,648 (-2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;)&#039;&#039; to &#039;&#039;2,147,483,647 (2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;-1)&#039;&#039;. Going above and below this range causes the value to overflow and underflow respectively.&lt;br /&gt;
&lt;br /&gt;
Note that it is possible to omit the &amp;lt;value&amp;gt; and &amp;lt;flags&amp;gt; parameters entirely to define a global variable with an initial value of 0, with no other flags set. Example:&lt;br /&gt;
 var TEMP1&lt;br /&gt;
&lt;br /&gt;
It is also possible to chain flags separately at the end of the gamevar definition, instead of compiling them into a single value, as follows:&lt;br /&gt;
 var TEMP2 10 1 4096    // This defines a per-player (1), read-only (4096) variable with initial value 10.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that global variables are still global, even when defined within a state block. The variable definition is effectively &amp;quot;hoisted,&amp;quot; so the variable will not be reset to the initial value each time its definition is encountered.&lt;br /&gt;
&lt;br /&gt;
The following pages contain information on basic gamevar operations as well as conditional statements:&lt;br /&gt;
*[[gamevar operators]]&lt;br /&gt;
*[[ifvar conditions]]&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
&lt;br /&gt;
The following table shows all currently defined gamevar flags. The first 2 are the only ones needed under normal circumstances, but one can also assign higher flags to user-defined gamevars (given that you know what you are doing).&lt;br /&gt;
&lt;br /&gt;
{{gamevar flags}}&lt;br /&gt;
&lt;br /&gt;
[[Category:All commands]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Category:Gamearray_manipulation&amp;diff=13919</id>
		<title>Category:Gamearray manipulation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Category:Gamearray_manipulation&amp;diff=13919"/>
		<updated>2020-07-08T17:50:12Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Fix grammar, mention initial state&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;gamearray&#039;&#039;&#039; &amp;lt;name&amp;gt; &amp;lt;size&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gamearray is a [[Scripting|CON]] version of the [[Wikipedia:Array|array data type]] common in programming languages. In a practical sense, a gamearray works like a global [[gamevar]] in which a different value can be set for each index. Similarly, gamearrays are not reset when a map is loaded.&lt;br /&gt;
&lt;br /&gt;
The size parameter specifies how many values the array holds. Values in the array are accessed as &amp;lt;name&amp;gt;[&amp;lt;index&amp;gt;] with any command that reads from [[gamevar]]s. Values can be set with [[setarray]] or [[setarraysequence]]. All values are initialized to 0.&lt;br /&gt;
&lt;br /&gt;
WARNING: As of the May 16, 2008 snapshot, some commands may crash when used with a gamearray, so to be safe, use [[setvarvar]] to copy the value to a [[gamevar]].&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
&lt;br /&gt;
{{Gamearray flags}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gamevar manipulation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=M32_script_variables&amp;diff=13918</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=13918"/>
		<updated>2020-07-07T20:45:22Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Add undocumented mapster 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;
(needs description)&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>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Mapster32_Scripting&amp;diff=13917</id>
		<title>Mapster32 Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Mapster32_Scripting&amp;diff=13917"/>
		<updated>2020-07-07T19:51:33Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Mention m32_autoexec.cfg&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;
Mapster32 can be scripted by using a language derived from CON. You can either issue commands directly to the editor with the &amp;quot;&#039;&#039;&#039;do&#039;&#039;&#039;&amp;quot; OSD command or load a script file (extension: .m32) by using &amp;quot;&#039;&#039;&#039;include&#039;&#039;&#039; &amp;amp;lt;filename&amp;amp;gt;&amp;quot; on the console or in &#039;&#039;&#039;m32_autoexec.cfg&#039;&#039;&#039;. &#039;&#039;Events&#039;&#039;, &#039;&#039;states&#039;&#039; and &#039;&#039;quotes&#039;&#039; can be redifined, while multiple definitions of &#039;&#039;defines&#039;&#039;, &#039;&#039;gamevars&#039;&#039; and &#039;&#039;gamearrays&#039;&#039; are ignored. &lt;br /&gt;
&lt;br /&gt;
== Events  ==&lt;br /&gt;
&lt;br /&gt;
Events are defined in the same way as in CON (with &#039;&#039;&#039;onevent&#039;&#039;&#039; and &#039;&#039;&#039;endevent&#039;&#039;&#039;), but must be enabled at the console (with &amp;quot;&#039;&#039;&#039;enableevent&#039;&#039;&#039; &amp;amp;lt;event name or number&amp;amp;gt;&amp;quot; or &amp;quot;&#039;&#039;&#039;enableevent all&#039;&#039;&#039;&amp;quot;) to take effect. Simply using &amp;quot;&#039;&#039;&#039;enableevent&#039;&#039;&#039;&amp;quot; shows a list of defined events and their activation state. &lt;br /&gt;
&lt;br /&gt;
== States  ==&lt;br /&gt;
&lt;br /&gt;
States (subroutines) are defined between &#039;&#039;&#039;defstate&#039;&#039;&#039; and &#039;&#039;&#039;ends&#039;&#039;&#039; and are called by using &#039;&#039;&#039;state&#039;&#039;&#039;. Specifying &amp;quot;1&amp;quot; for a &#039;&#039;&#039;gamevar&#039;&#039;&#039; flag will make that variable block-local, that is, every event and state, as well as the top level (in interactive execution) will have its own value of the variable. &lt;br /&gt;
&lt;br /&gt;
== Syntax changes from CON  ==&lt;br /&gt;
&lt;br /&gt;
*Structures and arrays can be written anywhere a gamevar is expected, even where they are written to. &lt;br /&gt;
*Some commands have short forms. In particular, all commands that contain &#039;&#039;varvar&#039;&#039; can be written without it, e.g. &#039;&#039;&#039;ifvarvarl&#039;&#039;&#039; becomes &#039;&#039;&#039;ifl&#039;&#039;&#039;. &lt;br /&gt;
*Some commands are of variable length, depending on preceding parameters. See &#039;&#039;&#039;sort&#039;&#039;&#039; and &#039;&#039;&#039;for&#039;&#039;&#039; in [[M32 script commands]]. &lt;br /&gt;
*&amp;quot;sprite[&#039;&#039;I&#039;&#039;]&amp;quot; can be omitted. (See below: current sprite). In other words, the current sprite&#039;s members can be accessed by simply prepending their name with a period, like &amp;quot;.picnum&amp;quot;.&lt;br /&gt;
*Some commands accept variables in place of constants.&lt;br /&gt;
&lt;br /&gt;
== The current sprite  ==&lt;br /&gt;
&lt;br /&gt;
Some commands, like &#039;&#039;&#039;ifactor&#039;&#039;&#039;, act on an implicit &#039;&#039;current sprite&#039;&#039;. The current sprite is set by various commands (implicitly by &#039;&#039;&#039;for&#039;&#039;&#039;, &#039;&#039;&#039;insertsprite&#039;&#039;&#039; and &#039;&#039;&#039;dupsprite&#039;&#039;&#039;, and explicitly with &#039;&#039;&#039;seti&#039;&#039;&#039;) as well as some events (EVENT_INSERTSPRITE2D, EVENT_INSERTSPRITE3D). The current sprite index is held in the gamevar &#039;&#039;I&#039;&#039; (capital i). The command &#039;&#039;&#039;for&#039;&#039;&#039; is a special case because whether and how the current sprite is set depends on the iteration type. &lt;br /&gt;
&lt;br /&gt;
== Key access  ==&lt;br /&gt;
&lt;br /&gt;
To define custom shortcuts, you need to place appropriate checks for pressed keys in the desired event. This is accomplished by using &#039;&#039;&#039;ifholdkey&#039;&#039;&#039; and &#039;&#039;&#039;ifhitkey&#039;&#039;&#039;. The difference between the two is that the latter will reset the key status while the former will continue to act until the user releases the key. See [[M32 script variables]] for events that are fired every interation of the main loop. &lt;br /&gt;
&lt;br /&gt;
== Drawn sprite access  ==&lt;br /&gt;
&lt;br /&gt;
Sprites that are drawn to the screen are accessed in the EVENT_ANALYZESPRITES event using the &#039;&#039;tsprite[].xxx&#039;&#039; sprite array, which can be indexed from 0 to &#039;&#039;spritesortcnt&#039;&#039;-1. To loop over all of them, use &amp;quot;&#039;&#039;&#039;for i drawnsprites&#039;&#039;&#039;&amp;quot;. The index of the actual sprite that was drawn is held in &#039;&#039;tsprite[i].owner&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Level editing documentation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Category:All_commands&amp;diff=13916</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=13916"/>
		<updated>2020-07-07T02:44:24Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Whoops, looks like range is only for mapster32&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;
&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;
*[[return]]&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;
*[[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;
*[[sectsetinterpolation]]&lt;br /&gt;
*[[sectclearinterpolation]]&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>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Full_command_list&amp;diff=13915</id>
		<title>Full command list</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Full_command_list&amp;diff=13915"/>
		<updated>2020-07-07T02:42:59Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Undo revision 13911 by Rob Anybody (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{EDuke32 Intro}}&lt;br /&gt;
&lt;br /&gt;
This is a list of every CON primitive in EDuke32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:3;-moz-column-count:3;-webkit-column-count:3&amp;quot;&amp;gt;&lt;br /&gt;
*[[abs]]&lt;br /&gt;
*[[action]]&lt;br /&gt;
*[[activate]]&lt;br /&gt;
*[[activatebysector]]&lt;br /&gt;
*[[activatecheat]]&lt;br /&gt;
*[[actor]]&lt;br /&gt;
*[[actorsound]]&lt;br /&gt;
*[[add]]&lt;br /&gt;
*[[addammo]]&lt;br /&gt;
*[[addinventory]]&lt;br /&gt;
*[[addkills]]&lt;br /&gt;
*[[addlog]]&lt;br /&gt;
*[[addlogvar]]&lt;br /&gt;
*[[addphealth]]&lt;br /&gt;
*[[addstrength]]&lt;br /&gt;
*[[addvar]]&lt;br /&gt;
*[[addvarvar]]&lt;br /&gt;
*[[addweapon]]&lt;br /&gt;
*[[addweaponvar]]&lt;br /&gt;
*[[ai]]&lt;br /&gt;
*[[al]]&lt;br /&gt;
*[[and]]&lt;br /&gt;
*[[andvar]]&lt;br /&gt;
*[[andvarvar]]&lt;br /&gt;
*[[angoff]]&lt;br /&gt;
*[[angoffvar]]&lt;br /&gt;
*[[appendevent]]&lt;br /&gt;
*[[array]]&lt;br /&gt;
*[[betaname]]&lt;br /&gt;
*[[break]]&lt;br /&gt;
*[[cactor]]&lt;br /&gt;
*[[calchypotenuse]]&lt;br /&gt;
*[[cansee]]&lt;br /&gt;
*[[canseespr]]&lt;br /&gt;
*[[capia]]&lt;br /&gt;
*[[capis]]&lt;br /&gt;
*[[case]]&lt;br /&gt;
*[[changespritesect]]&lt;br /&gt;
*[[changespritestat]]&lt;br /&gt;
*[[cheatkeys]]&lt;br /&gt;
*[[checkactivatormotion]]&lt;br /&gt;
*[[checkavailinven]]&lt;br /&gt;
*[[checkavailweapon]]&lt;br /&gt;
*[[ck]]&lt;br /&gt;
*[[clamp]]&lt;br /&gt;
*[[clearmapstate]]&lt;br /&gt;
*[[clipdist]]&lt;br /&gt;
*[[clipmove]]&lt;br /&gt;
*[[clipmovenoslide]]&lt;br /&gt;
*[[cmenu]]&lt;br /&gt;
*[[copy]]&lt;br /&gt;
*[[cos]]&lt;br /&gt;
*[[count]]&lt;br /&gt;
*[[cstat]]&lt;br /&gt;
*[[cstator]]&lt;br /&gt;
*[[damageeventtile]]&lt;br /&gt;
*[[damageeventtilerange]]&lt;br /&gt;
*[[dc]]&lt;br /&gt;
*[[dcd]]&lt;br /&gt;
*[[debris]]&lt;br /&gt;
*[[debug]]&lt;br /&gt;
*[[default]]&lt;br /&gt;
*[[define]]&lt;br /&gt;
*[[definecheat]]&lt;br /&gt;
*[[definecheatdescription]]&lt;br /&gt;
*[[definegamefuncname]]&lt;br /&gt;
*[[definegametype]]&lt;br /&gt;
*[[definelevelname]]&lt;br /&gt;
*[[defineprojectile]]&lt;br /&gt;
*[[definequote]]&lt;br /&gt;
*[[defineskillname]]&lt;br /&gt;
*[[definesound]]&lt;br /&gt;
*[[definevolumeflags]]&lt;br /&gt;
*[[definevolumename]]&lt;br /&gt;
*[[defstate]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[digitalnumberz]]&lt;br /&gt;
*[[displayrand]]&lt;br /&gt;
*[[displayrandvar]]&lt;br /&gt;
*[[displayrandvarvar]]&lt;br /&gt;
*[[dist]]&lt;br /&gt;
*[[div]]&lt;br /&gt;
*[[divr]]&lt;br /&gt;
*[[divrd]]&lt;br /&gt;
*[[divru]]&lt;br /&gt;
*[[divscale]]&lt;br /&gt;
*[[divvar]]&lt;br /&gt;
*[[divvarvar]]&lt;br /&gt;
*[[dragpoint]]&lt;br /&gt;
*[[drawline256]]&lt;br /&gt;
*[[drawlinergb]]&lt;br /&gt;
*[[dynamicremap]]&lt;br /&gt;
*[[dynamicsoundremap]]&lt;br /&gt;
*[[echo]]&lt;br /&gt;
*[[else]]&lt;br /&gt;
*[[enda]]&lt;br /&gt;
*[[endevent]]&lt;br /&gt;
*[[endofgame]]&lt;br /&gt;
*[[endoflevel]]&lt;br /&gt;
*[[ends]]&lt;br /&gt;
*[[endswitch]]&lt;br /&gt;
*[[enhanced]]&lt;br /&gt;
*[[eqspawn]]&lt;br /&gt;
*[[eqspawnvar]]&lt;br /&gt;
*[[eshoot]]&lt;br /&gt;
*[[eshootvar]]&lt;br /&gt;
*[[espawn]]&lt;br /&gt;
*[[espawnvar]]&lt;br /&gt;
*[[eventloadactor]]&lt;br /&gt;
*[[ezshoot]]&lt;br /&gt;
*[[ezshootvar]]&lt;br /&gt;
*[[fall]]&lt;br /&gt;
*[[findnearactor3d]]&lt;br /&gt;
*[[findnearactor3dvar]]&lt;br /&gt;
*[[findnearactor]]&lt;br /&gt;
*[[findnearactorvar]]&lt;br /&gt;
*[[findnearactorz]]&lt;br /&gt;
*[[findnearactorzvar]]&lt;br /&gt;
*[[findnearsprite3d]]&lt;br /&gt;
*[[findnearsprite3dvar]]&lt;br /&gt;
*[[findnearsprite]]&lt;br /&gt;
*[[findnearspritevar]]&lt;br /&gt;
*[[findnearspritez]]&lt;br /&gt;
*[[findnearspritezvar]]&lt;br /&gt;
*[[findotherplayer]]&lt;br /&gt;
*[[findplayer]]&lt;br /&gt;
*[[flash]]&lt;br /&gt;
*[[for]]&lt;br /&gt;
*[[gamearray]]&lt;br /&gt;
*[[gamestartup]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[gametextz]]&lt;br /&gt;
*[[gamevar]]&lt;br /&gt;
*[[geta]]&lt;br /&gt;
*[[getactor]]&lt;br /&gt;
*[[getactorangle]]&lt;br /&gt;
*[[getactorvar]]&lt;br /&gt;
*[[getangle]]&lt;br /&gt;
*[[getangletotarget]]&lt;br /&gt;
*[[getarrayseq]]&lt;br /&gt;
*[[getarraysequence]]&lt;br /&gt;
*[[getarraysize]]&lt;br /&gt;
*[[getav]]&lt;br /&gt;
*[[getceilzofslope]]&lt;br /&gt;
*[[getclosestcol]]&lt;br /&gt;
*[[getcurraddress]]&lt;br /&gt;
*[[getflorzofslope]]&lt;br /&gt;
*[[getgamefuncbind]]&lt;br /&gt;
*[[geti]]&lt;br /&gt;
*[[getincangle]]&lt;br /&gt;
*[[getinput]]&lt;br /&gt;
*[[getkeyname]]&lt;br /&gt;
*[[getlastpal]]&lt;br /&gt;
*[[getmusicposition]]&lt;br /&gt;
*[[getp]]&lt;br /&gt;
*[[getplayer]]&lt;br /&gt;
*[[getplayerangle]]&lt;br /&gt;
*[[getplayervar]]&lt;br /&gt;
*[[getpname]]&lt;br /&gt;
*[[getprojectile]]&lt;br /&gt;
*[[getpv]]&lt;br /&gt;
*[[gets]]&lt;br /&gt;
*[[getsector]]&lt;br /&gt;
*[[gettextureceiling]]&lt;br /&gt;
*[[gettexturefloor]]&lt;br /&gt;
*[[getthisprojectile]]&lt;br /&gt;
*[[getticks]]&lt;br /&gt;
*[[gettiledata]]&lt;br /&gt;
*[[gettimedate]]&lt;br /&gt;
*[[gettspr]]&lt;br /&gt;
*[[getu]]&lt;br /&gt;
*[[getuserdef]]&lt;br /&gt;
*[[getw]]&lt;br /&gt;
*[[getwall]]&lt;br /&gt;
*[[getzrange]]&lt;br /&gt;
*[[globalsound]]&lt;br /&gt;
*[[globalsoundvar]]&lt;br /&gt;
*[[gmaxammo]]&lt;br /&gt;
*[[guniqhudid]]&lt;br /&gt;
*[[guts]]&lt;br /&gt;
*[[headspritesect]]&lt;br /&gt;
*[[headspritestat]]&lt;br /&gt;
*[[hitradius]]&lt;br /&gt;
*[[hitradiusvar]]&lt;br /&gt;
*[[hitscan]]&lt;br /&gt;
*[[ifa]]&lt;br /&gt;
*[[ifaction]]&lt;br /&gt;
*[[ifactioncount]]&lt;br /&gt;
*[[ifactor]]&lt;br /&gt;
*[[ifactornotstayput]]&lt;br /&gt;
*[[ifactorsound]]&lt;br /&gt;
*[[ifae]]&lt;br /&gt;
*[[ifai]]&lt;br /&gt;
*[[ifand]]&lt;br /&gt;
*[[ifangdiffl]]&lt;br /&gt;
*[[ifawayfromwall]]&lt;br /&gt;
*[[ifb]]&lt;br /&gt;
*[[ifbe]]&lt;br /&gt;
*[[ifboth]]&lt;br /&gt;
*[[ifbulletnear]]&lt;br /&gt;
*[[ifcansee]]&lt;br /&gt;
*[[ifcanseetarget]]&lt;br /&gt;
*[[ifcanshoottarget]]&lt;br /&gt;
*[[ifceilingdistl]]&lt;br /&gt;
*[[ifclient]]&lt;br /&gt;
*[[ifcount]]&lt;br /&gt;
*[[ifcutscene]]&lt;br /&gt;
*[[ifdead]]&lt;br /&gt;
*[[ife]]&lt;br /&gt;
*[[ifeither]]&lt;br /&gt;
*[[iffloordistl]]&lt;br /&gt;
*[[ifg]]&lt;br /&gt;
*[[ifgapzl]]&lt;br /&gt;
*[[ifge]]&lt;br /&gt;
*[[ifgotweaponce]]&lt;br /&gt;
*[[ifhitspace]]&lt;br /&gt;
*[[ifhitweapon]]&lt;br /&gt;
*[[ifinouterspace]]&lt;br /&gt;
*[[ifinspace]]&lt;br /&gt;
*[[ifinwater]]&lt;br /&gt;
*[[ifl]]&lt;br /&gt;
*[[ifle]]&lt;br /&gt;
*[[ifmove]]&lt;br /&gt;
*[[ifmultiplayer]]&lt;br /&gt;
*[[ifn]]&lt;br /&gt;
*[[ifnosounds]]&lt;br /&gt;
*[[ifnotmoving]]&lt;br /&gt;
*[[ifonwater]]&lt;br /&gt;
*[[ifor]]&lt;br /&gt;
*[[ifoutside]]&lt;br /&gt;
*[[ifp]]&lt;br /&gt;
*[[ifpdistg]]&lt;br /&gt;
*[[ifpdistl]]&lt;br /&gt;
*[[ifphealthl]]&lt;br /&gt;
*[[ifpinventory]]&lt;br /&gt;
*[[ifplaybackon]]&lt;br /&gt;
*[[ifplayersl]]&lt;br /&gt;
*[[ifrespawn]]&lt;br /&gt;
*[[ifrnd]]&lt;br /&gt;
*[[ifserver]]&lt;br /&gt;
*[[ifsound]]&lt;br /&gt;
*[[ifspawnedby]]&lt;br /&gt;
*[[ifspritepal]]&lt;br /&gt;
*[[ifsquished]]&lt;br /&gt;
*[[ifstrength]]&lt;br /&gt;
*[[ifvara]]&lt;br /&gt;
*[[ifvarae]]&lt;br /&gt;
*[[ifvarand]]&lt;br /&gt;
*[[ifvarb]]&lt;br /&gt;
*[[ifvarbe]]&lt;br /&gt;
*[[ifvarboth]]&lt;br /&gt;
*[[ifvare]]&lt;br /&gt;
*[[ifvareither]]&lt;br /&gt;
*[[ifvarg]]&lt;br /&gt;
*[[ifvarge]]&lt;br /&gt;
*[[ifvarl]]&lt;br /&gt;
*[[ifvarle]]&lt;br /&gt;
*[[ifvarn]]&lt;br /&gt;
*[[ifvaror]]&lt;br /&gt;
*[[ifvarvara]]&lt;br /&gt;
*[[ifvarvarae]]&lt;br /&gt;
*[[ifvarvarand]]&lt;br /&gt;
*[[ifvarvarb]]&lt;br /&gt;
*[[ifvarvarbe]]&lt;br /&gt;
*[[ifvarvarboth]]&lt;br /&gt;
*[[ifvarvare]]&lt;br /&gt;
*[[ifvarvareither]]&lt;br /&gt;
*[[ifvarvarg]]&lt;br /&gt;
*[[ifvarvarge]]&lt;br /&gt;
*[[ifvarvarl]]&lt;br /&gt;
*[[ifvarvarle]]&lt;br /&gt;
*[[ifvarvarn]]&lt;br /&gt;
*[[ifvarvaror]]&lt;br /&gt;
*[[ifvarvarxor]]&lt;br /&gt;
*[[ifvarxor]]&lt;br /&gt;
*[[ifwasweapon]]&lt;br /&gt;
*[[ifxor]]&lt;br /&gt;
*[[include]]&lt;br /&gt;
*[[includedefault]]&lt;br /&gt;
*[[inittimer]]&lt;br /&gt;
*[[insertspriteq]]&lt;br /&gt;
*[[inv]]&lt;br /&gt;
*[[jump]]&lt;br /&gt;
*[[killit]]&lt;br /&gt;
*[[klabs]]&lt;br /&gt;
*[[ldist]]&lt;br /&gt;
*[[lineintersect]]&lt;br /&gt;
*[[loadmapstate]]&lt;br /&gt;
*[[lockplayer]]&lt;br /&gt;
*[[lotsofglass]]&lt;br /&gt;
*[[mail]]&lt;br /&gt;
*[[mikesnd]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[mod]]&lt;br /&gt;
*[[modvar]]&lt;br /&gt;
*[[modvarvar]]&lt;br /&gt;
*[[money]]&lt;br /&gt;
*[[move]]&lt;br /&gt;
*[[movesector]]&lt;br /&gt;
*[[movesprite]]&lt;br /&gt;
*[[mul]]&lt;br /&gt;
*[[mulscale]]&lt;br /&gt;
*[[mulvar]]&lt;br /&gt;
*[[mulvarvar]]&lt;br /&gt;
*[[music]]&lt;br /&gt;
*[[myos]]&lt;br /&gt;
*[[myospal]]&lt;br /&gt;
*[[myospalx]]&lt;br /&gt;
*[[myosx]]&lt;br /&gt;
*[[neartag]]&lt;br /&gt;
*[[nextsectorneighborz]]&lt;br /&gt;
*[[nextspritesect]]&lt;br /&gt;
*[[nextspritestat]]&lt;br /&gt;
*[[nullop]]&lt;br /&gt;
*[[onevent]]&lt;br /&gt;
*[[operate]]&lt;br /&gt;
*[[operateactivators]]&lt;br /&gt;
*[[operatemasterswitches]]&lt;br /&gt;
*[[operaterespawns]]&lt;br /&gt;
*[[operatesectors]]&lt;br /&gt;
*[[or]]&lt;br /&gt;
*[[orvar]]&lt;br /&gt;
*[[orvarvar]]&lt;br /&gt;
*[[palfrom]]&lt;br /&gt;
*[[paper]]&lt;br /&gt;
*[[pkick]]&lt;br /&gt;
*[[precache]]&lt;br /&gt;
*[[preloadtrackslotforswap]]&lt;br /&gt;
*[[prevspritesect]]&lt;br /&gt;
*[[prevspritestat]]&lt;br /&gt;
*[[print]]&lt;br /&gt;
*[[pstomp]]&lt;br /&gt;
*[[qgetsysstr]]&lt;br /&gt;
*[[qputs]]&lt;br /&gt;
*[[qspawn]]&lt;br /&gt;
*[[qspawnvar]]&lt;br /&gt;
*[[qsprintf]]&lt;br /&gt;
*[[qstrcat]]&lt;br /&gt;
*[[qstrcmp]]&lt;br /&gt;
*[[qstrcpy]]&lt;br /&gt;
*[[qstrdim]]&lt;br /&gt;
*[[qstrlen]]&lt;br /&gt;
*[[qstrncat]]&lt;br /&gt;
*[[qsubstr]]&lt;br /&gt;
*[[quake]]&lt;br /&gt;
*[[quote]]&lt;br /&gt;
*[[rand]]&lt;br /&gt;
*[[randvar]]&lt;br /&gt;
*[[randvarvar]]&lt;br /&gt;
*[[rayintersect]]&lt;br /&gt;
*[[readarrayfromfile]]&lt;br /&gt;
*[[readgamevar]]&lt;br /&gt;
*[[redefinequote]]&lt;br /&gt;
*[[resetactioncount]]&lt;br /&gt;
*[[resetcount]]&lt;br /&gt;
*[[resetplayer]]&lt;br /&gt;
*[[resetplayerflags]]&lt;br /&gt;
*[[resizearray]]&lt;br /&gt;
*[[respawnhitag]]&lt;br /&gt;
*[[return]]&lt;br /&gt;
*[[rotatepoint]]&lt;br /&gt;
*[[rotatesprite16]]&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[rotatespritea]]&lt;br /&gt;
*[[save]]&lt;br /&gt;
*[[savegamevar]]&lt;br /&gt;
*[[savemapstate]]&lt;br /&gt;
*[[savenn]]&lt;br /&gt;
*[[scalevar]]&lt;br /&gt;
*[[screenpal]]&lt;br /&gt;
*[[screensound]]&lt;br /&gt;
*[[screentext]]&lt;br /&gt;
*[[scriptsize]]&lt;br /&gt;
*[[sectclearinterpolation]]&lt;br /&gt;
*[[sectgethitag]]&lt;br /&gt;
*[[sectgetlotag]]&lt;br /&gt;
*[[sectorofwall]]&lt;br /&gt;
*[[sectsetinterpolation]]&lt;br /&gt;
*[[set]]&lt;br /&gt;
*[[seta]]&lt;br /&gt;
*[[setactor]]&lt;br /&gt;
*[[setactorangle]]&lt;br /&gt;
*[[setactorsoundpitch]]&lt;br /&gt;
*[[setactorvar]]&lt;br /&gt;
*[[setarray]]&lt;br /&gt;
*[[setarrayseq]]&lt;br /&gt;
*[[setarraysequence]]&lt;br /&gt;
*[[setaspect]]&lt;br /&gt;
*[[setav]]&lt;br /&gt;
*[[setcfgname]]&lt;br /&gt;
*[[setdefname]]&lt;br /&gt;
*[[setgamename]]&lt;br /&gt;
*[[setgamepalette]]&lt;br /&gt;
*[[seti]]&lt;br /&gt;
*[[setinput]]&lt;br /&gt;
*[[setmusicposition]]&lt;br /&gt;
*[[setp]]&lt;br /&gt;
*[[setplayer]]&lt;br /&gt;
*[[setplayerangle]]&lt;br /&gt;
*[[setplayervar]]&lt;br /&gt;
*[[setprojectile]]&lt;br /&gt;
*[[setpv]]&lt;br /&gt;
*[[sets]]&lt;br /&gt;
*[[setsector]]&lt;br /&gt;
*[[setsprite]]&lt;br /&gt;
*[[setthisprojectile]]&lt;br /&gt;
*[[settiledata]]&lt;br /&gt;
*[[settspr]]&lt;br /&gt;
*[[setu]]&lt;br /&gt;
*[[setuserdef]]&lt;br /&gt;
*[[setvar]]&lt;br /&gt;
*[[setvarvar]]&lt;br /&gt;
*[[setw]]&lt;br /&gt;
*[[setwall]]&lt;br /&gt;
*[[shadeto]]&lt;br /&gt;
*[[shiftl]]&lt;br /&gt;
*[[shiftr]]&lt;br /&gt;
*[[shiftvarl]]&lt;br /&gt;
*[[shiftvarr]]&lt;br /&gt;
*[[shiftvarvarl]]&lt;br /&gt;
*[[shiftvarvarr]]&lt;br /&gt;
*[[shoot]]&lt;br /&gt;
*[[shootvar]]&lt;br /&gt;
*[[showview]]&lt;br /&gt;
*[[showviewq16]]&lt;br /&gt;
*[[showviewq16unbiased]]&lt;br /&gt;
*[[showviewunbiased]]&lt;br /&gt;
*[[sin]]&lt;br /&gt;
*[[sizeat]]&lt;br /&gt;
*[[sizeto]]&lt;br /&gt;
*[[sleeptime]]&lt;br /&gt;
*[[smaxammo]]&lt;br /&gt;
*[[sound]]&lt;br /&gt;
*[[soundonce]]&lt;br /&gt;
*[[soundoncevar]]&lt;br /&gt;
*[[soundvar]]&lt;br /&gt;
*[[spawn]]&lt;br /&gt;
*[[spawnceilingglass]]&lt;br /&gt;
*[[spawnwallglass]]&lt;br /&gt;
*[[spawnwallstainedglass]]&lt;br /&gt;
*[[spgethitag]]&lt;br /&gt;
*[[spgetlotag]]&lt;br /&gt;
*[[spriteflags]]&lt;br /&gt;
*[[spritenopal]]&lt;br /&gt;
*[[spritenoshade]]&lt;br /&gt;
*[[spritenvg]]&lt;br /&gt;
*[[spritepal]]&lt;br /&gt;
*[[spriteshadow]]&lt;br /&gt;
*[[sqrt]]&lt;br /&gt;
*[[ssp]]&lt;br /&gt;
*[[startcutscene]]&lt;br /&gt;
*[[startlevel]]&lt;br /&gt;
*[[startscreen]]&lt;br /&gt;
*[[starttrack]]&lt;br /&gt;
*[[starttrackslot]]&lt;br /&gt;
*[[starttrackvar]]&lt;br /&gt;
*[[state]]&lt;br /&gt;
*[[stopactorsound]]&lt;br /&gt;
*[[stopallmusic]]&lt;br /&gt;
*[[stopallsounds]]&lt;br /&gt;
*[[stopsound]]&lt;br /&gt;
*[[stopsoundvar]]&lt;br /&gt;
*[[strength]]&lt;br /&gt;
*[[string]]&lt;br /&gt;
*[[sub]]&lt;br /&gt;
*[[subvar]]&lt;br /&gt;
*[[subvarvar]]&lt;br /&gt;
*[[swaparrays]]&lt;br /&gt;
*[[swaptrackslot]]&lt;br /&gt;
*[[switch]]&lt;br /&gt;
*[[time]]&lt;br /&gt;
*[[tip]]&lt;br /&gt;
*[[tossweapon]]&lt;br /&gt;
*[[udc]]&lt;br /&gt;
*[[undefinecheat]]&lt;br /&gt;
*[[undefinegamefunc]]&lt;br /&gt;
*[[undefinelevel]]&lt;br /&gt;
*[[undefineskill]]&lt;br /&gt;
*[[undefinevolume]]&lt;br /&gt;
*[[updatesector]]&lt;br /&gt;
*[[updatesectorneighbor]]&lt;br /&gt;
*[[updatesectorneighborz]]&lt;br /&gt;
*[[updatesectorz]]&lt;br /&gt;
*[[useractor]]&lt;br /&gt;
*[[userquote]]&lt;br /&gt;
*[[var]]&lt;br /&gt;
*[[wackplayer]]&lt;br /&gt;
*[[whilel]]&lt;br /&gt;
*[[whilen]]&lt;br /&gt;
*[[whilevarl]]&lt;br /&gt;
*[[whilevarn]]&lt;br /&gt;
*[[whilevarvarl]]&lt;br /&gt;
*[[whilevarvarn]]&lt;br /&gt;
*[[writearraytofile]]&lt;br /&gt;
*[[xor]]&lt;br /&gt;
*[[xorvar]]&lt;br /&gt;
*[[xorvarvar]]&lt;br /&gt;
*[[zshoot]]&lt;br /&gt;
*[[zshootvar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting documentation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Addlogvar&amp;diff=13914</id>
		<title>Addlogvar</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Addlogvar&amp;diff=13914"/>
		<updated>2020-07-07T01:42:36Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Mention &amp;quot;al&amp;quot; synonym on addlogvar page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;addlogvar&#039;&#039;&#039; &amp;lt;[[gamevar]]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prints the value of &amp;lt;[[gamevar]]&amp;gt; to the console, resulting in it being logged to eduke32.log.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;addlogvar&#039;&#039;&#039; command can be abbreviated as &#039;&#039;&#039;addlog&#039;&#039;&#039; or &#039;&#039;&#039;al&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke commands]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Addlogvar&amp;diff=13913</id>
		<title>Addlogvar</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Addlogvar&amp;diff=13913"/>
		<updated>2020-07-07T01:39:25Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Mention addlog synonym on addlogvar page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;addlogvar&#039;&#039;&#039; &amp;lt;[[gamevar]]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prints the value of &amp;lt;[[gamevar]]&amp;gt; to the console, resulting in it being logged to eduke32.log.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;addlogvar&#039;&#039;&#039; command can be abbreviated as &#039;&#039;&#039;addlog&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke commands]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Addlog&amp;diff=13912</id>
		<title>Addlog</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Addlog&amp;diff=13912"/>
		<updated>2020-07-07T01:37:07Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Have addlog redirect to addlogvar; they do the same thing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Addlogvar]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Full_command_list&amp;diff=13911</id>
		<title>Full command list</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Full_command_list&amp;diff=13911"/>
		<updated>2020-07-06T20:32:08Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Link to undocumented &amp;quot;range&amp;quot; command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{EDuke32 Intro}}&lt;br /&gt;
&lt;br /&gt;
This is a list of every CON primitive in EDuke32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:3;-moz-column-count:3;-webkit-column-count:3&amp;quot;&amp;gt;&lt;br /&gt;
*[[abs]]&lt;br /&gt;
*[[action]]&lt;br /&gt;
*[[activate]]&lt;br /&gt;
*[[activatebysector]]&lt;br /&gt;
*[[activatecheat]]&lt;br /&gt;
*[[actor]]&lt;br /&gt;
*[[actorsound]]&lt;br /&gt;
*[[add]]&lt;br /&gt;
*[[addammo]]&lt;br /&gt;
*[[addinventory]]&lt;br /&gt;
*[[addkills]]&lt;br /&gt;
*[[addlog]]&lt;br /&gt;
*[[addlogvar]]&lt;br /&gt;
*[[addphealth]]&lt;br /&gt;
*[[addstrength]]&lt;br /&gt;
*[[addvar]]&lt;br /&gt;
*[[addvarvar]]&lt;br /&gt;
*[[addweapon]]&lt;br /&gt;
*[[addweaponvar]]&lt;br /&gt;
*[[ai]]&lt;br /&gt;
*[[al]]&lt;br /&gt;
*[[and]]&lt;br /&gt;
*[[andvar]]&lt;br /&gt;
*[[andvarvar]]&lt;br /&gt;
*[[angoff]]&lt;br /&gt;
*[[angoffvar]]&lt;br /&gt;
*[[appendevent]]&lt;br /&gt;
*[[array]]&lt;br /&gt;
*[[betaname]]&lt;br /&gt;
*[[break]]&lt;br /&gt;
*[[cactor]]&lt;br /&gt;
*[[calchypotenuse]]&lt;br /&gt;
*[[cansee]]&lt;br /&gt;
*[[canseespr]]&lt;br /&gt;
*[[capia]]&lt;br /&gt;
*[[capis]]&lt;br /&gt;
*[[case]]&lt;br /&gt;
*[[changespritesect]]&lt;br /&gt;
*[[changespritestat]]&lt;br /&gt;
*[[cheatkeys]]&lt;br /&gt;
*[[checkactivatormotion]]&lt;br /&gt;
*[[checkavailinven]]&lt;br /&gt;
*[[checkavailweapon]]&lt;br /&gt;
*[[ck]]&lt;br /&gt;
*[[clamp]]&lt;br /&gt;
*[[clearmapstate]]&lt;br /&gt;
*[[clipdist]]&lt;br /&gt;
*[[clipmove]]&lt;br /&gt;
*[[clipmovenoslide]]&lt;br /&gt;
*[[cmenu]]&lt;br /&gt;
*[[copy]]&lt;br /&gt;
*[[cos]]&lt;br /&gt;
*[[count]]&lt;br /&gt;
*[[cstat]]&lt;br /&gt;
*[[cstator]]&lt;br /&gt;
*[[damageeventtile]]&lt;br /&gt;
*[[damageeventtilerange]]&lt;br /&gt;
*[[dc]]&lt;br /&gt;
*[[dcd]]&lt;br /&gt;
*[[debris]]&lt;br /&gt;
*[[debug]]&lt;br /&gt;
*[[default]]&lt;br /&gt;
*[[define]]&lt;br /&gt;
*[[definecheat]]&lt;br /&gt;
*[[definecheatdescription]]&lt;br /&gt;
*[[definegamefuncname]]&lt;br /&gt;
*[[definegametype]]&lt;br /&gt;
*[[definelevelname]]&lt;br /&gt;
*[[defineprojectile]]&lt;br /&gt;
*[[definequote]]&lt;br /&gt;
*[[defineskillname]]&lt;br /&gt;
*[[definesound]]&lt;br /&gt;
*[[definevolumeflags]]&lt;br /&gt;
*[[definevolumename]]&lt;br /&gt;
*[[defstate]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[digitalnumberz]]&lt;br /&gt;
*[[displayrand]]&lt;br /&gt;
*[[displayrandvar]]&lt;br /&gt;
*[[displayrandvarvar]]&lt;br /&gt;
*[[dist]]&lt;br /&gt;
*[[div]]&lt;br /&gt;
*[[divr]]&lt;br /&gt;
*[[divrd]]&lt;br /&gt;
*[[divru]]&lt;br /&gt;
*[[divscale]]&lt;br /&gt;
*[[divvar]]&lt;br /&gt;
*[[divvarvar]]&lt;br /&gt;
*[[dragpoint]]&lt;br /&gt;
*[[drawline256]]&lt;br /&gt;
*[[drawlinergb]]&lt;br /&gt;
*[[dynamicremap]]&lt;br /&gt;
*[[dynamicsoundremap]]&lt;br /&gt;
*[[echo]]&lt;br /&gt;
*[[else]]&lt;br /&gt;
*[[enda]]&lt;br /&gt;
*[[endevent]]&lt;br /&gt;
*[[endofgame]]&lt;br /&gt;
*[[endoflevel]]&lt;br /&gt;
*[[ends]]&lt;br /&gt;
*[[endswitch]]&lt;br /&gt;
*[[enhanced]]&lt;br /&gt;
*[[eqspawn]]&lt;br /&gt;
*[[eqspawnvar]]&lt;br /&gt;
*[[eshoot]]&lt;br /&gt;
*[[eshootvar]]&lt;br /&gt;
*[[espawn]]&lt;br /&gt;
*[[espawnvar]]&lt;br /&gt;
*[[eventloadactor]]&lt;br /&gt;
*[[ezshoot]]&lt;br /&gt;
*[[ezshootvar]]&lt;br /&gt;
*[[fall]]&lt;br /&gt;
*[[findnearactor3d]]&lt;br /&gt;
*[[findnearactor3dvar]]&lt;br /&gt;
*[[findnearactor]]&lt;br /&gt;
*[[findnearactorvar]]&lt;br /&gt;
*[[findnearactorz]]&lt;br /&gt;
*[[findnearactorzvar]]&lt;br /&gt;
*[[findnearsprite3d]]&lt;br /&gt;
*[[findnearsprite3dvar]]&lt;br /&gt;
*[[findnearsprite]]&lt;br /&gt;
*[[findnearspritevar]]&lt;br /&gt;
*[[findnearspritez]]&lt;br /&gt;
*[[findnearspritezvar]]&lt;br /&gt;
*[[findotherplayer]]&lt;br /&gt;
*[[findplayer]]&lt;br /&gt;
*[[flash]]&lt;br /&gt;
*[[for]]&lt;br /&gt;
*[[gamearray]]&lt;br /&gt;
*[[gamestartup]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[gametextz]]&lt;br /&gt;
*[[gamevar]]&lt;br /&gt;
*[[geta]]&lt;br /&gt;
*[[getactor]]&lt;br /&gt;
*[[getactorangle]]&lt;br /&gt;
*[[getactorvar]]&lt;br /&gt;
*[[getangle]]&lt;br /&gt;
*[[getangletotarget]]&lt;br /&gt;
*[[getarrayseq]]&lt;br /&gt;
*[[getarraysequence]]&lt;br /&gt;
*[[getarraysize]]&lt;br /&gt;
*[[getav]]&lt;br /&gt;
*[[getceilzofslope]]&lt;br /&gt;
*[[getclosestcol]]&lt;br /&gt;
*[[getcurraddress]]&lt;br /&gt;
*[[getflorzofslope]]&lt;br /&gt;
*[[getgamefuncbind]]&lt;br /&gt;
*[[geti]]&lt;br /&gt;
*[[getincangle]]&lt;br /&gt;
*[[getinput]]&lt;br /&gt;
*[[getkeyname]]&lt;br /&gt;
*[[getlastpal]]&lt;br /&gt;
*[[getmusicposition]]&lt;br /&gt;
*[[getp]]&lt;br /&gt;
*[[getplayer]]&lt;br /&gt;
*[[getplayerangle]]&lt;br /&gt;
*[[getplayervar]]&lt;br /&gt;
*[[getpname]]&lt;br /&gt;
*[[getprojectile]]&lt;br /&gt;
*[[getpv]]&lt;br /&gt;
*[[gets]]&lt;br /&gt;
*[[getsector]]&lt;br /&gt;
*[[gettextureceiling]]&lt;br /&gt;
*[[gettexturefloor]]&lt;br /&gt;
*[[getthisprojectile]]&lt;br /&gt;
*[[getticks]]&lt;br /&gt;
*[[gettiledata]]&lt;br /&gt;
*[[gettimedate]]&lt;br /&gt;
*[[gettspr]]&lt;br /&gt;
*[[getu]]&lt;br /&gt;
*[[getuserdef]]&lt;br /&gt;
*[[getw]]&lt;br /&gt;
*[[getwall]]&lt;br /&gt;
*[[getzrange]]&lt;br /&gt;
*[[globalsound]]&lt;br /&gt;
*[[globalsoundvar]]&lt;br /&gt;
*[[gmaxammo]]&lt;br /&gt;
*[[guniqhudid]]&lt;br /&gt;
*[[guts]]&lt;br /&gt;
*[[headspritesect]]&lt;br /&gt;
*[[headspritestat]]&lt;br /&gt;
*[[hitradius]]&lt;br /&gt;
*[[hitradiusvar]]&lt;br /&gt;
*[[hitscan]]&lt;br /&gt;
*[[ifa]]&lt;br /&gt;
*[[ifaction]]&lt;br /&gt;
*[[ifactioncount]]&lt;br /&gt;
*[[ifactor]]&lt;br /&gt;
*[[ifactornotstayput]]&lt;br /&gt;
*[[ifactorsound]]&lt;br /&gt;
*[[ifae]]&lt;br /&gt;
*[[ifai]]&lt;br /&gt;
*[[ifand]]&lt;br /&gt;
*[[ifangdiffl]]&lt;br /&gt;
*[[ifawayfromwall]]&lt;br /&gt;
*[[ifb]]&lt;br /&gt;
*[[ifbe]]&lt;br /&gt;
*[[ifboth]]&lt;br /&gt;
*[[ifbulletnear]]&lt;br /&gt;
*[[ifcansee]]&lt;br /&gt;
*[[ifcanseetarget]]&lt;br /&gt;
*[[ifcanshoottarget]]&lt;br /&gt;
*[[ifceilingdistl]]&lt;br /&gt;
*[[ifclient]]&lt;br /&gt;
*[[ifcount]]&lt;br /&gt;
*[[ifcutscene]]&lt;br /&gt;
*[[ifdead]]&lt;br /&gt;
*[[ife]]&lt;br /&gt;
*[[ifeither]]&lt;br /&gt;
*[[iffloordistl]]&lt;br /&gt;
*[[ifg]]&lt;br /&gt;
*[[ifgapzl]]&lt;br /&gt;
*[[ifge]]&lt;br /&gt;
*[[ifgotweaponce]]&lt;br /&gt;
*[[ifhitspace]]&lt;br /&gt;
*[[ifhitweapon]]&lt;br /&gt;
*[[ifinouterspace]]&lt;br /&gt;
*[[ifinspace]]&lt;br /&gt;
*[[ifinwater]]&lt;br /&gt;
*[[ifl]]&lt;br /&gt;
*[[ifle]]&lt;br /&gt;
*[[ifmove]]&lt;br /&gt;
*[[ifmultiplayer]]&lt;br /&gt;
*[[ifn]]&lt;br /&gt;
*[[ifnosounds]]&lt;br /&gt;
*[[ifnotmoving]]&lt;br /&gt;
*[[ifonwater]]&lt;br /&gt;
*[[ifor]]&lt;br /&gt;
*[[ifoutside]]&lt;br /&gt;
*[[ifp]]&lt;br /&gt;
*[[ifpdistg]]&lt;br /&gt;
*[[ifpdistl]]&lt;br /&gt;
*[[ifphealthl]]&lt;br /&gt;
*[[ifpinventory]]&lt;br /&gt;
*[[ifplaybackon]]&lt;br /&gt;
*[[ifplayersl]]&lt;br /&gt;
*[[ifrespawn]]&lt;br /&gt;
*[[ifrnd]]&lt;br /&gt;
*[[ifserver]]&lt;br /&gt;
*[[ifsound]]&lt;br /&gt;
*[[ifspawnedby]]&lt;br /&gt;
*[[ifspritepal]]&lt;br /&gt;
*[[ifsquished]]&lt;br /&gt;
*[[ifstrength]]&lt;br /&gt;
*[[ifvara]]&lt;br /&gt;
*[[ifvarae]]&lt;br /&gt;
*[[ifvarand]]&lt;br /&gt;
*[[ifvarb]]&lt;br /&gt;
*[[ifvarbe]]&lt;br /&gt;
*[[ifvarboth]]&lt;br /&gt;
*[[ifvare]]&lt;br /&gt;
*[[ifvareither]]&lt;br /&gt;
*[[ifvarg]]&lt;br /&gt;
*[[ifvarge]]&lt;br /&gt;
*[[ifvarl]]&lt;br /&gt;
*[[ifvarle]]&lt;br /&gt;
*[[ifvarn]]&lt;br /&gt;
*[[ifvaror]]&lt;br /&gt;
*[[ifvarvara]]&lt;br /&gt;
*[[ifvarvarae]]&lt;br /&gt;
*[[ifvarvarand]]&lt;br /&gt;
*[[ifvarvarb]]&lt;br /&gt;
*[[ifvarvarbe]]&lt;br /&gt;
*[[ifvarvarboth]]&lt;br /&gt;
*[[ifvarvare]]&lt;br /&gt;
*[[ifvarvareither]]&lt;br /&gt;
*[[ifvarvarg]]&lt;br /&gt;
*[[ifvarvarge]]&lt;br /&gt;
*[[ifvarvarl]]&lt;br /&gt;
*[[ifvarvarle]]&lt;br /&gt;
*[[ifvarvarn]]&lt;br /&gt;
*[[ifvarvaror]]&lt;br /&gt;
*[[ifvarvarxor]]&lt;br /&gt;
*[[ifvarxor]]&lt;br /&gt;
*[[ifwasweapon]]&lt;br /&gt;
*[[ifxor]]&lt;br /&gt;
*[[include]]&lt;br /&gt;
*[[includedefault]]&lt;br /&gt;
*[[inittimer]]&lt;br /&gt;
*[[insertspriteq]]&lt;br /&gt;
*[[inv]]&lt;br /&gt;
*[[jump]]&lt;br /&gt;
*[[killit]]&lt;br /&gt;
*[[klabs]]&lt;br /&gt;
*[[ldist]]&lt;br /&gt;
*[[lineintersect]]&lt;br /&gt;
*[[loadmapstate]]&lt;br /&gt;
*[[lockplayer]]&lt;br /&gt;
*[[lotsofglass]]&lt;br /&gt;
*[[mail]]&lt;br /&gt;
*[[mikesnd]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[mod]]&lt;br /&gt;
*[[modvar]]&lt;br /&gt;
*[[modvarvar]]&lt;br /&gt;
*[[money]]&lt;br /&gt;
*[[move]]&lt;br /&gt;
*[[movesector]]&lt;br /&gt;
*[[movesprite]]&lt;br /&gt;
*[[mul]]&lt;br /&gt;
*[[mulscale]]&lt;br /&gt;
*[[mulvar]]&lt;br /&gt;
*[[mulvarvar]]&lt;br /&gt;
*[[music]]&lt;br /&gt;
*[[myos]]&lt;br /&gt;
*[[myospal]]&lt;br /&gt;
*[[myospalx]]&lt;br /&gt;
*[[myosx]]&lt;br /&gt;
*[[neartag]]&lt;br /&gt;
*[[nextsectorneighborz]]&lt;br /&gt;
*[[nextspritesect]]&lt;br /&gt;
*[[nextspritestat]]&lt;br /&gt;
*[[nullop]]&lt;br /&gt;
*[[onevent]]&lt;br /&gt;
*[[operate]]&lt;br /&gt;
*[[operateactivators]]&lt;br /&gt;
*[[operatemasterswitches]]&lt;br /&gt;
*[[operaterespawns]]&lt;br /&gt;
*[[operatesectors]]&lt;br /&gt;
*[[or]]&lt;br /&gt;
*[[orvar]]&lt;br /&gt;
*[[orvarvar]]&lt;br /&gt;
*[[palfrom]]&lt;br /&gt;
*[[paper]]&lt;br /&gt;
*[[pkick]]&lt;br /&gt;
*[[precache]]&lt;br /&gt;
*[[preloadtrackslotforswap]]&lt;br /&gt;
*[[prevspritesect]]&lt;br /&gt;
*[[prevspritestat]]&lt;br /&gt;
*[[print]]&lt;br /&gt;
*[[pstomp]]&lt;br /&gt;
*[[qgetsysstr]]&lt;br /&gt;
*[[qputs]]&lt;br /&gt;
*[[qspawn]]&lt;br /&gt;
*[[qspawnvar]]&lt;br /&gt;
*[[qsprintf]]&lt;br /&gt;
*[[qstrcat]]&lt;br /&gt;
*[[qstrcmp]]&lt;br /&gt;
*[[qstrcpy]]&lt;br /&gt;
*[[qstrdim]]&lt;br /&gt;
*[[qstrlen]]&lt;br /&gt;
*[[qstrncat]]&lt;br /&gt;
*[[qsubstr]]&lt;br /&gt;
*[[quake]]&lt;br /&gt;
*[[quote]]&lt;br /&gt;
*[[rand]]&lt;br /&gt;
*[[randvar]]&lt;br /&gt;
*[[randvarvar]]&lt;br /&gt;
*[[range]]&lt;br /&gt;
*[[rayintersect]]&lt;br /&gt;
*[[readarrayfromfile]]&lt;br /&gt;
*[[readgamevar]]&lt;br /&gt;
*[[redefinequote]]&lt;br /&gt;
*[[resetactioncount]]&lt;br /&gt;
*[[resetcount]]&lt;br /&gt;
*[[resetplayer]]&lt;br /&gt;
*[[resetplayerflags]]&lt;br /&gt;
*[[resizearray]]&lt;br /&gt;
*[[respawnhitag]]&lt;br /&gt;
*[[return]]&lt;br /&gt;
*[[rotatepoint]]&lt;br /&gt;
*[[rotatesprite16]]&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[rotatespritea]]&lt;br /&gt;
*[[save]]&lt;br /&gt;
*[[savegamevar]]&lt;br /&gt;
*[[savemapstate]]&lt;br /&gt;
*[[savenn]]&lt;br /&gt;
*[[scalevar]]&lt;br /&gt;
*[[screenpal]]&lt;br /&gt;
*[[screensound]]&lt;br /&gt;
*[[screentext]]&lt;br /&gt;
*[[scriptsize]]&lt;br /&gt;
*[[sectclearinterpolation]]&lt;br /&gt;
*[[sectgethitag]]&lt;br /&gt;
*[[sectgetlotag]]&lt;br /&gt;
*[[sectorofwall]]&lt;br /&gt;
*[[sectsetinterpolation]]&lt;br /&gt;
*[[set]]&lt;br /&gt;
*[[seta]]&lt;br /&gt;
*[[setactor]]&lt;br /&gt;
*[[setactorangle]]&lt;br /&gt;
*[[setactorsoundpitch]]&lt;br /&gt;
*[[setactorvar]]&lt;br /&gt;
*[[setarray]]&lt;br /&gt;
*[[setarrayseq]]&lt;br /&gt;
*[[setarraysequence]]&lt;br /&gt;
*[[setaspect]]&lt;br /&gt;
*[[setav]]&lt;br /&gt;
*[[setcfgname]]&lt;br /&gt;
*[[setdefname]]&lt;br /&gt;
*[[setgamename]]&lt;br /&gt;
*[[setgamepalette]]&lt;br /&gt;
*[[seti]]&lt;br /&gt;
*[[setinput]]&lt;br /&gt;
*[[setmusicposition]]&lt;br /&gt;
*[[setp]]&lt;br /&gt;
*[[setplayer]]&lt;br /&gt;
*[[setplayerangle]]&lt;br /&gt;
*[[setplayervar]]&lt;br /&gt;
*[[setprojectile]]&lt;br /&gt;
*[[setpv]]&lt;br /&gt;
*[[sets]]&lt;br /&gt;
*[[setsector]]&lt;br /&gt;
*[[setsprite]]&lt;br /&gt;
*[[setthisprojectile]]&lt;br /&gt;
*[[settiledata]]&lt;br /&gt;
*[[settspr]]&lt;br /&gt;
*[[setu]]&lt;br /&gt;
*[[setuserdef]]&lt;br /&gt;
*[[setvar]]&lt;br /&gt;
*[[setvarvar]]&lt;br /&gt;
*[[setw]]&lt;br /&gt;
*[[setwall]]&lt;br /&gt;
*[[shadeto]]&lt;br /&gt;
*[[shiftl]]&lt;br /&gt;
*[[shiftr]]&lt;br /&gt;
*[[shiftvarl]]&lt;br /&gt;
*[[shiftvarr]]&lt;br /&gt;
*[[shiftvarvarl]]&lt;br /&gt;
*[[shiftvarvarr]]&lt;br /&gt;
*[[shoot]]&lt;br /&gt;
*[[shootvar]]&lt;br /&gt;
*[[showview]]&lt;br /&gt;
*[[showviewq16]]&lt;br /&gt;
*[[showviewq16unbiased]]&lt;br /&gt;
*[[showviewunbiased]]&lt;br /&gt;
*[[sin]]&lt;br /&gt;
*[[sizeat]]&lt;br /&gt;
*[[sizeto]]&lt;br /&gt;
*[[sleeptime]]&lt;br /&gt;
*[[smaxammo]]&lt;br /&gt;
*[[sound]]&lt;br /&gt;
*[[soundonce]]&lt;br /&gt;
*[[soundoncevar]]&lt;br /&gt;
*[[soundvar]]&lt;br /&gt;
*[[spawn]]&lt;br /&gt;
*[[spawnceilingglass]]&lt;br /&gt;
*[[spawnwallglass]]&lt;br /&gt;
*[[spawnwallstainedglass]]&lt;br /&gt;
*[[spgethitag]]&lt;br /&gt;
*[[spgetlotag]]&lt;br /&gt;
*[[spriteflags]]&lt;br /&gt;
*[[spritenopal]]&lt;br /&gt;
*[[spritenoshade]]&lt;br /&gt;
*[[spritenvg]]&lt;br /&gt;
*[[spritepal]]&lt;br /&gt;
*[[spriteshadow]]&lt;br /&gt;
*[[sqrt]]&lt;br /&gt;
*[[ssp]]&lt;br /&gt;
*[[startcutscene]]&lt;br /&gt;
*[[startlevel]]&lt;br /&gt;
*[[startscreen]]&lt;br /&gt;
*[[starttrack]]&lt;br /&gt;
*[[starttrackslot]]&lt;br /&gt;
*[[starttrackvar]]&lt;br /&gt;
*[[state]]&lt;br /&gt;
*[[stopactorsound]]&lt;br /&gt;
*[[stopallmusic]]&lt;br /&gt;
*[[stopallsounds]]&lt;br /&gt;
*[[stopsound]]&lt;br /&gt;
*[[stopsoundvar]]&lt;br /&gt;
*[[strength]]&lt;br /&gt;
*[[string]]&lt;br /&gt;
*[[sub]]&lt;br /&gt;
*[[subvar]]&lt;br /&gt;
*[[subvarvar]]&lt;br /&gt;
*[[swaparrays]]&lt;br /&gt;
*[[swaptrackslot]]&lt;br /&gt;
*[[switch]]&lt;br /&gt;
*[[time]]&lt;br /&gt;
*[[tip]]&lt;br /&gt;
*[[tossweapon]]&lt;br /&gt;
*[[udc]]&lt;br /&gt;
*[[undefinecheat]]&lt;br /&gt;
*[[undefinegamefunc]]&lt;br /&gt;
*[[undefinelevel]]&lt;br /&gt;
*[[undefineskill]]&lt;br /&gt;
*[[undefinevolume]]&lt;br /&gt;
*[[updatesector]]&lt;br /&gt;
*[[updatesectorneighbor]]&lt;br /&gt;
*[[updatesectorneighborz]]&lt;br /&gt;
*[[updatesectorz]]&lt;br /&gt;
*[[useractor]]&lt;br /&gt;
*[[userquote]]&lt;br /&gt;
*[[var]]&lt;br /&gt;
*[[wackplayer]]&lt;br /&gt;
*[[whilel]]&lt;br /&gt;
*[[whilen]]&lt;br /&gt;
*[[whilevarl]]&lt;br /&gt;
*[[whilevarn]]&lt;br /&gt;
*[[whilevarvarl]]&lt;br /&gt;
*[[whilevarvarn]]&lt;br /&gt;
*[[writearraytofile]]&lt;br /&gt;
*[[xor]]&lt;br /&gt;
*[[xorvar]]&lt;br /&gt;
*[[xorvarvar]]&lt;br /&gt;
*[[zshoot]]&lt;br /&gt;
*[[zshootvar]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting documentation]]&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Category:All_commands&amp;diff=13910</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=13910"/>
		<updated>2020-07-06T20:30:02Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Link to undocumented loop forms&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;
&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;
*[[return]]&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;
*[[range]]&lt;br /&gt;
*[[whilevarl]]&lt;br /&gt;
*[[whilevarvarl]]&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;
*[[sectsetinterpolation]]&lt;br /&gt;
*[[sectclearinterpolation]]&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>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Template:Varsuffix&amp;diff=13909</id>
		<title>Template:Varsuffix</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Template:Varsuffix&amp;diff=13909"/>
		<updated>2020-07-06T20:26:26Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Document short form of &amp;quot;varvar&amp;quot; commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Commands with an additional &amp;quot;var&amp;quot; suffix take [[gamevar]]s rather than constants or [[define]]d labels for their inputs.&lt;br /&gt;
As an alternate short form, &amp;quot;varvar&amp;quot; can be dropped from these commands; for example &#039;&#039;&#039;ife&#039;&#039;&#039; serves an an alias for &#039;&#039;&#039;ifvarvare&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Rob_Anybody&amp;diff=13908</id>
		<title>User:Rob Anybody</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Rob_Anybody&amp;diff=13908"/>
		<updated>2020-07-06T20:17:44Z</updated>

		<summary type="html">&lt;p&gt;Rob Anybody: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rob Anybody</name></author>
	</entry>
</feed>