<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.digitalmzx.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zzo38</id>
	<title>MZXWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.digitalmzx.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zzo38"/>
	<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/Special:Contributions/Zzo38"/>
	<updated>2026-05-14T00:45:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=MOD&amp;diff=8553</id>
		<title>MOD</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=MOD&amp;diff=8553"/>
		<updated>2015-05-25T19:25:48Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: ModPlug Tracker is now OpenMPT; link to a comparison of other programs too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Module files (MODs) are files that contain human-readable music data (based on pattern, page, effect and track info laid out in a spreadsheet-like manner) and sound samples. They are used to play music in [[MegaZeux]] games.&lt;br /&gt;
&lt;br /&gt;
Files with the extension of .MOD are the simplest and oldest of these formats. Until version 2.48b, the only options for music in MegaZeux were ProTracker-format .MOD files (limited to 4 channels and 31 samples). The switch to [[Bells, Whistles, and Sound Boards|BWSB]] for the music engine allowed several new formats, including Ultimate SoundTracker format .MODs and the popular S3M format. Most new formats had to be converted to an intermediary format called .[[GDM]] (short for '''G'''eneral '''D'''igi'''M'''usic).&lt;br /&gt;
&lt;br /&gt;
MegaZeux switched to the [[ModPlug]] music engine at 2.80, allowing the popular formats XM and IT (as well as several others) to play natively. GDMs were no longer needed, and in fact have to be converted to S3M format for ModPlug to play them.&lt;br /&gt;
&lt;br /&gt;
MegaZeux currently plays modules with one of two possible sound engines: ''ModPlug'', the default engine, and ''[[MikMod]]'', an alternative module engine used when running MegaZeux on more limited platforms. For compatibility reasons, all MZX versions past 2.81h will only play the module formats both engines can play (MOD, S3M, XM, IT, STM, MTM, 669, ULT, FAR, MED, DSM, OKT and AMF).&lt;br /&gt;
&lt;br /&gt;
Programs used to create modules are called ''trackers''. Popular trackers include ModPlug Tracker (OpenMPT) and Skale. See [https://devlabs.linuxassist.net/projects/amigamml/wiki/Compare_features] for a list of some others.&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
*[[S3M]], the ScreamTracker 3.0 music format&lt;br /&gt;
*[[SAM]], the file format used for sound effects&lt;br /&gt;
*[[OGG|OGG Vorbis]], a lossy audio format supported since 2.81&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Board&amp;diff=7990</id>
		<title>Board</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Board&amp;diff=7990"/>
		<updated>2012-11-02T18:13:25Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Board''' is basically a playing field for which the game can take place in.&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
*Boards can range in size from 1x1 to a massive 32767x32767&lt;br /&gt;
**Extremely large boards will consume a massive block of memory. A board with the maximum dimensions would consume over 3 GB of memory, not including the overlay.&lt;br /&gt;
**The board scan is a somewhat expensive routine that scans every square of the board every cycle for built-ins. The larger the board, the bigger the performance impact it can have on your game on slower computers. &lt;br /&gt;
*For a few [[Built-in|built-in objects]], there is a limit to how many can be placed on one board.&lt;br /&gt;
**All boards must have one and only one instance of the player object.&lt;br /&gt;
**Signs and scrolls together are capped to 255 per board.&lt;br /&gt;
**No more than 255 sensors.&lt;br /&gt;
**No more than 255 robots.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=File:Ascmzxto.png&amp;diff=7989</id>
		<title>File:Ascmzxto.png</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=File:Ascmzxto.png&amp;diff=7989"/>
		<updated>2012-10-20T04:55:24Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Super ASCII MZX Town!&lt;br /&gt;
&lt;br /&gt;
{{MZXpd&lt;br /&gt;
|game = [[Super ASCII MZX Town]]&lt;br /&gt;
|author = zzo38&lt;br /&gt;
|date = 2009-2011&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Template:MZXpd&amp;diff=7988</id>
		<title>Template:MZXpd</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Template:MZXpd&amp;diff=7988"/>
		<updated>2012-10-20T04:55:18Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;  {| style=&amp;quot;background: transparent; float: left;&amp;quot;  |&amp;lt;pre&amp;gt;{{MZXpd |game =  |author =  |date =  }}&amp;lt;/pre&amp;gt; |}  Category:Template &amp;lt;/noinclude&amp;gt;  &amp;lt;div class=&amp;quot;tag&amp;quot; style=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background: transparent; float: left;&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;{{MZXpd&lt;br /&gt;
|game = &lt;br /&gt;
|author = &lt;br /&gt;
|date = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Template]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tag&amp;quot; style=&amp;quot;margin:0.5em auto;width:40%;clear:both;background-color:transparent;border:2px solid #8888aa; padding:4px;font-size:85%;min-height:64px;vertical-align:center&amp;quot; id=&amp;quot;imageLicense&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left&amp;quot; id=&amp;quot;icon&amp;quot;&amp;gt;[[Image:NoCopyright.png|32px|MZXrighted]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:left;margin-left:68px&amp;quot; id=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This picture from a [[MegaZeux]] game is public domain.&lt;br /&gt;
: Game name: {{{game}}}&amp;lt;br&amp;gt;Author: {{{author}}}&amp;lt;br&amp;gt;Date: {{{date}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7987</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7987"/>
		<updated>2012-10-20T04:39:03Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: cjb net is broke&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/w/index.php?title=User_talk:Zzo38&amp;amp;oldid=21293425] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]], and [[Super ASCII MZX Town]], and also a [[PZX|fork of MegaZeux with different features]].&lt;br /&gt;
&lt;br /&gt;
Recently&amp;lt;sup&amp;gt;[please specify]&amp;lt;/sup&amp;gt;, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games and Forth codes.&lt;br /&gt;
&lt;br /&gt;
==MegaZeux Games==&lt;br /&gt;
* [[Super ASCII MZX Town]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[gopher://zzo38computer.org/ ZZO38COMPUTER (Gopher)]&lt;br /&gt;
*[http://zzo38computer.org/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Board&amp;diff=7986</id>
		<title>Board</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Board&amp;diff=7986"/>
		<updated>2012-10-20T04:36:33Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Board''' is basically a playing field for which the game can take place in.&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
*Boards can range in size from 1x1 to a massive 32767x32767&lt;br /&gt;
**Extremely large boards will consume a massive block of memory. A board with the maximum dimensions would consume over 3 GB of memory, not including the overlay.&lt;br /&gt;
**The board scan is a somewhat expensive routine that scans every square of the board every cycle for built-ins. The larger the board, the bigger the performance impact it can have on your game on slower computers. &lt;br /&gt;
*For a few [[Built-in|built-in objects]], there is a limit to how many can be placed on one board.&lt;br /&gt;
**All boards must have one and only one instance of the player object.&lt;br /&gt;
**Robots and scrolls together are capped to 255 per board.&lt;br /&gt;
**No more than 255 sensors.&lt;br /&gt;
**No more than 255 robots.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7980</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7980"/>
		<updated>2012-09-18T08:10:59Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: cjb net is broke&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
* Win32 binaries and source-codes is available at: http://zzo38computer.org/mzx1/mzx_extended/&lt;br /&gt;
* Documentation is available at: http://zzo38computer.org/mzx1/mzx_extended/doc/&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
* EV.GLOBAL ( slowed slowdown -- slowed ) Called on every cycle&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key (please note this is a simplified version, its only function here is to disallow you from holding multiple keys of the same color):&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;br /&gt;
&lt;br /&gt;
===ZZT Gems===&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 : GIVE DUP COUNTER@ ROT + SWAP COUNTER! ;&lt;br /&gt;
 &lt;br /&gt;
 1 VARIABLE NEEDS-GEM-MESSAGE&lt;br /&gt;
 $81 4 A_ITEM A_PUSHABLE + A_CRUSH + A_SHOOTABLE + 0 EXTKIND ZztGem&lt;br /&gt;
 ZztGem EV.ITEM + :EVENT&lt;br /&gt;
   DROP DROP 1 BISFX&lt;br /&gt;
   1 &amp;quot;GEMS&amp;quot; GIVE 1 &amp;quot;HEALTH&amp;quot; GIVE 10 &amp;quot;SCORE&amp;quot; GIVE&lt;br /&gt;
   NEEDS-GEM-MESSAGE @ IF&lt;br /&gt;
     &amp;quot;Gems give you health!&amp;quot; SETMESG&lt;br /&gt;
     0 NEEDS-GEM-MESSAGE !&lt;br /&gt;
   THEN 1&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town/Hint_Part_I&amp;diff=7772</id>
		<title>Super ASCII MZX Town/Hint Part I</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town/Hint_Part_I&amp;diff=7772"/>
		<updated>2011-12-26T21:43:56Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== (General purpose hints) ==&lt;br /&gt;
* Ensure make multiple save files. Sometimes you might realize you forgot something and have to restore an earlier file.&lt;br /&gt;
* You get points for conserved resources.&lt;br /&gt;
* Do not shoot everyone in the game, you can waste ammunition like that and lose points for conserved resources.&lt;br /&gt;
* If you want to set music modes, push space bar on the title screen, and then select the option.&lt;br /&gt;
&lt;br /&gt;
== BANISH DETONATE SUMMON KILL ==&lt;br /&gt;
* The words &amp;quot;Banish! Detonate! Summon! Kill!&amp;quot; do have a purpose.&lt;br /&gt;
* There is a way to go through the water even in the wrong direction.&lt;br /&gt;
* You need some but not all of the potions.&lt;br /&gt;
* Collect the potions at the right time instead of the wrong time.&lt;br /&gt;
* Dragons cannot be pushed and cannot go over water.&lt;br /&gt;
* Don't step on the king's lava please.&lt;br /&gt;
* Some potions must be collected not only at the right time but also in the right place.&lt;br /&gt;
&lt;br /&gt;
== CASTLE ==&lt;br /&gt;
* Did you remember a key?&lt;br /&gt;
* Some monster is safe, some is danger. (Color is irrelevant)&lt;br /&gt;
* Make a map if it will help you.&lt;br /&gt;
&lt;br /&gt;
== CODE ROOM ==&lt;br /&gt;
* Cover the blue floor with the boxes.&lt;br /&gt;
* The message at the bottom of the screen is refering to the area of the board covered by the message.&lt;br /&gt;
* You can use the keyboard commands (push H for help) to be able to see what the message is covering.&lt;br /&gt;
&lt;br /&gt;
== DRAGON FIGHTING ROOM ==&lt;br /&gt;
* Do you know a trick in MegaZeux?&lt;br /&gt;
* Do you know how to leave?&lt;br /&gt;
* Do you know which one is a real key?&lt;br /&gt;
&lt;br /&gt;
== FINAL ==&lt;br /&gt;
* You get permanent fire walking in this level.&lt;br /&gt;
* There are two possible solutions to the multiplication.&lt;br /&gt;
* Don't block the exit.&lt;br /&gt;
* BIG_MONSTER is good and you should not fight them please.&lt;br /&gt;
&lt;br /&gt;
== FOREST ==&lt;br /&gt;
* Push the switch in corner to open the gate.&lt;br /&gt;
* Clear the path properly.&lt;br /&gt;
* Pay attention to timer!&lt;br /&gt;
* Pay attention to duplication!&lt;br /&gt;
* Freeze time potion is best used when leaving back where you came from.&lt;br /&gt;
&lt;br /&gt;
== GAME OF FOUR BOMBS ==&lt;br /&gt;
* The &amp;quot;S&amp;quot; is sensor.&lt;br /&gt;
* Remember, Jesus saves.&lt;br /&gt;
* Lit bombs are still pushable too.&lt;br /&gt;
* Don't get trapped in the room containing the key.&lt;br /&gt;
&lt;br /&gt;
== GEM TRADER ==&lt;br /&gt;
* If you trade many gems at once, the money you earn is more.&lt;br /&gt;
&lt;br /&gt;
== GREEN CAVE IN TOWER ==&lt;br /&gt;
* Think ahead.&lt;br /&gt;
* The brown passages will trap you, although there is a way to get by.&lt;br /&gt;
* The passage only teleports you if in plain view of the player. Otherwise it is just like another floor.&lt;br /&gt;
* Ensure you can activate the red and purple passages too; you will need them.&lt;br /&gt;
&lt;br /&gt;
== INAPPROPRIATE KEYS SOLD HERE ==&lt;br /&gt;
* You do need the treasure chest, but not immediately.&lt;br /&gt;
* Slime-blob will need to move to, in order to help you to complete this game.&lt;br /&gt;
* Use the direction according to what is blocked.&lt;br /&gt;
&lt;br /&gt;
== KEYCARD TELEPORTERS ==&lt;br /&gt;
* Put the keycard and push the button for exiting to a different place.&lt;br /&gt;
* Remove the keycard and push buttons, too.&lt;br /&gt;
&lt;br /&gt;
== MAZE OF LOCKOO MIRRORS ==&lt;br /&gt;
* You cannot change display mode here, although you can do so once you leave.&lt;br /&gt;
* You need to collect all the potions. Some order might be better than others, though.&lt;br /&gt;
* You can use gun/bomb in case it help you know where exactly you are standing.&lt;br /&gt;
&lt;br /&gt;
== MINE ==&lt;br /&gt;
* You can't eat a skull.&lt;br /&gt;
* Ghost can push rocks too, and can go over water freely.&lt;br /&gt;
* You will need the red key.&lt;br /&gt;
* The purple key is to the east and you will need to fly over the water to get there.&lt;br /&gt;
* Look at the robotic codes for this level if you want to... it won't necessarily help unless you can really understand this game!&lt;br /&gt;
* When you go inside the cave, maybe you should make a map to keep track of where you are going.&lt;br /&gt;
&lt;br /&gt;
== MONSTER HOUSE ==&lt;br /&gt;
* One of the dragons does not want to hurt you but does want your autograph.&lt;br /&gt;
* You have nothing for writing autograph with.&lt;br /&gt;
* Don't waste all of your money at the store; you will need some in here too.&lt;br /&gt;
* Don't let otyughs killed by safety pins, guns, or bombs.&lt;br /&gt;
* Some room can wrap around.&lt;br /&gt;
* There is some window that you can fall out of.&lt;br /&gt;
* Landlord's Game is the predecessor to Monopoly.&lt;br /&gt;
&lt;br /&gt;
== MUSIC IS THE KEY ==&lt;br /&gt;
* The light purple music notes is sensor.&lt;br /&gt;
* Killing enemies potions are bad for you.&lt;br /&gt;
* The various objects can be pushed, some of them only indirectly.&lt;br /&gt;
&lt;br /&gt;
== PLEASE LEAVE BEFORE I ARREST YOU ==&lt;br /&gt;
* There is a secret passage.&lt;br /&gt;
* Understand how the missiles are going.&lt;br /&gt;
&lt;br /&gt;
== PUZZLE WITH THROWING BOMBS ==&lt;br /&gt;
* The sliders can be changed direction only a limited number of times.&lt;br /&gt;
* Ensure you know what you will need the sliders for.&lt;br /&gt;
* The &amp;quot;#&amp;quot; can cause a chain explosive.&lt;br /&gt;
* Dr.Gray can be killed by bombs and he holds the purple key (it is the only thing he owns which isn't gray).&lt;br /&gt;
&lt;br /&gt;
== SIMPLE GAME BOMBS AND TRANSPORTS ==&lt;br /&gt;
* Everything is what it seems with no invisible walls and fake walls and robots and so on, with one simple exception (obvious if you just look and think about it).&lt;br /&gt;
* If you understand this game, you will know what the ring is even before trying it.&lt;br /&gt;
&lt;br /&gt;
== START ROOM ==&lt;br /&gt;
* Go the store, and buy some more.&lt;br /&gt;
* You will need to open the purple door.&lt;br /&gt;
&lt;br /&gt;
== UNSCRAMBLE THE WORD OR PHRASE ==&lt;br /&gt;
* It is two words. The first word is a kind of word which will always be capitalized.&lt;br /&gt;
* Don't get the letters you need to be trapped.&lt;br /&gt;
&lt;br /&gt;
== WELCOME IN HELL ==&lt;br /&gt;
* Don't be greedy too much.&lt;br /&gt;
* Remember the information given by the scrolls.&lt;br /&gt;
* Does a dog have buddha nature? If you answer yes or no, you lose your own buddha nature.&lt;br /&gt;
* The telephone is ringing!&lt;br /&gt;
* Don't let the wind make you fall into the lava. Pay attention to wind warning.&lt;br /&gt;
&lt;br /&gt;
== ZZT KEY ==&lt;br /&gt;
* Think ahead really.&lt;br /&gt;
* Remember keys can be pushed too.&lt;br /&gt;
* You cannot collect a key if you already have one.&lt;br /&gt;
* Ensure not to get trapped by flowing water.&lt;br /&gt;
* Remember you will need a last blue key. (It is not downstairs!)&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town/Hint_Part_I&amp;diff=7771</id>
		<title>Super ASCII MZX Town/Hint Part I</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town/Hint_Part_I&amp;diff=7771"/>
		<updated>2011-12-25T21:05:22Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== (General purpose hints) ==&lt;br /&gt;
* Ensure make multiple save files. Sometimes you might realize you forgot something and have to restore an earlier file.&lt;br /&gt;
* You get points for conserved resources.&lt;br /&gt;
* Do not shoot everyone in the game, you can waste ammunition like that and lose points for conserved resources.&lt;br /&gt;
* If you want to set music modes, push space bar on the title screen, and then select the option.&lt;br /&gt;
&lt;br /&gt;
== BANISH DETONATE SUMMON KILL ==&lt;br /&gt;
* The words &amp;quot;Banish! Detonate! Summon! Kill!&amp;quot; do have a purpose.&lt;br /&gt;
* There is a way to go through the water even in the wrong direction.&lt;br /&gt;
* You need some but not all of the potions.&lt;br /&gt;
* Collect the potions at the right time instead of the wrong time.&lt;br /&gt;
* Dragons cannot be pushed and cannot go over water.&lt;br /&gt;
* Don't step on the king's lava please.&lt;br /&gt;
* Some potions must be collected not only at the right time but also in the right place.&lt;br /&gt;
&lt;br /&gt;
== CASTLE ==&lt;br /&gt;
* Did you remember a key?&lt;br /&gt;
* Some monster is safe, some is danger. (Color is irrelevant)&lt;br /&gt;
* Make a map if it will help you.&lt;br /&gt;
&lt;br /&gt;
== CODE ROOM ==&lt;br /&gt;
* Cover the blue floor with the boxes.&lt;br /&gt;
* The message at the bottom of the screen is refering to the area of the board covered by the message.&lt;br /&gt;
* You can use the keyboard commands (push H for help) to be able to see what the message is covering.&lt;br /&gt;
&lt;br /&gt;
== DRAGON FIGHTING ROOM ==&lt;br /&gt;
* Do you know a trick in MegaZeux?&lt;br /&gt;
* Do you know how to leave?&lt;br /&gt;
* Do you know which one is a real key?&lt;br /&gt;
&lt;br /&gt;
== FINAL ==&lt;br /&gt;
* You get permanent fire walking in this level.&lt;br /&gt;
* There are two possible solutions to the multiplication.&lt;br /&gt;
* Don't block the exit.&lt;br /&gt;
* BIG_MONSTER is good and you should not fight them please.&lt;br /&gt;
&lt;br /&gt;
== FOREST ==&lt;br /&gt;
* Push the switch in corner to open the gate.&lt;br /&gt;
* Clear the path properly.&lt;br /&gt;
* Pay attention to timer!&lt;br /&gt;
* Pay attention to duplication!&lt;br /&gt;
* Freeze time potion is best used when leaving back where you came from.&lt;br /&gt;
&lt;br /&gt;
== GAME OF FOUR BOMBS ==&lt;br /&gt;
* The &amp;quot;S&amp;quot; is sensor.&lt;br /&gt;
* Remember, Jesus saves.&lt;br /&gt;
* Lit bombs are still pushable too.&lt;br /&gt;
* Don't get trapped in the room containing the key.&lt;br /&gt;
&lt;br /&gt;
== GEM TRADER ==&lt;br /&gt;
* If you trade many gems at once, the money you earn is more.&lt;br /&gt;
&lt;br /&gt;
== GREEN CAVE IN TOWER ==&lt;br /&gt;
* Think ahead.&lt;br /&gt;
* The brown passages will trap you, although there is a way to get by.&lt;br /&gt;
* The passage only teleports you if in plain view of the player. Otherwise it is just like another floor.&lt;br /&gt;
* Ensure you can activate the red and purple passages too; you will need them.&lt;br /&gt;
&lt;br /&gt;
== INAPPROPRIATE KEYS SOLD HERE ==&lt;br /&gt;
* You do need the treasure chest, but not immediately.&lt;br /&gt;
* Slime-blob will need to move to, in order to help you to complete this game.&lt;br /&gt;
* Use the direction according to what is blocked.&lt;br /&gt;
&lt;br /&gt;
== KEYCARD TELEPORTERS ==&lt;br /&gt;
* Put the keycard and push the button for exiting to a different place.&lt;br /&gt;
* Remove the keycard and push buttons, too.&lt;br /&gt;
&lt;br /&gt;
== MAZE OF LOCKOO MIRRORS ==&lt;br /&gt;
* You cannot change display mode here, although you can do so once you leave.&lt;br /&gt;
* You need to collect all the potions. Some order might be better than others, though.&lt;br /&gt;
* You can use gun/bomb in case it help you know where exactly you are standing.&lt;br /&gt;
&lt;br /&gt;
== MINE ==&lt;br /&gt;
* You can't eat a skull.&lt;br /&gt;
* Ghost can push rocks too, and can go over water freely.&lt;br /&gt;
* You will need the red key.&lt;br /&gt;
* The purple key is to the east and you will need to fly over the water to get there.&lt;br /&gt;
* Look at the robotic codes for this level if you want to... it won't necessarily help unless you can really understand this game!&lt;br /&gt;
* When you go inside the cave, maybe you should make a map to keep track of where you are going.&lt;br /&gt;
&lt;br /&gt;
== MONSTER HOUSE ==&lt;br /&gt;
* One of the dragons does not want to hurt you but does want your autograph.&lt;br /&gt;
* You have nothing for writing autograph with.&lt;br /&gt;
* Don't waste all of your money at the store; you will need some in here too.&lt;br /&gt;
* Don't let otyughs killed by safety pins, guns, or bombs.&lt;br /&gt;
* Some room can wrap around.&lt;br /&gt;
* There is some window that you can fall out of.&lt;br /&gt;
* Landlord's Game is the predecessor to Monopoly.&lt;br /&gt;
&lt;br /&gt;
== MUSIC IS THE KEY ==&lt;br /&gt;
* The light purple music notes is sensor.&lt;br /&gt;
* Killing enemies potions are bad for you.&lt;br /&gt;
* The various objects can be pushed, some of them only indirectly.&lt;br /&gt;
&lt;br /&gt;
== PLEASE LEAVE BEFORE I ARREST YOU ==&lt;br /&gt;
* There is a secret passage.&lt;br /&gt;
* Understand how the missiles are going.&lt;br /&gt;
&lt;br /&gt;
== PUZZLE WITH THROWING BOMBS ==&lt;br /&gt;
* The sliders can be changed direction only a limited number of times.&lt;br /&gt;
* Ensure you know what you will need the sliders for.&lt;br /&gt;
* The &amp;quot;#&amp;quot; can cause a chain explosive.&lt;br /&gt;
* Dr.Gray can be killed by bombs and he holds the purple key (it is the only thing he owns which isn't gray).&lt;br /&gt;
&lt;br /&gt;
== SIMPLE GAME BOMBS AND TRANSPORTS ==&lt;br /&gt;
* Everything is what it seems with no invisible walls and fake walls and robots and so on, with one simple exception (obvious if you just look and think about it).&lt;br /&gt;
* If you understand this game, you will know what the ring is even before trying it.&lt;br /&gt;
&lt;br /&gt;
== START ROOM ==&lt;br /&gt;
* You will need to open the purple door here.&lt;br /&gt;
* Go the store, and buy some more.&lt;br /&gt;
&lt;br /&gt;
== UNSCRAMBLE THE WORD OR PHRASE ==&lt;br /&gt;
* It is two words. The first word is a kind of word which will always be capitalized.&lt;br /&gt;
* Don't get the letters you need to be trapped.&lt;br /&gt;
&lt;br /&gt;
== WELCOME IN HELL ==&lt;br /&gt;
* Don't be greedy too much.&lt;br /&gt;
* Remember the information given by the scrolls.&lt;br /&gt;
* Does a dog have buddha nature? If you answer yes or no, you lose your own buddha nature.&lt;br /&gt;
* The telephone is ringing!&lt;br /&gt;
* Don't let the wind make you fall into the lava. Pay attention to wind warning.&lt;br /&gt;
&lt;br /&gt;
== ZZT KEY ==&lt;br /&gt;
* Think ahead really.&lt;br /&gt;
* Remember keys can be pushed too.&lt;br /&gt;
* You cannot collect a key if you already have one.&lt;br /&gt;
* Ensure not to get trapped by flowing water.&lt;br /&gt;
* Remember you will need a last blue key. (It is not downstairs!)&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town/Hint_Part_I&amp;diff=7770</id>
		<title>Super ASCII MZX Town/Hint Part I</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town/Hint_Part_I&amp;diff=7770"/>
		<updated>2011-12-25T20:07:57Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: Created page with &amp;quot;== (General purpose hints) ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== (General purpose hints) ==&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7769</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7769"/>
		<updated>2011-12-25T20:07:28Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009-2011&lt;br /&gt;
|genre = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game. Again, you have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER; but it is different this time!&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism &amp;lt;sup&amp;gt;[citation needed]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion and then quickly retreat from danger.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
* This game is bad because Hitler played it.&lt;br /&gt;
* This game is for DOS computers only.&lt;br /&gt;
* Some of the puzzles do not work correctly except on the author's computer.&lt;br /&gt;
* Torches in Part I work correctly, while torches in Part II do not work correctly.&lt;br /&gt;
* MagicGems are exactly like ZZT gems.&lt;br /&gt;
* BIG_MONSTER is bad and you should kill them, please.&lt;br /&gt;
* The award of completing this game is torture.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
In case you have question or want hint, you can make sections for it in here, or read in case someone already put something here.&lt;br /&gt;
* [[Super ASCII MZX Town/Hint Part I|Part I]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7768</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7768"/>
		<updated>2011-12-24T23:18:08Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game. Again, you have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER; but it is different this time!&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism &amp;lt;sup&amp;gt;[citation needed]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion and then quickly retreat from danger.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
* This game is bad because Hitler played it.&lt;br /&gt;
* This game is for DOS computers only.&lt;br /&gt;
* Some of the puzzles do not work correctly except on the author's computer.&lt;br /&gt;
* Torches in Part I work correctly, while torches in Part II do not work correctly.&lt;br /&gt;
* MagicGems are exactly like ZZT gems.&lt;br /&gt;
* BIG_MONSTER is bad and you should kill them, please.&lt;br /&gt;
* The award of completing this game is torture.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
In case you have question or want hint, you can make sections for it in here, or read in case someone already put something here.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7767</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7767"/>
		<updated>2011-12-04T00:41:09Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: The root page of the HTTP site just redirect to gopher anyways so I removed that link (subdirectories might still work, however)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/w/index.php?title=User_talk:Zzo38&amp;amp;oldid=21293425] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]], and [[Super ASCII MZX Town]], and also a [[PZX|fork of MegaZeux with different features]].&lt;br /&gt;
&lt;br /&gt;
Recently&amp;lt;sup&amp;gt;[please specify]&amp;lt;/sup&amp;gt;, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games and Forth codes.&lt;br /&gt;
&lt;br /&gt;
==MegaZeux Games==&lt;br /&gt;
* [[Super ASCII MZX Town]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[gopher://zzo38computer.cjb.net/ ZZO38COMPUTER (Gopher)]&lt;br /&gt;
*[http://zzo38computer.cjb.net/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Talk:Main_Page&amp;diff=7707</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Talk:Main_Page&amp;diff=7707"/>
		<updated>2011-05-27T22:21:22Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;No one should need to edit this page.  Talk about something else.&lt;br /&gt;
&lt;br /&gt;
The front page has been under construction for years now? I think it would be pretty cool if we had featured articles and images. --[[User:T-Bone6|T-Bone6]] 16:14, 3 August 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
If it is under construction, shouldn't that mean someone has to type something on it? --[[User:Zzo38|Zzo38]] 15:21, 27 May 2011 (PDT)&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7608</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7608"/>
		<updated>2010-12-13T06:11:12Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game. Again, you have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER; but it is different this time!&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism &amp;lt;sup&amp;gt;[citation needed]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion and then quickly retreat from danger.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
* This game is bad because Hitler played it.&lt;br /&gt;
* This game is for DOS computers only.&lt;br /&gt;
* Some of the puzzles do not work correctly except on the author's computer.&lt;br /&gt;
* Torches in Part I work correctly, while torches in Part II do not work correctly.&lt;br /&gt;
* MagicGems are exactly like ZZT gems.&lt;br /&gt;
* BIG_MONSTER is bad and you should kill them, please.&lt;br /&gt;
* The award of completing this game is torture.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Help:Editing_Guidelines&amp;diff=7607</id>
		<title>Help:Editing Guidelines</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Help:Editing_Guidelines&amp;diff=7607"/>
		<updated>2010-12-09T01:03:53Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you would like to help contribute to the MZX Wiki please keep the following rules and guidelines in mind:&lt;br /&gt;
&lt;br /&gt;
#If you're unsure about how to use a wiki feature, check how it's done on [http://en.wikipedia.org/wiki/Main_Page Wikipedia].&lt;br /&gt;
#If you wish to use content from another source, [http://en.wikipedia.org/wiki/Paraphrase paraphrase] it rather than copying it word-for-word.&lt;br /&gt;
#Make sure that the information you are submitting is correct.&lt;br /&gt;
#Use [[Help:Basic Markup|wiki mark-up]] rather than HTML tags.&lt;br /&gt;
#Make the MZX Wiki easier to navigate by linking related articles together.&lt;br /&gt;
#Be mindful of the &amp;quot;minor edit&amp;quot; function and use it where appropriate.&lt;br /&gt;
#Always preview an article before submitting!&lt;br /&gt;
#If an article could be referred to under multiple names or as an acronym, create redirect pages to make it easier to find.&lt;br /&gt;
#All intrawiki links are case-sensitive (except for the first letter).  Make sure to test your links in the preview screen prior to saving the page!&lt;br /&gt;
&lt;br /&gt;
Happy editing!&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7606</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7606"/>
		<updated>2010-12-08T00:44:52Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism &amp;lt;sup&amp;gt;[citation needed]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion and then quickly retreat from danger.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
* This game is bad because Hitler played it.&lt;br /&gt;
* This game is for DOS computers only.&lt;br /&gt;
* Some of the puzzles do not work correctly except on the author's computer.&lt;br /&gt;
* Torches in Part I work correctly, while torches in Part II do not work correctly.&lt;br /&gt;
* MagicGems are exactly like ZZT gems.&lt;br /&gt;
* BIG_MONSTER is bad and you should kill them, please.&lt;br /&gt;
* The award of completing this game is torture.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7602</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7602"/>
		<updated>2010-11-27T03:34:00Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion and then quickly retreat from danger.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
* This game is bad because Hitler played it.&lt;br /&gt;
* This game is for DOS computers only.&lt;br /&gt;
* Some of the puzzles do not work correctly except on the author's computer.&lt;br /&gt;
* Torches in Part I work correctly, while torches in Part II do not work correctly.&lt;br /&gt;
* MagicGems are exactly like ZZT gems.&lt;br /&gt;
* BIG_MONSTER is bad and you should kill them, please.&lt;br /&gt;
* The award of completing this game is torture.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7601</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7601"/>
		<updated>2010-11-27T03:23:26Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
* Win32 binaries and source-codes is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/&lt;br /&gt;
* Documentation is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/doc/&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
* EV.GLOBAL ( slowed slowdown -- slowed ) Called on every cycle&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key (please note this is a simplified version, its only function here is to disallow you from holding multiple keys of the same color):&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;br /&gt;
&lt;br /&gt;
===ZZT Gems===&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 : GIVE DUP COUNTER@ ROT + SWAP COUNTER! ;&lt;br /&gt;
 &lt;br /&gt;
 1 VARIABLE NEEDS-GEM-MESSAGE&lt;br /&gt;
 $81 4 A_ITEM A_PUSHABLE + A_CRUSH + A_SHOOTABLE + 0 EXTKIND ZztGem&lt;br /&gt;
 ZztGem EV.ITEM + :EVENT&lt;br /&gt;
   DROP DROP 1 BISFX&lt;br /&gt;
   1 &amp;quot;GEMS&amp;quot; GIVE 1 &amp;quot;HEALTH&amp;quot; GIVE 10 &amp;quot;SCORE&amp;quot; GIVE&lt;br /&gt;
   NEEDS-GEM-MESSAGE @ IF&lt;br /&gt;
     &amp;quot;Gems give you health!&amp;quot; SETMESG&lt;br /&gt;
     0 NEEDS-GEM-MESSAGE !&lt;br /&gt;
   THEN 1&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7579</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7579"/>
		<updated>2010-11-17T05:54:35Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
* Win32 binaries and source-codes is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/&lt;br /&gt;
* Documentation is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/doc/&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key (please note this is a simplified version, its only function here is to disallow you from holding multiple keys of the same color):&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;br /&gt;
&lt;br /&gt;
===ZZT Gems===&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 : GIVE DUP COUNTER@ ROT + SWAP COUNTER! ;&lt;br /&gt;
 &lt;br /&gt;
 1 VARIABLE NEEDS-GEM-MESSAGE&lt;br /&gt;
 $81 4 A_ITEM A_PUSHABLE + A_CRUSH + A_SHOOTABLE + 0 EXTKIND ZztGem&lt;br /&gt;
 ZztGem EV.ITEM + :EVENT&lt;br /&gt;
   DROP DROP 1 BISFX&lt;br /&gt;
   1 &amp;quot;GEMS&amp;quot; GIVE 1 &amp;quot;HEALTH&amp;quot; GIVE 10 &amp;quot;SCORE&amp;quot; GIVE&lt;br /&gt;
   NEEDS-GEM-MESSAGE @ IF&lt;br /&gt;
     &amp;quot;Gems give you health!&amp;quot; SETMESG&lt;br /&gt;
     0 NEEDS-GEM-MESSAGE !&lt;br /&gt;
   THEN 1&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7578</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7578"/>
		<updated>2010-11-17T05:52:22Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: ZZT Gems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
* Win32 binaries and source-codes is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/&lt;br /&gt;
* Documentation is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/doc/&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key (please note this is a simplified version, its only function here is to disallow you from holding multiple keys of the same color):&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;br /&gt;
&lt;br /&gt;
===ZZT Gems===&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 : GIVE DUP COUNTER@ ROT + SWAP COUNTER! ;&lt;br /&gt;
 &lt;br /&gt;
 1 VARIABLE NEEDS-GEM-MESSAGE&lt;br /&gt;
 $81 4 A_ITEM A_PUSHABLE + 0 EXTKIND ZztGem&lt;br /&gt;
 ZztGem EV.ITEM + :EVENT&lt;br /&gt;
   DROP DROP 1 BISFX&lt;br /&gt;
   1 &amp;quot;GEMS&amp;quot; GIVE 1 &amp;quot;HEALTH&amp;quot; GIVE 10 &amp;quot;SCORE&amp;quot; GIVE&lt;br /&gt;
   NEEDS-GEM-MESSAGE @ IF&lt;br /&gt;
     &amp;quot;Gems give you health!&amp;quot; SETMESG&lt;br /&gt;
     0 NEEDS-GEM-MESSAGE !&lt;br /&gt;
   THEN 1&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=MZX_Clich%C3%A9_Page&amp;diff=7577</id>
		<title>MZX Cliché Page</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=MZX_Clich%C3%A9_Page&amp;diff=7577"/>
		<updated>2010-11-15T02:35:24Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ''MZX Cliche'' page is a list of clichés commonly found in the [[MegaZeux]] community and in its [[Category:Games|Games]]. Often these clichés have corollaries or additional similar rules attached to complete them. The file has not been updated in quite some time but still technically accepts submissions.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* The [http://sites.google.com/site/kkairossportalthingy/mzx-cliche-page MZX Cliché Page]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7576</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7576"/>
		<updated>2010-11-15T02:28:55Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
* This game is bad because Hitler played it.&lt;br /&gt;
* This game is for DOS computers only.&lt;br /&gt;
* Some of the puzzles do not work correctly except on the author's computer.&lt;br /&gt;
* Torches in Part I work correctly, while torches in Part II do not work correctly.&lt;br /&gt;
* MagicGems are exactly like ZZT gems.&lt;br /&gt;
* BIG_MONSTER is bad and you should kill them, please.&lt;br /&gt;
* The award of completing this game is torture.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=MZXWiki:Community_portal&amp;diff=7575</id>
		<title>MZXWiki:Community portal</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=MZXWiki:Community_portal&amp;diff=7575"/>
		<updated>2010-11-15T02:14:37Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: Created page with &amp;quot;Welcome to the MZX Wiki Community Portal.  ==Forums== * &amp;lt;tt&amp;gt;http://www.digitalmzx.net/forums/index.php?act=idx&amp;lt;/tt&amp;gt;  ==DigiVault== * &amp;lt;tt&amp;gt;http://vault.digitalmzx.net/&amp;lt;/tt&amp;gt;  ==Inte...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the MZX Wiki Community Portal.&lt;br /&gt;
&lt;br /&gt;
==Forums==&lt;br /&gt;
* &amp;lt;tt&amp;gt;http://www.digitalmzx.net/forums/index.php?act=idx&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DigiVault==&lt;br /&gt;
* &amp;lt;tt&amp;gt;http://vault.digitalmzx.net/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Internet Relay Chat==&lt;br /&gt;
* Host: &amp;lt;tt&amp;gt;irc.slashnet.org&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Port: &amp;lt;tt&amp;gt;6667&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Channel: &amp;lt;tt&amp;gt;#mzx&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7574</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7574"/>
		<updated>2010-11-15T01:55:11Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake, or that we have not yet found the actual author of this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7573</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7573"/>
		<updated>2010-11-15T01:01:17Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction; but this is, of course, impossible.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7572</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7572"/>
		<updated>2010-11-15T01:00:35Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: Criticize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
== Criticize ==&lt;br /&gt;
These game have many criticism:&lt;br /&gt;
* The sliders on the title screen are not real sliders.&lt;br /&gt;
* Most of the levels have yellow borders.&lt;br /&gt;
* There is no URL to download this game.&lt;br /&gt;
* The scoring system is really bad.&lt;br /&gt;
* In one level you have to go through a corridor of lava with a windy potion.&lt;br /&gt;
* Half of the levels in this game are impossible to complete.&lt;br /&gt;
* You have to go through the water in the wrong direction.&lt;br /&gt;
* Killing enemies potions are good for you.&lt;br /&gt;
&lt;br /&gt;
The author would like to assure you that all of these statements are incorrect; but the administration of Digital MZX assures the readers of this page that these statements are in fact correct, and that the author of this game is either lying or making a mistake.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7571</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7571"/>
		<updated>2010-11-15T00:42:21Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/w/index.php?title=User_talk:Zzo38&amp;amp;oldid=21293425] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]], and [[Super ASCII MZX Town]], and also a [[PZX|fork of MegaZeux with different features]].&lt;br /&gt;
&lt;br /&gt;
Recently&amp;lt;sup&amp;gt;[please specify]&amp;lt;/sup&amp;gt;, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games and Forth codes.&lt;br /&gt;
&lt;br /&gt;
==MegaZeux Games==&lt;br /&gt;
* [[Super ASCII MZX Town]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://zzo38computer.cjb.net/ ZZO38COMPUTER (HTTP)]&lt;br /&gt;
*[gopher://zzo38computer.cjb.net/ ZZO38COMPUTER (Gopher)]&lt;br /&gt;
*[http://zzo38computer.cjb.net/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7519</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7519"/>
		<updated>2010-06-26T11:38:02Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
* Win32 binaries and source-codes is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/&lt;br /&gt;
* Documentation is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/doc/&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key (please note this is a simplified version, its only function here is to disallow you from holding multiple keys of the same color):&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7133</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=7133"/>
		<updated>2009-09-13T00:11:57Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: documentation link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
* Win32 binaries and source-codes is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/&lt;br /&gt;
* Documentation is available at: http://zzo38computer.cjb.net/mzx1/mzx_extended/doc/&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7132</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7132"/>
		<updated>2009-09-13T00:02:33Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/w/index.php?title=User_talk:Zzo38&amp;amp;oldid=21293425] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]], and [[Super ASCII MZX Town]], and also a [[PZX|fork of MegaZeux with different features]].&lt;br /&gt;
&lt;br /&gt;
Recently&amp;lt;sup&amp;gt;[please specify]&amp;lt;/sup&amp;gt;, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games and Forth codes.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://zzo38computer.cjb.net/ ZZO38COMPUTER (HTTP)]&lt;br /&gt;
*[gopher://zzo38computer.cjb.net/ ZZO38COMPUTER (Gopher)]&lt;br /&gt;
*[http://zzo38computer.cjb.net/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7131</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=7131"/>
		<updated>2009-09-13T00:01:43Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: The wiki is not used, replaced external links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/w/index.php?title=User_talk:Zzo38&amp;amp;oldid=21293425] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]].&lt;br /&gt;
&lt;br /&gt;
Recently&amp;lt;sup&amp;gt;[please specify]&amp;lt;/sup&amp;gt;, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games and Forth codes.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://zzo38computer.cjb.net/ ZZO38COMPUTER (HTTP)]&lt;br /&gt;
*[gopher://zzo38computer.cjb.net/ ZZO38COMPUTER (Gopher)]&lt;br /&gt;
*[http://zzo38computer.cjb.net/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7130</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=7130"/>
		<updated>2009-09-12T23:58:49Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = Ascmzxto.png&lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = We don't use &amp;quot;genre&amp;quot; here.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=File:Ascmzxto.png&amp;diff=7129</id>
		<title>File:Ascmzxto.png</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=File:Ascmzxto.png&amp;diff=7129"/>
		<updated>2009-09-12T23:57:53Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: Super ASCII MZX Town!

&amp;lt;div class=&amp;quot;tag&amp;quot; style=&amp;quot;margin:0.5em auto;width:40%;clear:both;background-color:transparent;border:2px solid #8888aa; padding:4px;font-size:85%;min-height:64px;vertical-align:center&amp;quot; id=&amp;quot;imageLicense&amp;quot;&amp;gt;

&amp;lt;div style=&amp;quot;float:left&amp;quot; id=&amp;quot;i&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Super ASCII MZX Town!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tag&amp;quot; style=&amp;quot;margin:0.5em auto;width:40%;clear:both;background-color:transparent;border:2px solid #8888aa; padding:4px;font-size:85%;min-height:64px;vertical-align:center&amp;quot; id=&amp;quot;imageLicense&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left&amp;quot; id=&amp;quot;icon&amp;quot;&amp;gt;[[Image:NoCopyright.png|32px|No copyright]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:left;margin-left:68px&amp;quot; id=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This is a picture from a [[MegaZeux]] game made by [[zzo38]], and is therefore public domain.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=File:NoCopyright.png&amp;diff=7128</id>
		<title>File:NoCopyright.png</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=File:NoCopyright.png&amp;diff=7128"/>
		<updated>2009-09-12T23:57:43Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: public domain&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;public domain&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=6958</id>
		<title>Super ASCII MZX Town</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Super_ASCII_MZX_Town&amp;diff=6958"/>
		<updated>2009-07-22T20:24:40Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: New page: {{Game| title = Super ASCII MZX Town |image =  |creator = zzo38 |company =  |released = 2009 |genre =  }}  Super ASCII MZX Town is a pure ASCII game made by zzo38. Part I uses norm...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game| title = Super ASCII MZX Town&lt;br /&gt;
|image = &lt;br /&gt;
|creator = [[zzo38]]&lt;br /&gt;
|company = &lt;br /&gt;
|released = 2009&lt;br /&gt;
|genre = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Super ASCII MZX Town]] is a pure ASCII game made by zzo38. Part I uses normal MegaZeux, but Part II (and any subsequent sequels) requires PZX features, so you have to use the same forked version of MegaZeux that zzo38 wrote. These game are not the ordinary slider puzzle. It's different. Unlike other MegaZeux games, in this game you actually have to think about it. And remember also you might try for a high score when completing the game. You can try just to complete the game, or you can try to complete the game with a higher score.&lt;br /&gt;
&lt;br /&gt;
== Part I ==&lt;br /&gt;
You have to get all of the purple keys to reach the final level, where you will see BIG_MONSTER. You also need the keycards to teleport to a different place. This game also has a dark engine and a high-score system. And you get a lot of bonus points for conserved ammo/bombs/gems/health/etc. There is 91 boards in this game (including the title screen).&lt;br /&gt;
&lt;br /&gt;
== Part II ==&lt;br /&gt;
This game is the sequel to Part I. This one also has some platform game levels, and a better dark engine also. This game uses many Forth codes and Robotic codes. And there is magic keycards in this game.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6880</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6880"/>
		<updated>2009-06-25T19:39:12Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
===ZZT Keys===&lt;br /&gt;
Here is a code to implement a ZZT key:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6863</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6863"/>
		<updated>2009-06-20T05:28:09Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
==ZZT Keys==&lt;br /&gt;
Here is a code to implement a ZZT key:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;br /&gt;
 &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX&lt;br /&gt;
Gives the player a message and plays a sound effect.&lt;br /&gt;
 0&lt;br /&gt;
Zero is the value returned from the event (the &amp;quot;remove&amp;quot; parameter), meaning the object shouldn't be removed from the screen.&lt;br /&gt;
 ELSE &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX&lt;br /&gt;
Another message and sound effect.&lt;br /&gt;
 1&lt;br /&gt;
Any non-zero value means the object will be removed from the screen (because the player has just picked up the key).&lt;br /&gt;
 THEN&lt;br /&gt;
The end of a conditional block. If using the word THEN here confuses you, you can use a code to make ENDIF work instead, but the reason THEN is used is because this is a different kind of THEN than it is is BASIC, in Forth the THEN is like &amp;quot;do this, and then do this...&amp;quot; rather than &amp;quot;if this then this...&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
And this signals the end of the event code, and exits compile mode.&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6862</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6862"/>
		<updated>2009-06-20T05:24:46Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;br /&gt;
&lt;br /&gt;
==Examples of Forth Codes==&lt;br /&gt;
Please note that all examples are case-insensitive, just like anything else in MegaZeux.&lt;br /&gt;
&lt;br /&gt;
==ZZT Keys==&lt;br /&gt;
Here is a code to implement a ZZT key:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
 &lt;br /&gt;
 $80 12 A_ITEM A_PUSHABLE + 0 EXTKIND ZztKey&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
   DROP BOARD_COLOR + @ DUP TAKEKEY SWAP GIVEKEY DROP&lt;br /&gt;
   IF&lt;br /&gt;
     &amp;quot;You already have the key!&amp;quot; SETMESG 9 BISFX 0&lt;br /&gt;
   ELSE&lt;br /&gt;
     &amp;quot;You now have the key.&amp;quot; SETMESG 8 BISFX 1&lt;br /&gt;
   THEN&lt;br /&gt;
 ;&lt;br /&gt;
I will explain each line and part of line one by one so that you can follow:&lt;br /&gt;
 INCLUDE megazeux.4th&lt;br /&gt;
This loads the standard libraries of Forth codes.&lt;br /&gt;
 $80&lt;br /&gt;
We will assign number 0x80 (128 in decimal) to the new kind of object. Only numbers 0x80 to 0xFE (128 to 254) can be used, because other numbers are used by built-ins. (Dollar signs indicate hexadecimal numbers in Forth codes)&lt;br /&gt;
 12&lt;br /&gt;
This means it will display as character 12.&lt;br /&gt;
 A_ITEM A_PUSHABLE +&lt;br /&gt;
This object will have the A_ITEM and A_PUSHABLE flags (meaning it is pushable by anything other than the player, and the player can interact with it).&lt;br /&gt;
 0&lt;br /&gt;
It will not ask for a parameter when placed in the editor.&lt;br /&gt;
 EXTKIND ZztKey&lt;br /&gt;
Creates the extended kind using the values from the stack, and calls it ZztKey. The name ZztKey is now used in the editor and can be used in Robotic codes as well. It is also usable in Forth codes as a constant.&lt;br /&gt;
 ZztKey EV.ITEM + :EVENT&lt;br /&gt;
Adding ZztKey to EV.ITEM gets the number of the item event for the ZztKey. :EVENT tells it to start compiling an event code.&lt;br /&gt;
 DROP&lt;br /&gt;
The top parameter passed to the EV.ITEM event is dir, which we aren't using, so we DROP it.&lt;br /&gt;
 BOARD_COLOR + @&lt;br /&gt;
BOARD_COLOR represents the base address of the board color array. We add that to the next parameter (offset) and fetch the value, which is the color of the object (the key) at that offset.&lt;br /&gt;
 DUP&lt;br /&gt;
We are using the color twice, so we duplicate it.&lt;br /&gt;
 TAKEKEY&lt;br /&gt;
Attempt to take away that color of key from the player, and gets a success code.&lt;br /&gt;
 SWAP&lt;br /&gt;
We want to pass the color, not the success code to GIVEKEY, so we SWAP it.&lt;br /&gt;
 GIVEKEY DROP&lt;br /&gt;
Attempt to give a key of that color to the player. If the player already had that color, it was taken away so we now give it back. If that is not the case, then we still need to give a key to the player, which means the player is now picking up the key. We don't care whether or not this is successful (it always will be), so we drop the success code.&lt;br /&gt;
 IF&lt;br /&gt;
Now we are entering a conditional block. The last value that hasn't been used yet is the success of TAKEKEY. So, the part between IF and ELSE is the true part (success taking the key away from the player), the part between ELSE and THEN is the false part (the key couldn't be taken, so it was given)&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6861</id>
		<title>PZX</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX&amp;diff=6861"/>
		<updated>2009-06-20T05:07:43Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PZX''', or ProngZeux, is a fork of [[MegaZeux]] written by [[zzo38]] that focuses primarily on support for [http://en.wikipedia.org/wiki/Forth_(programming_language) FORTH], a low-level, stack-driven programming language.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
The biggest contribution of this particular fork is FORTH support.  Other changes include the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
zzo38 also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
===Deferred Expressions===&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
===Extended Kinds===&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
===Overlay Modes===&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
===Graphics Modes===&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;br /&gt;
&lt;br /&gt;
==Use of Attribute Flags==&lt;br /&gt;
The flags are as follows (any combination can be used, except for a few exceptions):&lt;br /&gt;
* A_PUSHNS: Allows object to be pushed north/south&lt;br /&gt;
* A_PUSHEW: Allows object ot be push east/west&lt;br /&gt;
* A_PUSHABLE: Object can be pushed in any direction (Do not combine with A_PUSHNS or A_PUSHEW)&lt;br /&gt;
* A_ITEM: Calls EV.ITEM event when player touches it. Player will not automatically push or stand on this object&lt;br /&gt;
* A_UPDATE: EV.UPDATE event will be called every step unless freeze time is active&lt;br /&gt;
* A_HURTS: Causes damage when player hits it&lt;br /&gt;
* A_UNDER: Things can stand on this&lt;br /&gt;
* A_ENTRANCE: Parameter is a board number, if the player steps here it will teleport the player to that board&lt;br /&gt;
* A_EXPLODE: Object is explosive&lt;br /&gt;
* A_BLOW_UP: Object can blow up&lt;br /&gt;
* A_SHOOTABLE: Player bullets and neutral bullets can destroy this&lt;br /&gt;
* A_BREAKABLE: Any bullets can destroy this (Do not combine with A_SHOOTABLE or A_SPEC_SHOT)&lt;br /&gt;
* A_ENEMY: Used in various purposes by MegaZeux&lt;br /&gt;
* A_AFFECTSTOOD: Calls EV.AFFECTSTOOD event every step if the player is standing here&lt;br /&gt;
* A_SPEC_SHOT: Calls EV.SHOT event if hit by a bullet&lt;br /&gt;
* A_SPEC_PUSH: Object can be pushed in any direction&lt;br /&gt;
* A_SPEC_BOMB: Calls EV.BOMB event when explosion hits it&lt;br /&gt;
* A_SPEC_STOOD: Player can stand here, even if other things can't&lt;br /&gt;
* A_USERFLAG: Does nothing&lt;br /&gt;
* A_CRUSH: Object can be crushed like in ZZT&lt;br /&gt;
* A_INVISIBLE: Draws using under color, or draws black if this is the under object&lt;br /&gt;
* A_SEEBLIND: Object is visible even if the player is blind&lt;br /&gt;
&lt;br /&gt;
There are also element flags (up to one of these flags can be used):&lt;br /&gt;
* AE_WATER: Things that are not allowed to move onto water won't move onto here&lt;br /&gt;
* AE_FIRE: Things that are not allowed to move onto fire won't move onto here&lt;br /&gt;
* AE_LAVA: Things that are not allowed to move onto lava won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_GOOP: Things that are not allowed to move onto goop won't move onto here, also cannot be pushed or pushed onto&lt;br /&gt;
* AE_THINWEB: Spiders that can move on thin webs are allowed to step here&lt;br /&gt;
* AE_THICKWEB: Spiders that can move on thick webs are allowed to step here&lt;br /&gt;
* AE_PLAYER: Cannot be pushed by things that react with the player&lt;br /&gt;
&lt;br /&gt;
==Use of Events==&lt;br /&gt;
The following events exist in game and are not corresponding to any particular object:&lt;br /&gt;
* EV.PLAYERMOVING ( dir edge offset -- cancel ) Called to determine whether or not the player is allowed to move&lt;br /&gt;
* EV.KEYBOARD ( key -- canceldefault ) Called when a key is pushed, can tell it to cancel the default function of that key&lt;br /&gt;
* EV.LOADED ( category -- ) When game is started or restored&lt;br /&gt;
* EV.ENTERED ( category -- ) When the board is switched&lt;br /&gt;
* EV.BULLETHIT ( offset bulletoffset parameter -- category ) Indicates that a bullet is about to hit something solid&lt;br /&gt;
&lt;br /&gt;
These events are corresponding to specific objects (add the extended kind number to the event code):&lt;br /&gt;
* EV.PUSH ( offset dir category distance -- ) Called when an object is being pushed&lt;br /&gt;
* EV.ITEM ( offset dir -- remove ) Called when the player touches an object with A_ITEM flag&lt;br /&gt;
* EV.AFFECTSTOOD ( offset -- ) The player is stand on object with A_AFFECTSTOOD&lt;br /&gt;
* EV.UPDATE ( offset -- ) Something with A_UPDATE is being updated&lt;br /&gt;
* EV.SHOT ( offset bulletoffset dir bullettype -- ) Something with A_SPEC_SHOT is being hit by a bullet&lt;br /&gt;
* EV.BOMB ( offset -- ) Something with A_SPEC_BOMB is hit by an explosion&lt;br /&gt;
* EV.LAZER ( lazeroffset offset dir -- blocking ) Object hit by lazer beam, can block lazer or allow beam to be transmitted through&lt;br /&gt;
* EV.ARRIVE ( offset -- ) Another object has arrived on top of this object&lt;br /&gt;
* EV.TESTPUSH ( offset dir category distance -- cancel ) Testing whether or not an object is allowed to be pushed&lt;br /&gt;
&lt;br /&gt;
The following events are used in the editor:&lt;br /&gt;
* EV.EDITORKEY ( color thing param offset key keymod -- color thing param offset canceldefault ) A key is pushed during editing&lt;br /&gt;
* EV.BEFOREADDBOARD ( -- ? ) Before a new board is being added, the current board will be the old current board&lt;br /&gt;
* EV.AFTERADDBOARD ( ? -- ) After a new board is added, during processing of event the current board will be the newly added board, even if it would change back afterward&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=PZX_features&amp;diff=6841</id>
		<title>PZX features</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=PZX_features&amp;diff=6841"/>
		<updated>2009-06-14T23:58:44Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: New page: PZX features means the zzo38 fork of MegaZeux, also known as PZX or ProngZeux. It includes support for [http://en.wikipedia.org/wiki/Forth_(programming_language) Forth], the abilit...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PZX features means the [[zzo38]] fork of [[MegaZeux]], also known as PZX or ProngZeux. It includes support for [http://en.wikipedia.org/wiki/Forth_(programming_language) Forth], the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), deferred expressions, extended kinds, new overlay modes and SMZX modes of dubious utility (including the one that draws overlay on the outside of the viewport instead of inside, one that draws only the overlay and not the board, an SMZX mode that uses 16 colors per character (reducing the resolution per character to 4x7), and a blinking text mode), meanings for the other bits in lava_walk, and displacement overlay modes which allow adjustment of the overlay by individual pixels.&lt;br /&gt;
&lt;br /&gt;
He also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.&lt;br /&gt;
&lt;br /&gt;
To make backward compatibility, the way it works, is if the first line of the global robot is a comment with a greater than sign at beginning (optionally followed by a filename), it will activate PZX mode. If there is a filename, that is the file containing the Forth codes.&lt;br /&gt;
&lt;br /&gt;
==Deferred Expressions==&lt;br /&gt;
A deferred expression is sort of like having function calls for calling another expression. The operator &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt; sets the current parameter value to the left side and then evaluates the right side, the operator &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; gets the current parameter, and the operator &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; allows you to use a deferred expression.&lt;br /&gt;
&lt;br /&gt;
Because parentheses are used to evaluate expression, it uses square brackets to mean a deferred expression. It will convert &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; when accessing a deferred expression.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator is two of &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; with the name of string in between (including the dollar sign), and it call the deferred expression. You can also use &amp;lt;tt&amp;gt;`&amp;lt;/tt&amp;gt; operator with &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; followed by a Forth word instead of a string, in which case it will instead call that Forth word to determine the value of the expression.&lt;br /&gt;
&lt;br /&gt;
==Extended Kinds==&lt;br /&gt;
You can create extended kinds 0x80 to 0xFE (128 to 254) using Forth codes.&lt;br /&gt;
&lt;br /&gt;
In order to create a extended kind you must indicate:&lt;br /&gt;
* The number assigned to it&lt;br /&gt;
* The character used to represent it (255 means use the parameter, like a CustomBlock does, and negative number mean various other things)&lt;br /&gt;
* The A_ flags associated with it&lt;br /&gt;
* How the parameter is decided (the parameter type can come from any built-in)&lt;br /&gt;
* The name&lt;br /&gt;
And then you can optionally define events for it, such as what happens when it is shot, updated, touched by the player, underneath the player, and so on. Which events are used depends on the A_ flags, although it is possible to have A_ flags without the corresponding events (for example, the simplest way to prevent the player from pushing something that is normally pushable is to give the object the A_ITEM flag without a corresponding event).&lt;br /&gt;
&lt;br /&gt;
Some new A_ flags have been implemented:&lt;br /&gt;
* A_BREAKABLE&lt;br /&gt;
* A_USERFLAG&lt;br /&gt;
* A_CRUSH&lt;br /&gt;
* A_INVISIBLE&lt;br /&gt;
* A_ELEMENT (3 bits, and in Forth codes you use AE_WATER and so on instead of typing A_ELEMENT)&lt;br /&gt;
&lt;br /&gt;
==Overlay Modes==&lt;br /&gt;
Mode 4 makes it draw the overlay outside of the viewport instead of on the inside of the viewport.&lt;br /&gt;
&lt;br /&gt;
Mode 65 and 66 makes it to not draw the board, and only draw the overlay. (This feature actually already existed in MegaZeux, but there was previously no access to it during the game.)&lt;br /&gt;
&lt;br /&gt;
Mode 0x7? prevents it from drawing anything at all, allowing Forth codes direct access to the text_video.&lt;br /&gt;
&lt;br /&gt;
There are also displacement overlay modes 0xA?, 0xB?, 0xE?, which allows pixel-accuracy for drawing characters, and also can make individual pixels transparent (so you can see the character drawn underneath).&lt;br /&gt;
&lt;br /&gt;
==Graphics Modes==&lt;br /&gt;
Modes 0 to 3 are same as normal MegaZeux. Mode 64 to 67 are the mode for 16 colors per character. Mode 141 makes blinking text.&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=MegaZeux&amp;diff=6840</id>
		<title>MegaZeux</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=MegaZeux&amp;diff=6840"/>
		<updated>2009-06-14T23:33:57Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: Is it short enough now? I agree it was getting too long, so I split it into a separate page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MegaZeux''' is a game creation system created by [[Gregory Janson]]. It was inspired by [[ZZT]], for which Greg and other members of [[Software Visions]] had created several games beforehand. The first version, [[Changelog for 1.00g|1.00g]], was uploaded to AOL on December 4, 1994.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Robotic===&lt;br /&gt;
''See also: [[Robotic]]''&lt;br /&gt;
&lt;br /&gt;
Robotic is MegaZeux's object-oriented programming language. Some parts of the language, as well as the concept itself, are based on [[ZZT|ZZT's]] ZZT-OOP, though Robotic is much more advanced than ZZT-OOP.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
History of MZX's development.&lt;br /&gt;
===Shareware Versions===&lt;br /&gt;
&lt;br /&gt;
In 1994, MegaZeux 1.00g was released on AOL. It was designed to be an improvement over [[ZZT]], and at that point featured digital sound and music that could be played over Sound Blaster-compatible cards. It featured editable [[character set|character sets]] and larger board sizes than ZZT.&lt;br /&gt;
&lt;br /&gt;
Some time later, MegaZeux 2.00 was released, featuring a vast interface overhaul, the ability to edit the in-game palette, and other new features.&lt;br /&gt;
&lt;br /&gt;
Finally, MegaZeux 2.50 was uploaded, and among other changes, included the brand new [[BWSB]] sound engine that was more compatible and more tolerant of Windows. Shortly thereafter, version 2.51 was released, with minor bug fixes and additions. This would be the last version Gregory Janson would release.&lt;br /&gt;
&lt;br /&gt;
===Spider Versions===&lt;br /&gt;
After MegaZeux was released under the terms of the GNU GPL, [[Spider124]] updated the source code with several useful new features and released his own version of MegaZeux, 2.51s1. Among the new features were a vastly expanded counters limit (1000, compared to 2.51's 50 counters), true mouse support, [[playerx and playery|playerx/playery]] counters, and many bug fixes. Three more versions were released (s2, s3, and s3.1; of which 3.1 was a bug fix release) before development of MZX grew stagnant.&lt;br /&gt;
&lt;br /&gt;
[[MadBrain]] took the s3.1 source, added one new feature (the [[bi_mesg]] built-in counter) and removed password protection, releasing his modifications as MZX 2.51s3.2. s3.2 was further modified with the introduction of the [[Super MZX|SMZX]] graphics mode (this version was released as SMZX 100 Alpha).&lt;br /&gt;
&lt;br /&gt;
===MegaZeux 2.7 and mzxlib===&lt;br /&gt;
MZX 2.7 was an effort spearheaded by [[JZig]] to completely rewrite MegaZeux in C++, with a new graphics engine, audio code, and support for other operating systems such as Linux. Most of the initial coding was done by [[MenTaLguY]], until JZig took over in 1999. [[piman]], while not doing much coding himself, performed most of the non-code tasks such as updating the project's SourceForge page. JZig's development on MZX 2.7 stopped around 2001, and it was not picked up afterwards.&lt;br /&gt;
&lt;br /&gt;
===MZXak===&lt;br /&gt;
[[Akwende]] released the first MZXak version, MZXak 1.0, shortly after MadBrain's SMZX alpha version. MZXak featured several additional features (some of which, like the multi-colored configuration dialogs, were determined by the community to be too useless to warrant the memory usage) including file access, robot targeting, and built-in SMZX mode. All MZXak versions included Akwende's MZX version of Tetris, which demonstrated the use of SMZX graphics.&lt;br /&gt;
&lt;br /&gt;
MZXak 1.0 was pulled a few months after release from [[DigitalMZX]] due to Akwende's failure to release his source code under the terms of the GNU GPL. He eventually released the source, but not until a lot of public debate and heel-dragging. Other MZXak 1.0 controversy included forward compatibility, which led to MZXak games being playable but not necessarily functioning in MZX2.51s3.1. This broke [[ajs|wizdom's]] judging results in the [[Summer Dualstream Day of Zeux 2001|2001 DsDoZ]].&lt;br /&gt;
&lt;br /&gt;
MZXak 2.0 was released after much waiting, though the release sparked a fair bit of dispute due to the sudden timing with [[Koji|Koji's]] 2.60 release. MZXak 2.0 is notable for being the only code fork to completely die out.&lt;br /&gt;
&lt;br /&gt;
===Exophase Versions===&lt;br /&gt;
Following the discussions about MZXak, Koji released MZX 2.60, featuring some of the same additions as MZXak. 2.61 was released shortly after, and around 2.62's release, [[Exophase]] took over development of MegaZeux. Tons of features were added in between 2.62 and 2.70 (the last version of MegaZeux in [[DOS]]) such as [[Expression|expressions]], [[Sprite|sprites]], [[String|strings]], [[Vlayer|the vlayer]], [[MZM|MZMs]], [[Super MZX|SMZX Mode 2]], and many others.&lt;br /&gt;
&lt;br /&gt;
===MZX32===&lt;br /&gt;
During Exophase's development of MZX for DOS, [[BFeely]] began development on MZX32, which was to be a full-featured port of MegaZeux for the Windows platform. Several alpha versions were released, most of which lacked the world editor (and all of which lacked the robotic code editor). MZX32 was generally regarded as unstable and buggy, and was deemed obsolete once Exophase began work on his SDL port. The last version of MZX32 released featured support for games created using MZX 2.69c.&lt;br /&gt;
&lt;br /&gt;
===SDL Port===&lt;br /&gt;
&lt;br /&gt;
[[Exophase]] took most of the summer of 2004 to do a update/rewrite of MegaZeux into SDL, to break some DOS limitations and to solve MegaZeux's ever-increasing compatibility issues (and to eventually expand MegaZeux onto new platforms such as Linux and the Macintosh). This included re-writing the entire Robotic editor from scratch as source was no longer available for it. Many other source modules were either completely rewritten or heavily revised. After intense pre-testing, MZX 2.80 was released on Aug 9 2004, with workability only intended for Windows 32 platforms. A slew of bug reports that only arises from public testing shortly followed, and Exophase quickly updated with three incremental versions in one month which also officially added support for Linux and MacOS X. Other MegaZeuxers helped in various aspects; for example, [[ajs|ajs's]] and [[MadBrain|mad's]] GDM conversion code was a basis for SAM conversion code. Later on, ajs would write support to abstract file operations for case sensitive file systems, and additional graphical renderers were designed by [[LogiCow]] and [[Mr_Alert]].&lt;br /&gt;
&lt;br /&gt;
Most version upticks added some functionality (e.g. multi-char editor, code search, ogg support), and all significantly increased stability. MegaZeux is currently extending to handhelds and consoles: [[Oncer]] released a GP2X port, [[kvance]] a Nintendo DS port, Mr_Alert a Wii port, and Exophase has done preliminary PSP support.&lt;br /&gt;
&lt;br /&gt;
The current version is 2.82b.&lt;br /&gt;
&lt;br /&gt;
===MegaZeux Forks===&lt;br /&gt;
In early 2007, LogiCow created his own fork of the MZX source. The first version added the Draw command, allowing users to scale characters from the [[vlayer]]. It also served as an underlay (as opposed to an overlay). In more recent versions, the draw command was deleted. A select persisted in using the older versions for the draw command, much to the annoyance of those wishing to stay with Exophase's versions.&lt;br /&gt;
&lt;br /&gt;
A short time after the previous fork, LogiCow created another fork with an alternate renderer that scaled the graphics up to fit the screen, regardless of aspect ratio. This also allowed for seamless resizing of the MZX window when not running in full screen mode. logicow worked with ajs to merge these renderers into the mainline MZX versions, starting with 2.81e.&lt;br /&gt;
&lt;br /&gt;
LogiCow's final fork of MZX (based off of 2.81g) was solely to play [[Caverns of Zeux]] with enhanced graphics.&lt;br /&gt;
&lt;br /&gt;
LogiCow was not the only person to fork MZX; [[NihilistMatt]] created a fork called [[SquareMZX]]. SquareMZX knocked the resolution per-character to 8x8, but allowed a &amp;quot;quadrant&amp;quot; coloring system where each 2x2 section of any character can have its own color pair. This fork got very minor use; [[PROcrastination]] and the second [[RPG Skool Demo]] both could optionally use SquareMZX mode.&lt;br /&gt;
&lt;br /&gt;
[[zzo38]] is also desperately trying to make people care about his MZX fork. His version focuses on changes and &amp;quot;improvements&amp;quot; that are generally only of interest to him, including support for [http://en.wikipedia.org/wiki/Forth_(programming_language) Forth], [[PZX features|and various other things]]. He also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.  Despite the fact that zzo38 (and possibly [[smilymzx]], with his fixation on blinking text) is the only person who actually cares about any of these changes, zzo still claims to be working on it and released an initial version of it.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[https://sourceforge.net/projects/mzx32 MZX32 Project Page (Sourceforge)]&lt;br /&gt;
*[http://mzx.devzero.co.uk/ The MegaZeux Developer Site]&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=MegaZeux&amp;diff=6834</id>
		<title>MegaZeux</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=MegaZeux&amp;diff=6834"/>
		<updated>2009-06-14T16:57:09Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: zzo38 fork&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MegaZeux''' is a game creation system created by [[Gregory Janson]]. It was inspired by [[ZZT]], for which Greg and other members of [[Software Visions]] had created several games beforehand. The first version, [[Changelog for 1.00g|1.00g]], was uploaded to AOL on December 4, 1994.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Robotic===&lt;br /&gt;
''See also: [[Robotic]]''&lt;br /&gt;
&lt;br /&gt;
Robotic is MegaZeux's object-oriented programming language. Some parts of the language, as well as the concept itself, are based on [[ZZT|ZZT's]] ZZT-OOP, though Robotic is much more advanced than ZZT-OOP.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
History of MZX's development.&lt;br /&gt;
===Shareware Versions===&lt;br /&gt;
&lt;br /&gt;
In 1994, MegaZeux 1.00g was released on AOL. It was designed to be an improvement over [[ZZT]], and at that point featured digital sound and music that could be played over Sound Blaster-compatible cards. It featured editable [[character set|character sets]] and larger board sizes than ZZT.&lt;br /&gt;
&lt;br /&gt;
Some time later, MegaZeux 2.00 was released, featuring a vast interface overhaul, the ability to edit the in-game palette, and other new features.&lt;br /&gt;
&lt;br /&gt;
Finally, MegaZeux 2.50 was uploaded, and among other changes, included the brand new [[BWSB]] sound engine that was more compatible and more tolerant of Windows. Shortly thereafter, version 2.51 was released, with minor bug fixes and additions. This would be the last version Gregory Janson would release.&lt;br /&gt;
&lt;br /&gt;
===Spider Versions===&lt;br /&gt;
After MegaZeux was released under the terms of the GNU GPL, [[Spider124]] updated the source code with several useful new features and released his own version of MegaZeux, 2.51s1. Among the new features were a vastly expanded counters limit (1000, compared to 2.51's 50 counters), true mouse support, [[playerx and playery|playerx/playery]] counters, and many bug fixes. Three more versions were released (s2, s3, and s3.1; of which 3.1 was a bug fix release) before development of MZX grew stagnant.&lt;br /&gt;
&lt;br /&gt;
[[MadBrain]] took the s3.1 source, added one new feature (the [[bi_mesg]] built-in counter) and removed password protection, releasing his modifications as MZX 2.51s3.2. s3.2 was further modified with the introduction of the [[Super MZX|SMZX]] graphics mode (this version was released as SMZX 100 Alpha).&lt;br /&gt;
&lt;br /&gt;
===MegaZeux 2.7 and mzxlib===&lt;br /&gt;
MZX 2.7 was an effort spearheaded by [[JZig]] to completely rewrite MegaZeux in C++, with a new graphics engine, audio code, and support for other operating systems such as Linux. Most of the initial coding was done by [[MenTaLguY]], until JZig took over in 1999. [[piman]], while not doing much coding himself, performed most of the non-code tasks such as updating the project's SourceForge page. JZig's development on MZX 2.7 stopped around 2001, and it was not picked up afterwards.&lt;br /&gt;
&lt;br /&gt;
===MZXak===&lt;br /&gt;
[[Akwende]] released the first MZXak version, MZXak 1.0, shortly after MadBrain's SMZX alpha version. MZXak featured several additional features (some of which, like the multi-colored configuration dialogs, were determined by the community to be too useless to warrant the memory usage) including file access, robot targeting, and built-in SMZX mode. All MZXak versions included Akwende's MZX version of Tetris, which demonstrated the use of SMZX graphics.&lt;br /&gt;
&lt;br /&gt;
MZXak 1.0 was pulled a few months after release from [[DigitalMZX]] due to Akwende's failure to release his source code under the terms of the GNU GPL. He eventually released the source, but not until a lot of public debate and heel-dragging. Other MZXak 1.0 controversy included forward compatibility, which led to MZXak games being playable but not necessarily functioning in MZX2.51s3.1. This broke [[ajs|wizdom's]] judging results in the [[Summer Dualstream Day of Zeux 2001|2001 DsDoZ]].&lt;br /&gt;
&lt;br /&gt;
MZXak 2.0 was released after much waiting, though the release sparked a fair bit of dispute due to the sudden timing with [[Koji|Koji's]] 2.60 release. MZXak 2.0 is notable for being the only code fork to completely die out.&lt;br /&gt;
&lt;br /&gt;
===Exophase Versions===&lt;br /&gt;
Following the discussions about MZXak, Koji released MZX 2.60, featuring some of the same additions as MZXak. 2.61 was released shortly after, and around 2.62's release, [[Exophase]] took over development of MegaZeux. Tons of features were added in between 2.62 and 2.70 (the last version of MegaZeux in [[DOS]]) such as [[Expression|expressions]], [[Sprite|sprites]], [[String|strings]], [[Vlayer|the vlayer]], [[MZM|MZMs]], [[Super MZX|SMZX Mode 2]], and many others.&lt;br /&gt;
&lt;br /&gt;
===MZX32===&lt;br /&gt;
During Exophase's development of MZX for DOS, [[BFeely]] began development on MZX32, which was to be a full-featured port of MegaZeux for the Windows platform. Several alpha versions were released, most of which lacked the world editor (and all of which lacked the robotic code editor). MZX32 was generally regarded as unstable and buggy, and was deemed obsolete once Exophase began work on his SDL port. The last version of MZX32 released featured support for games created using MZX 2.69c.&lt;br /&gt;
&lt;br /&gt;
===SDL Port===&lt;br /&gt;
&lt;br /&gt;
[[Exophase]] took most of the summer of 2004 to do a update/rewrite of MegaZeux into SDL, to break some DOS limitations and to solve MegaZeux's ever-increasing compatibility issues (and to eventually expand MegaZeux onto new platforms such as Linux and the Macintosh). This included re-writing the entire Robotic editor from scratch as source was no longer available for it. Many other source modules were either completely rewritten or heavily revised. After intense pre-testing, MZX 2.80 was released on Aug 9 2004, with workability only intended for Windows 32 platforms. A slew of bug reports that only arises from public testing shortly followed, and Exophase quickly updated with three incremental versions in one month which also officially added support for Linux and MacOS X. Other MegaZeuxers helped in various aspects; for example, [[ajs|ajs's]] and [[MadBrain|mad's]] GDM conversion code was a basis for SAM conversion code. Later on, ajs would write support to abstract file operations for case sensitive file systems, and additional graphical renderers were designed by [[LogiCow]] and [[Mr_Alert]].&lt;br /&gt;
&lt;br /&gt;
Most version upticks added some functionality (e.g. multi-char editor, code search, ogg support), and all significantly increased stability. MegaZeux is currently extending to handhelds and consoles: [[Oncer]] released a GP2X port, [[kvance]] a Nintendo DS port, Mr_Alert a Wii port, and Exophase has done preliminary PSP support.&lt;br /&gt;
&lt;br /&gt;
The current version is 2.82b.&lt;br /&gt;
&lt;br /&gt;
===MegaZeux Forks===&lt;br /&gt;
In early 2007, LogiCow created his own fork of the MZX source. The first version added the Draw command, allowing users to scale characters from the [[vlayer]]. It also served as an underlay (as opposed to an overlay). In more recent versions, the draw command was deleted. A select persisted in using the older versions for the draw command, much to the annoyance of those wishing to stay with Exophase's versions.&lt;br /&gt;
&lt;br /&gt;
A short time after the previous fork, LogiCow created another fork with an alternate renderer that scaled the graphics up to fit the screen, regardless of aspect ratio. This also allowed for seamless resizing of the MZX window when not running in full screen mode. logicow worked with ajs to merge these renderers into the mainline MZX versions, starting with 2.81e.&lt;br /&gt;
&lt;br /&gt;
LogiCow's final fork of MZX (based off of 2.81g) was solely to play [[Caverns of Zeux]] with enhanced graphics.&lt;br /&gt;
&lt;br /&gt;
LogiCow was not the only person to fork MZX; [[NihilistMatt]] created a fork called [[SquareMZX]]. SquareMZX knocked the resolution per-character to 8x8, but allowed a &amp;quot;quadrant&amp;quot; coloring system where each 2x2 section of any character can have its own color pair. This fork got very minor use; [[PROcrastination]] and the second [[RPG Skool Demo]] both could optionally use SquareMZX mode.&lt;br /&gt;
&lt;br /&gt;
[[zzo38]] is also desperately trying to make people care about his MZX fork. His version focuses on changes and &amp;quot;improvements&amp;quot; that are generally only of interest to him, including support for Forth, the ability to use the old ALT+D function in the editor (only zzo38 seems to remember what this is or use the function to begin with), [[deferred expressions]], [[extended kinds]], new overlay modes (including the ability to draw overlays on the outside of the viewport instead of inside, and the ability to hide the board and draw only the overlay) and SMZX modes (including a 16-color per character mode and a blinking text mode), and displacement overlay modes which allow adjustment of the overlay by individual pixels. He also corrected a long standing, esoteric bug in the handling of built-in spider webs, which has been merged (with changes) into the existing codebase.  Despite the fact that zzo38 is the only person who actually cares about any of these changes, and that very little actual work has been seen, zzo still claims to be working on it and released version P1 at http://zzo38computer.cjb.net/mzx1/mzx_extended/ but it has some bugs, so version P2 will fix those bugs and add more features.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[https://sourceforge.net/projects/mzx32 MZX32 Project Page (Sourceforge)]&lt;br /&gt;
*[http://mzx.devzero.co.uk/ The MegaZeux Developer Site]&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=MegaZeux&amp;diff=6829</id>
		<title>MegaZeux</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=MegaZeux&amp;diff=6829"/>
		<updated>2009-06-12T13:49:14Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: zzo38 is also fork MZX.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MegaZeux''' is a game creation system created by [[Gregory Janson]]. It was inspired by [[ZZT]], for which Greg and other members of [[Software Visions]] had created several games beforehand. The first version, [[Changelog for 1.00g|1.00g]], was uploaded to AOL on December 4, 1994.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Robotic===&lt;br /&gt;
''See also: [[Robotic]]''&lt;br /&gt;
&lt;br /&gt;
Robotic is MegaZeux's object-oriented programming language. Some parts of the language, as well as the concept itself, are based on [[ZZT|ZZT's]] ZZT-OOP, though Robotic is much more advanced than ZZT-OOP.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
History of MZX's development.&lt;br /&gt;
===Shareware Versions===&lt;br /&gt;
&lt;br /&gt;
In 1994, MegaZeux 1.00g was released on AOL. It was designed to be an improvement over [[ZZT]], and at that point featured digital sound and music that could be played over Sound Blaster-compatible cards. It featured editable [[character set|character sets]] and larger board sizes than ZZT.&lt;br /&gt;
&lt;br /&gt;
Some time later, MegaZeux 2.00 was released, featuring a vast interface overhaul, the ability to edit the in-game palette, and other new features.&lt;br /&gt;
&lt;br /&gt;
Finally, MegaZeux 2.50 was uploaded, and among other changes, included the brand new [[BWSB]] sound engine that was more compatible and more tolerant of Windows. Shortly thereafter, version 2.51 was released, with minor bug fixes and additions. This would be the last version Gregory Janson would release.&lt;br /&gt;
&lt;br /&gt;
===Spider Versions===&lt;br /&gt;
After MegaZeux was released under the terms of the GNU GPL, [[Spider124]] updated the source code with several useful new features and released his own version of MegaZeux, 2.51s1. Among the new features were a vastly expanded counters limit (1000, compared to 2.51's 50 counters), true mouse support, [[playerx and playery|playerx/playery]] counters, and many bug fixes. Three more versions were released (s2, s3, and s3.1; of which 3.1 was a bug fix release) before development of MZX grew stagnant.&lt;br /&gt;
&lt;br /&gt;
[[MadBrain]] took the s3.1 source, added one new feature (the [[bi_mesg]] built-in counter) and removed password protection, releasing his modifications as MZX 2.51s3.2. s3.2 was further modified with the introduction of the [[Super MZX|SMZX]] graphics mode (this version was released as SMZX 100 Alpha).&lt;br /&gt;
&lt;br /&gt;
===MegaZeux 2.7 and mzxlib===&lt;br /&gt;
MZX 2.7 was an effort spearheaded by [[JZig]] to completely rewrite MegaZeux in C++, with a new graphics engine, audio code, and support for other operating systems such as Linux. Most of the initial coding was done by [[MenTaLguY]], until JZig took over in 1999. [[piman]], while not doing much coding himself, performed most of the non-code tasks such as updating the project's SourceForge page. JZig's development on MZX 2.7 stopped around 2001, and it was not picked up afterwards.&lt;br /&gt;
&lt;br /&gt;
===MZXak===&lt;br /&gt;
[[Akwende]] released the first MZXak version, MZXak 1.0, shortly after MadBrain's SMZX alpha version. MZXak featured several additional features (some of which, like the multi-colored configuration dialogs, were determined by the community to be too useless to warrant the memory usage) including file access, robot targeting, and built-in SMZX mode. All MZXak versions included Akwende's MZX version of Tetris, which demonstrated the use of SMZX graphics.&lt;br /&gt;
&lt;br /&gt;
MZXak 1.0 was pulled a few months after release from [[DigitalMZX]] due to Akwende's failure to release his source code under the terms of the GNU GPL. He eventually released the source, but not until a lot of public debate and heel-dragging. Other MZXak 1.0 controversy included forward compatibility, which led to MZXak games being playable but not necessarily functioning in MZX2.51s3.1. This broke [[ajs|wizdom's]] judging results in the [[Summer Dualstream Day of Zeux 2001|2001 DsDoZ]].&lt;br /&gt;
&lt;br /&gt;
MZXak 2.0 was released after much waiting, though the release sparked a fair bit of dispute due to the sudden timing with [[Koji|Koji's]] 2.60 release. MZXak 2.0 is notable for being the only code fork to completely die out.&lt;br /&gt;
&lt;br /&gt;
===Exophase Versions===&lt;br /&gt;
Following the discussions about MZXak, Koji released MZX 2.60, featuring some of the same additions as MZXak. 2.61 was released shortly after, and around 2.62's release, [[Exophase]] took over development of MegaZeux. Tons of features were added in between 2.62 and 2.70 (the last version of MegaZeux in [[DOS]]) such as [[Expression|expressions]], [[Sprite|sprites]], [[String|strings]], [[Vlayer|the vlayer]], [[MZM|MZMs]], [[Super MZX|SMZX Mode 2]], and many others.&lt;br /&gt;
&lt;br /&gt;
===MZX32===&lt;br /&gt;
During Exophase's development of MZX for DOS, [[BFeely]] began development on MZX32, which was to be a full-featured port of MegaZeux for the Windows platform. Several alpha versions were released, most of which lacked the world editor (and all of which lacked the robotic code editor). MZX32 was generally regarded as unstable and buggy, and was deemed obsolete once Exophase began work on his SDL port. The last version of MZX32 released featured support for games created using MZX 2.69c.&lt;br /&gt;
&lt;br /&gt;
===SDL Port===&lt;br /&gt;
&lt;br /&gt;
[[Exophase]] took most of the summer of 2004 to do a update/rewrite of MegaZeux into SDL, to break some DOS limitations and to solve MegaZeux's ever-increasing compatibility issues (and to eventually expand MegaZeux onto new platforms such as Linux and the Macintosh). This included re-writing the entire Robotic editor from scratch as source was no longer available for it. Many other source modules were either completely rewritten or heavily revised. After intense pre-testing, MZX 2.80 was released on Aug 9 2004, with workability only intended for Windows 32 platforms. A slew of bug reports that only arises from public testing shortly followed, and Exophase quickly updated with three incremental versions in one month which also officially added support for Linux and MacOS X. Other MegaZeuxers helped in various aspects; for example, [[ajs|ajs's]] and [[MadBrain|mad's]] GDM conversion code was a basis for SAM conversion code. Later on, ajs would write support to abstract file operations for case sensitive file systems, and additional graphical renderers were designed by [[LogiCow]] and [[Mr_Alert]].&lt;br /&gt;
&lt;br /&gt;
Most version upticks added some functionality (e.g. multi-char editor, code search, ogg support), and all significantly increased stability. MegaZeux is currently extending to handhelds and consoles: [[Oncer]] released a GP2X port, [[kvance]] a Nintendo DS port, Mr_Alert a Wii port, and Exophase has done preliminary PSP support.&lt;br /&gt;
&lt;br /&gt;
The current version is 2.82b.&lt;br /&gt;
&lt;br /&gt;
===MegaZeux Forks===&lt;br /&gt;
In early 2007, LogiCow created his own fork of the MZX source. The first version added the Draw command, allowing users to scale characters from the [[vlayer]]. It also served as an underlay (as opposed to an overlay). In more recent versions, the draw command was deleted. A select persisted in using the older versions for the draw command, much to the annoyance of those wishing to stay with Exophase's versions.&lt;br /&gt;
&lt;br /&gt;
A short time after the previous fork, LogiCow created another fork with an alternate renderer that scaled the graphics up to fit the screen, regardless of aspect ratio. This also allowed for seamless resizing of the MZX window when not running in full screen mode. logicow worked with ajs to merge these renderers into the mainline MZX versions, starting with 2.81e.&lt;br /&gt;
&lt;br /&gt;
LogiCow's final fork of MZX (based off of 2.81g) was solely to play [[Caverns of Zeux]] with enhanced graphics.&lt;br /&gt;
&lt;br /&gt;
LogiCow was not the only person to fork MZX; [[NihilistMatt]] created a fork called [[SquareMZX]]. SquareMZX knocked the resolution per-character to 8x8, but allowed a &amp;quot;quadrant&amp;quot; coloring system where each 2x2 section of any character can have its own color pair. This fork got very minor use; [[PROcrastination]] and the second [[RPG Skool Demo]] both could optionally use SquareMZX mode.&lt;br /&gt;
&lt;br /&gt;
[[zzo38]] is also fork MZX. Version number is 2.82bP1. This version includes support for Forth codes, ability to use the old ALT+D function in the editor, deferred expressions, extended kinds, new overlay modes and SMZX modes, and displacement overlay modes which allow adjustment of overlay by individual pixels. Also the spider-webs bug is fixed. This fork version has not been seen in a while, but actually it is still getting worked on.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[https://sourceforge.net/projects/mzx32 MZX32 Project Page (Sourceforge)]&lt;br /&gt;
*[http://mzx.devzero.co.uk/ The MegaZeux Developer Site]&lt;br /&gt;
&lt;br /&gt;
[[Category:MegaZeux]]&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=6802</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=6802"/>
		<updated>2009-05-23T12:30:40Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/wiki/User_talk:Zzo38] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]].&lt;br /&gt;
&lt;br /&gt;
Recently, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games and Forth codes.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://zzo38computer.cjb.net/ ZZO38COMPUTER]&lt;br /&gt;
*[http://zzo38computer.cjb.net/wiki/ ZZO38COMPUTER Wiki]&lt;br /&gt;
*[http://zzo38computer.cjb.net/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=6793</id>
		<title>Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Zzo38&amp;diff=6793"/>
		<updated>2009-04-27T16:44:40Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''zzo38''' is something of an enigma to the community. Nobody is quite sure if they are a real person or the [[Identity deception|alternative account]] of somebody else, and there doesn't seem to be any evidence pointing in either direction. Typical characteristics of &amp;quot;classic&amp;quot; zzo38 include horribly broken English such as &amp;quot;Old mesiges ar being crosed out.&amp;quot;[http://en.wikipedia.org/wiki/User_talk:Zzo38] and &amp;quot;I think I like the old un-frenly serch more beter.&amp;quot; [http://www.digitalmzx.net/forums/index.php?s=&amp;amp;showtopic=6023&amp;amp;view=findpost&amp;amp;p=77256] and a general lack of effort in things that he does, though that seems to be quite a different story when looking at his more recent activities. (There is some speculation that the &amp;quot;classic&amp;quot; zzo38 may be a joke, a conspiracy, or a different person. But a few of the old stuff is still on the same web-site, so we cannot be exactly sure.)&lt;br /&gt;
&lt;br /&gt;
zzo38 released several ZZT and MZX games, including [[Cooking Game]].&lt;br /&gt;
&lt;br /&gt;
Recently, zzo has reappeared on the DigitalMZX forums with vastly improved grammar and an apparent fascination with Mahjong games.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://zzo38computer.cjb.net/ ZZO38COMPUTER]&lt;br /&gt;
*[http://zzo38computer.cjb.net/wiki/ ZZO38COMPUTER Wiki]&lt;br /&gt;
*[http://zzo38computer.cjb.net/mzx1/ MegaZeux games]&lt;br /&gt;
&lt;br /&gt;
{{WeaselStub}}&lt;br /&gt;
{{NeedsPeerReview}}&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
	<entry>
		<id>https://www.digitalmzx.com/wiki/index.php?title=Talk:Zzo38&amp;diff=5882</id>
		<title>Talk:Zzo38</title>
		<link rel="alternate" type="text/html" href="https://www.digitalmzx.com/wiki/index.php?title=Talk:Zzo38&amp;diff=5882"/>
		<updated>2008-05-17T18:13:51Z</updated>

		<summary type="html">&lt;p&gt;Zzo38: New page: I do not remember many of the old things described there before, and even I am unsure of the validity (or alternate account). Anyways, now I am a real person for sure, and once you have mo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I do not remember many of the old things described there before, and even I am unsure of the validity (or alternate account). Anyways, now I am a real person for sure, and once you have more information, you can make it into 2 sections, &amp;quot;Old zzo38&amp;quot; section and &amp;quot;New zzo38&amp;quot; section (if that is sensible). I have nothing to post here yet (at least I have nothing related to MZX at this time). I am really zzo38 for sure though, you can prove it by telling me the number and I will make a page with that number on my web-site so that you can check if it is valid or not. --[[User:Zzo38|Zzo38]] 11:13, 17 May 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Zzo38</name></author>
	</entry>
</feed>