<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://keenwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lemm</id>
	<title>KeenWiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://keenwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lemm"/>
	<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/wiki/Special:Contributions/Lemm"/>
	<updated>2026-04-14T17:40:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Terminator_text&amp;diff=30519</id>
		<title>Patch:Terminator text</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Terminator_text&amp;diff=30519"/>
		<updated>2016-07-15T16:05:29Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Explained terminator screen operation in more detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;quot;terminator text&amp;quot; is side-scrolling text that appears at the start of the Keen Galaxy games, along with several credits images. In reality, it is composed of two translucent monochrome images. The images themselves can be exported and imported with [[Keengraph]]. This sequence uses a different palette from the usual game, which alters the colors of various images, mostly for the interesting effects as the two images pass each other.&lt;br /&gt;
&lt;br /&gt;
There are two palettes, one for as the &amp;quot;text&amp;quot; scrolls, the other for when the image &amp;quot;moves out&amp;quot; and becomes the title of the [[Patch:Title screen|titlescreen]] bitmap. For the scrolling text segment, the EGA graphics planes are divided up between the two horizontally scrolling monochrome images (i.e., &amp;quot;COMMANDER&amp;quot; and &amp;quot;KEEN&amp;quot;) and the vertically scrolling credit pictures, as follows: the KEEN graphic is drawn into plane 0, the COMMANDER graphic into plane 1, and the vertically scrolling credit images into planes 2 and 3.  By setting registers on the EGA that only allow drawing to select planes at a time, the game can update one component of the scrolling screen without disturbing the other two.  Thus, by default, the palettes are set so that the vertically scrolling credit images can only have three completely opaque colors, and one completely transparent color (i.e., both planes 2 and 3 are zero).  This leaves four colors that can be created from all the combinations of the two planes dedicated to the horizontally scrolling images (because 2^2 = 4): COMMANDER and KEEN can both have a unique color, as can their union and the backdrop.  Hence, seven colours can be shown at once, if vertically scrolling images are not to have any translucence.&lt;br /&gt;
&lt;br /&gt;
See [[Patch:Palette]] for more details.&lt;br /&gt;
&lt;br /&gt;
It is possible to make either or both of the scrolling images not appear, as well as change what graphic chunks are used for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Disable entire sequence =&lt;br /&gt;
&lt;br /&gt;
This disables the Terminator text entirely, but as a side effect also removes the title screen. The game will go directly to the first demo instead. To simply disable a specific graphic see the &#039;images section below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Disable Terminator sequence and title screen (Frees $4E9F-$51B7)&lt;br /&gt;
%patch $3C26 $90 $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Go straight to title screen or help ==&lt;br /&gt;
&lt;br /&gt;
The first set of patches in this section skips the credit bitmaps sequence and instead goes straight to the [[Patch:Title screen|title screen]] appearing. Changing the blue value to $003BW will cause the terminator sequence to go straight to the [[Patch:Computer Wrist|help screen]] instead.&lt;br /&gt;
&lt;br /&gt;
The second set of patches goes to he title zoom sequence, just before the title screen. (The terminator chunks do appear briefly but can be totally removed by altering their graphics to be totally black.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Skip terminator sequence, go straight to title&amp;quot;&amp;gt;&lt;br /&gt;
#Terminator sequence goes straight to title - Keen 4&lt;br /&gt;
%patch $50ED $A545W [$001CW]&lt;br /&gt;
&lt;br /&gt;
#Terminator sequence goes straight to title - Keen 5&lt;br /&gt;
%patch $50E7 $9BADW [$001CW]&lt;br /&gt;
&lt;br /&gt;
#Terminator sequence goes straight to title - Keen 6&lt;br /&gt;
%patch $4F08 $A6D3W [$001CW]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Skip terminator sequence, go straight to title zoom&amp;quot;&amp;gt;&lt;br /&gt;
#Skip terminator sequence, go straight to title zoom -Keen 4&lt;br /&gt;
%patch $50F1 $90 $90 $90 $90&lt;br /&gt;
&lt;br /&gt;
#Skip terminator sequence, go straight to title zoom -Keen 5&lt;br /&gt;
%patch $50EB $90 $90 $90 $90&lt;br /&gt;
&lt;br /&gt;
#Skip terminator sequence, go straight to title zoom -Keen 6&lt;br /&gt;
%patch $4F0C $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Replace Terminator Text with another action ==&lt;br /&gt;
&lt;br /&gt;
This is the [[Patch:Main menu|Main menu actions list,]] a list of various things the game does at the [[Patch:Main menu|main menu.]] By simply swapping various pointers around it is possible to change the order that various actions appear or replace one action with another. A novel option is to replace the terminator text with the [[Patch:Story Screen (Galaxy)|star wars story]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Main menu actions list&lt;br /&gt;
%patch $3CB9 {$0448W} #3C18: Terminator sequence and title screen&lt;br /&gt;
             {$045FW} #3C2F: Demo 1&lt;br /&gt;
             {$046CW} #3C3C: Star wars story&lt;br /&gt;
             {$0473W} #3C43: Demo 2&lt;br /&gt;
             {$0481W} #3C51: High score demo&lt;br /&gt;
             {$0488W} #3C58: Demo 3&lt;br /&gt;
             {$0496W} #3C66: Demo 4&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Palettes =&lt;br /&gt;
&lt;br /&gt;
These govern how the images are colored. Notice that the 16 EGA entries have only 6 colors in them. This is because all the images displayed are transparent, meaning things look very unusual if 16 colors are used. Care has to be taken when altering the palette colors. The 2nd, 3rd and 4th entries determine the color of the &#039;COMMANDER KEEN&#039; images.&lt;br /&gt;
&lt;br /&gt;
The following table shows are what colors each value is:&lt;br /&gt;
&lt;br /&gt;
 $1F, white       $1E, yellow       $1D, light purple  $1C, light red&lt;br /&gt;
 $1B, light teal  $1A, light green  $19, light blue    $18, dark grey (light black)&lt;br /&gt;
 $17, white       $16, yellow       $15, light purple  $14, light red&lt;br /&gt;
 $13, light teal  $12, light green  $11, light blue    $10, dark grey (light black)&lt;br /&gt;
 $0F, light grey  $0E, brown        $0D, dark purple   $0C, dark red&lt;br /&gt;
 $0B, dark teal   $0A, dark green   $09, dark blue     $08, black&lt;br /&gt;
 $07, light grey  $06, brown        $05, dark purple   $04, dark red&lt;br /&gt;
 $03, dark teal   $02, dark green   $01, dark blue     $00, black&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Palettes called from:&lt;br /&gt;
%patch $50B5 [$0218W]&lt;br /&gt;
%patch $50B8 [$0229W]&lt;br /&gt;
&lt;br /&gt;
#Terminator text palette:&lt;br /&gt;
%patch $2F078 $00 $18 $18 $07 $01 $01 $01 $01     #Dark colors&lt;br /&gt;
              $11 $11 $11 $11 $13 $13 $13 $13 $00 #Light colors (and border color)&lt;br /&gt;
&lt;br /&gt;
#Terminator text palette 2, screen moves out:&lt;br /&gt;
%patch $2F099 $00 $18 $18 $07 $01 $01 $01 $01     #Dark colors&lt;br /&gt;
              $11 $11 $11 $11 $13 $13 $13 $18 $00 #Light colors (and border color)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 5&amp;quot;&amp;gt;&lt;br /&gt;
#Terminator text palette:&lt;br /&gt;
%patch $304F8 $00 $04 $04 $1C $01 $01 $01 $01     #Dark colors&lt;br /&gt;
              $11 $11 $11 $11 $13 $13 $13 $13 $00 #Light colors (and border color)&lt;br /&gt;
&lt;br /&gt;
#Terminator text palette 2, screen moves out:&lt;br /&gt;
%patch $30509 $00 $04 $04 $1C $01 $01 $01 $01     #Dark colors&lt;br /&gt;
              $11 $11 $11 $11 $13 $13 $13 $04 $00 #Light colors (and border color)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 6&amp;quot;&amp;gt;&lt;br /&gt;
#Terminator text palette:&lt;br /&gt;
%patch $30E7C $00 $05 $05 $15 $01 $01 $01 $01     #Dark colors&lt;br /&gt;
              $11 $11 $11 $11 $13 $13 $13 $13 $00 #Light colors (and border color)&lt;br /&gt;
&lt;br /&gt;
#Terminator text palette 2, screen moves out:&lt;br /&gt;
%patch $30E8D $00 $05 $05 $15 $01 $01 $01 $01     #Dark colors&lt;br /&gt;
              $11 $11 $11 $11 $13 $13 $13 $05 $00 #Light colors (and border color)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= COMMANDER + KEEN images =&lt;br /&gt;
&lt;br /&gt;
These are the &#039;COMMANDER KEEN&#039; images that move past each other, they are in the same plane, behind the credit bitmaps. The values for what is used is the [[Patch:EGAGRAPH|chunk number,]] (properly labelled by [[Keengraph]], [[ModKeen]] does not extract the chunk properly and labels it differently.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Terminator chunks:&lt;br /&gt;
%patch $4EE8 $1281W #COMMANDER&lt;br /&gt;
%patch $4EF4 $1280W #KEEN&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t show COMMANDER + KEEN images ==&lt;br /&gt;
&lt;br /&gt;
This is an alternate and more stable version of the patch above which allows the modder to selectively remove one or both of the terminator images. Note that disabling both images also frees $4571-$459E.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Don&#039;t display &#039;KEEN&#039; (Free $4F59-$4F9F)&lt;br /&gt;
%patch $4F56 $E9 $0046W &lt;br /&gt;
&lt;br /&gt;
#Don&#039;t display &#039;COMMANDER&#039; (Free $504D-$5075)&lt;br /&gt;
%patch $504A $E9 $0028W&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Credit bitmaps =&lt;br /&gt;
&lt;br /&gt;
These are the images crediting the game team that appear over the terminator text images for specific periods of time. They are read from a [[Patch:Text patches|pointer list]] whose pointer is stored elsewhere in the code. It is possible to change the number of iamges shown. (Less is simple, more becomes more difficult as there is only a limited time to display images.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Bitmap list:&lt;br /&gt;
%patch $3F46 [$0200W] #Location&lt;br /&gt;
%patch $50E0 [$04]    #Number of bitmaps to show 1&lt;br /&gt;
%patch $5113 [$04]    #Number of bitmaps to show 2&lt;br /&gt;
&lt;br /&gt;
#Credit bitmaps:&lt;br /&gt;
%patch $2F070 $0068W&lt;br /&gt;
              $0069W&lt;br /&gt;
              $006AW&lt;br /&gt;
              $006BW&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 5&amp;quot;&amp;gt;&lt;br /&gt;
#Bitmap list:&lt;br /&gt;
%patch $3F40 [$01B0W] #Location&lt;br /&gt;
%patch $50DA [$04]    #Number of bitmaps to show 1&lt;br /&gt;
%patch $510D [$04]    #Number of bitmaps to show 2&lt;br /&gt;
&lt;br /&gt;
#Credit bitmaps:&lt;br /&gt;
%patch $304F0 $0053W&lt;br /&gt;
              $0054W&lt;br /&gt;
              $0055W&lt;br /&gt;
              $0056W&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 6&amp;quot;&amp;gt;&lt;br /&gt;
#Bitmap list:&lt;br /&gt;
%patch $3D61 [$0144W] #Location&lt;br /&gt;
%patch $4EFB [$04]    #Number of bitmaps to show 1&lt;br /&gt;
%patch $4F2E [$04]    #Number of bitmaps to show 2&lt;br /&gt;
&lt;br /&gt;
#Credit bitmaps:&lt;br /&gt;
%patch $30E74 $001DW&lt;br /&gt;
              $001EW&lt;br /&gt;
              $001FW&lt;br /&gt;
              $0020W&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t display credits ==&lt;br /&gt;
&lt;br /&gt;
This patch completely removes the credit bitmaps, skipping the code block entirely.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Don&#039;t display credit bitmaps in terminator sequence (Keen 4; frees $4007-$41A7)&lt;br /&gt;
%patch $4006 $CB&lt;br /&gt;
&lt;br /&gt;
#Don&#039;t display credit bitmaps in terminator sequence (Keen 5; frees $4001-$41A1)&lt;br /&gt;
%patch $4000 $CB&lt;br /&gt;
&lt;br /&gt;
#Don&#039;t display credit bitmaps in terminator sequence (Keen 6; frees $3E21-$3FC1)&lt;br /&gt;
%patch $3E21 $CB&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits horizontal position ==&lt;br /&gt;
&lt;br /&gt;
This patch changes the horizontal position of the credit images. by default this is right in the middle of the screen, but it needs to be made less if the images are wider.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Credit images horizontal position&amp;quot;&amp;gt;&lt;br /&gt;
#Credit images horizontal position -Keen 4&lt;br /&gt;
%patch $402C [$0014W]&lt;br /&gt;
&lt;br /&gt;
#Credit images horizontal position -Keen 5&lt;br /&gt;
%patch $4026 [$0014W]&lt;br /&gt;
&lt;br /&gt;
#Credit images horizontal position -Keen 6&lt;br /&gt;
%patch $3E47 [$0014W]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits sitting time ==&lt;br /&gt;
&lt;br /&gt;
This patch changes how long the credit images sit still for before moving up. If very small the images will just keep moving up th screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Credit images horizontal position&amp;quot;&amp;gt;&lt;br /&gt;
#Credit images sitting time -Keen 4&lt;br /&gt;
%patch $424F [$00C8W]&lt;br /&gt;
&lt;br /&gt;
#Credit images sitting time -Keen 5&lt;br /&gt;
%patch $4249 [$00C8W]&lt;br /&gt;
&lt;br /&gt;
#Credit images sitting time -Keen 6&lt;br /&gt;
%patch $406A [$00C8W]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits wobble ==&lt;br /&gt;
&lt;br /&gt;
This patch causes the credit images to &#039;wobble&#039; back and forth once they rise into position.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Credit images wobble&amp;quot;&amp;gt;&lt;br /&gt;
#Credit images wobble -Keen 4&lt;br /&gt;
%patch $4012 $0005W&lt;br /&gt;
&lt;br /&gt;
#Credit images wobble -Keen 5&lt;br /&gt;
%patch $400C $0005W&lt;br /&gt;
&lt;br /&gt;
#Credit images wobble -Keen 6&lt;br /&gt;
%patch $3E2D $0005W&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits appear instantly ==&lt;br /&gt;
&lt;br /&gt;
This patch makes the credit images appear in the middle of the screen instantly instead of sliding into place. It is slightly buggy (&#039;Image dirt&#039; may appear) but stable. The images will slide off the screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Credit images appear instantly&amp;quot;&amp;gt;&lt;br /&gt;
#Credit images appear instantly -Keen 4&lt;br /&gt;
%patch $4217 $0000W&lt;br /&gt;
&lt;br /&gt;
#Credit images appear instantly -Keen 5&lt;br /&gt;
%patch $4211 $0000W&lt;br /&gt;
&lt;br /&gt;
#Credit images appear instantly -Keen 5&lt;br /&gt;
%patch $4032 $0000W&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Arachnut&amp;diff=22729</id>
		<title>Patch:Arachnut</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Arachnut&amp;diff=22729"/>
		<updated>2013-07-05T08:00:53Z</updated>

		<summary type="html">&lt;p&gt;Lemm: /* Sprite Collision */ arachnut patch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers patches relating to the [[Arachnut]]s in [[Keen 4]]. The Arachnuts appear in several levels and are  notable in that they cannot be permanently stunned, eventually recovering from being shot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite type|Sprite Type]] =&lt;br /&gt;
&lt;br /&gt;
Arachnuts use sprite type 10 which is used only by the them and doesn&#039;t affect anything else.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut sprite type&lt;br /&gt;
%patch $10522 $0A&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite actions|Sprite Actions]] =&lt;br /&gt;
&lt;br /&gt;
Arachnuts have three states, walking, stunned and recovering. Arachnuts are spawned running and will do nothing else until shot, whereapon they will be stunned. Stunned Arachnuts will, after some time recover, and after that return to running. Notice that the Arachnut cannot be permanently stunned.&lt;br /&gt;
&lt;br /&gt;
 Actions:&lt;br /&gt;
 $2378W #Arachnut walk 1&lt;br /&gt;
 $2396W #Arachnut walk 2&lt;br /&gt;
 $23B4W #Arachnut walk 3&lt;br /&gt;
 $23D2W #Arachnut walk 4&lt;br /&gt;
 $23F0W #Arachnut stunned&lt;br /&gt;
 $240EW #Arachnut recovering 1&lt;br /&gt;
 $242CW #Arachnut recovering 2&lt;br /&gt;
 $244AW #Arachnut recovering 3&lt;br /&gt;
 $2468W #Arachnut recovering 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Place Arachnut in level&lt;br /&gt;
%patch $1056B [$2378W] #Walk&lt;br /&gt;
&lt;br /&gt;
#walking Arachnut&lt;br /&gt;
%patch $31204 [$2396W] #Walk&lt;br /&gt;
%patch $31222 [$23B4W] #Walk&lt;br /&gt;
%patch $31240 [$23D2W] #Walk&lt;br /&gt;
%patch $3125E [$2378W] #Walk&lt;br /&gt;
&lt;br /&gt;
#When shot&lt;br /&gt;
%patch $105A9 [$23F0W] #When shot, stun&lt;br /&gt;
%patch $105D5 [$23F0W] #When shot while stunned, stun again&lt;br /&gt;
&lt;br /&gt;
#Stunned&lt;br /&gt;
%patch $3127C [$240EW] #Recover&lt;br /&gt;
&lt;br /&gt;
#Recovering&lt;br /&gt;
%patch $3129A [$242CW] #Arachnut unstunning 1&lt;br /&gt;
%patch $312B8 [$244AW] #Arachnut unstunning 2&lt;br /&gt;
%patch $312D6 [$2468W] #Arachnut unstunning 3&lt;br /&gt;
%patch $312F4 [$2378W] #Walk&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite behavior|Sprite Behavior]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut has only one behavior of note, the one that makes it slightly random. Like the [[Patch:Inchworm|Inchworm]] it will head towards Keen, but it does so randomly, and only one of its actions uses it, meaning it takes a long time to change direction, allowing Keen to evade it.&lt;br /&gt;
&lt;br /&gt;
 Behaviors:&lt;br /&gt;
 $0FA80AF9RL #Randomly change direction towards Keen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4 Arachnut behaviors&amp;quot;&amp;gt;&lt;br /&gt;
#Walking&lt;br /&gt;
%patch $311F8 {$00000000L}  #Nothing&lt;br /&gt;
%patch $31216 {$00000000L}  #Nothing&lt;br /&gt;
%patch $31234 {$00000000L}  #Nothing&lt;br /&gt;
%patch $31252 {$0FA80AF9RL} #Arachnut search&lt;br /&gt;
&lt;br /&gt;
#Stunned&lt;br /&gt;
%patch $31270 {$00000000L}  #Nothing&lt;br /&gt;
&lt;br /&gt;
#Recovering&lt;br /&gt;
%patch $3128E {$00000000L}  #Nothing&lt;br /&gt;
%patch $312AC {$00000000L}  #Nothing&lt;br /&gt;
%patch $312CA {$00000000L}  #Nothing&lt;br /&gt;
%patch $312E8 {$00000000L}  #Nothing&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Movement code ===&lt;br /&gt;
&lt;br /&gt;
The Arachnut movement code checks for Keen&#039;s horizontal position and then changes the Arachnut&#039;s direction to head towards Keen. It is quite simple, but the fact that only one frame uses this behavior means the Arachnut takes time to respond and can &#039;overshoot&#039; Keen, making it seem more erratic.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen seeking&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut movement code&lt;br /&gt;
%patch $10579 $55 $8B $EC $56 $8B $76 $06 $8B $44 $0A $8B $1E $D6 $A7 $3B $47&lt;br /&gt;
              $0A {$76 $08} $C7 $44 $0E [$FFFFW]  $5E $5D $CB $C7 $44 $0E [$0001W]&lt;br /&gt;
              $5E $5D $CB&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Patch:Seeking Keen|Seeking Keen]] ===&lt;br /&gt;
&lt;br /&gt;
By default the Arachnuts will move towards Keen all the time. It is possible to make them ignore Keen, they then just move back and forth. (Exactly the same as if they were given no behavior at all.) It is also possible to make them slightly more random by making them randomly turn right (Or left if $0001W is changed to $FFFFW) [[Patch:Probability|The probability given here is $80, or 50/50.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen seeking&amp;quot;&amp;gt;&lt;br /&gt;
#Walk towards Keen&lt;br /&gt;
%patch $1058F [$0001W]&lt;br /&gt;
%patch $10597 [$FFFFW]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Ignore Keen&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnuts ignore Keen&lt;br /&gt;
%patch $1058A $5E $5D $CB&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Ignore Keen, be randomish&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut randomly turn right&lt;br /&gt;
%patch $10583 $8B $76 $06 $9A $1D02002ARL $3D [$80] $00 $7D $03 $5E $5D $CB&lt;br /&gt;
              $C7 $44 $0E $0001W  $5E $5D $CB&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite speed|Speed and Jump Height]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut&#039;s speed is determined entirely by its animation. By default the Arachnut moves a total of 128 per frame. Changing how fast the Arachnut animates (See animation section below) will change how fast it moves. The Arachnut moves only left and right. The stunned and recovering Arachnut do not move.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
%patch $311F4 [$0080W $0000W] #Speed 1&lt;br /&gt;
%patch $31212 [$0080W $0000W] #Speed 2&lt;br /&gt;
%patch $31230 [$0080W $0000W] #Speed 3&lt;br /&gt;
%patch $3124E [$0080W $0000W] #Speed 4&lt;br /&gt;
&lt;br /&gt;
#Stunned&lt;br /&gt;
%patch $3126C [$0000W $0000W] #Speed &lt;br /&gt;
&lt;br /&gt;
#Unstunning&lt;br /&gt;
%patch $3128A [$0000W $0000W] #Speed 1&lt;br /&gt;
%patch $312A8 [$0000W $0000W] #Speed 2&lt;br /&gt;
%patch $312C6 [$0000W $0000W] #Speed 3&lt;br /&gt;
%patch $312E4 [$0000W $0000W] #Speed 4&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite collision|Sprite Collision]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut collision is complex. There are two basic collisions, that of the Arachnut and that of the stunned Arachnut. They are the same, excepting that the stunned Arachnut is not dangerous to Keen. The stunned Arachnut is interesting in that it is set up so that eventually it will &#039;unstun&#039; and come after Keen again. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collision values ==&lt;br /&gt;
&lt;br /&gt;
The Arachnut uses the &#039;dangerous&#039; collision when walking. Everything else uses the &#039;safe&#039; collision.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Walking&lt;br /&gt;
%patch $311FC $0FA80B1CRL #Arachnut&lt;br /&gt;
%patch $3121A $0FA80B1CRL #Arachnut&lt;br /&gt;
%patch $31238 $0FA80B1CRL #Arachnut&lt;br /&gt;
%patch $31256 $0FA80B1CRL #Arachnut&lt;br /&gt;
&lt;br /&gt;
#Stunned&lt;br /&gt;
%patch $31274 $0FA80B48RL #Stunned Arachnut&lt;br /&gt;
&lt;br /&gt;
#Unstunning&lt;br /&gt;
%patch $31292 $0FA80B48RL #Stunned Arachnut&lt;br /&gt;
%patch $312B0 $0FA80B48RL #Stunned Arachnut&lt;br /&gt;
%patch $312CE $0FA80B48RL #Stunned Arachnut&lt;br /&gt;
%patch $312EC $0FA80B48RL #Stunned Arachnut&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arachnut stuns permanently ==&lt;br /&gt;
&lt;br /&gt;
This patch adjusts the stunned Arachnut action so that instead of recovering that Arachnut stays permanently stunned, complete with stun stars. This makes it much more like every other enemy. Be aware that this patch contains, and is thus incompatible with, a number of patches elsewhere on this page involving the stunned Arachnut. (For example its animations, action type and behavior.)&lt;br /&gt;
&lt;br /&gt;
This patch frees  up the recovering Arachnut&#039;s actions for use elsewhere.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut stuns permanently&lt;br /&gt;
%patch $31260 $01ADW $01ADW $0002W $0000W $0001W $0000W $0000W $0000W&lt;br /&gt;
              $09DC16C9RL   $00000000L    $09DC1913RL   $23F0W&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stunner doesn&#039;t affect Arachnut ==&lt;br /&gt;
&lt;br /&gt;
This patch makes the stunner shot fly through the Arachnut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Stunner shot passes through arachnut&lt;br /&gt;
%patch $105B0 $90 $90 $90 $90 $90&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite animations|Animations]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut&#039;s animation is quite straightforward, it uses four images for walking left &#039;&#039;and&#039;&#039; right and a fifth frame for when it is stunned. Alternating stunned-walking images are used as the Arachnut recovers. This means the Arachnut is very image-efficient.&lt;br /&gt;
&lt;br /&gt;
Notice that the animation speed for the stunned Arachnut determines how long it will be stunned for, and those of the recovering Arachnut determine both how long it will take to recover and how fast it animates while recovering.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Cache&lt;br /&gt;
%patch $306FC $A9 $01 #Arachnut Cache start&lt;br /&gt;
%patch $30746 $AD $01 #Arachnut cache end&lt;br /&gt;
&lt;br /&gt;
#Walking&lt;br /&gt;
%patch $311E8 $01A9W $01ACW&lt;br /&gt;
%patch $311F2 $0006W        #Animation speed&lt;br /&gt;
%patch $31206 $01AAW $01ABW&lt;br /&gt;
%patch $31210 $0006W        #Animation speed&lt;br /&gt;
%patch $31224 $01ABW $01AAW&lt;br /&gt;
%patch $3122E $0006W        #Animation speed&lt;br /&gt;
%patch $31242 $01ACW $01A9W&lt;br /&gt;
%patch $3124C $0006W        #Animation speed&lt;br /&gt;
&lt;br /&gt;
#Arachnut stunned&lt;br /&gt;
%patch $31260 $01ADW $01ADW&lt;br /&gt;
%patch $3126A $00F0W        #Animation speed&lt;br /&gt;
&lt;br /&gt;
#Arachnut unstunning&lt;br /&gt;
%patch $3127E $01A9W $01A9W&lt;br /&gt;
%patch $31288 $0014W        #Animation speed&lt;br /&gt;
%patch $3129C $01ADW $01ADW&lt;br /&gt;
%patch $312A6 $0014W        #Animation speed&lt;br /&gt;
%patch $312BA $01A9W $01A9W&lt;br /&gt;
%patch $312C4 $0014W        #Animation speed&lt;br /&gt;
%patch $312D8 $01ADW $01ADW&lt;br /&gt;
%patch $312E2 $0014W        #Animation speed&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite positioning|Sprite positioning]] =&lt;br /&gt;
&lt;br /&gt;
Arachnuts are spawned 1 tile, 7 pixels up from their placed position, so that they can walk smoothly on the ground.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Spawn height:&lt;br /&gt;
%patch $1053E $FE8FW #1 tile, 7 pixels up&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite clipping and foreground|Clipping and foreground]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut has a foreground variable of 0, meaning it appears behind all sprites and foreground tiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut foreground variable&lt;br /&gt;
%patch $1052C [$0000W]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite-tile interaction|Sprite-tile interaction]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut uses general tile collisions; when walking  it uses the &#039;turn around at walls or edges&#039; collision and when stunned or recovering it uses the &#039;sit&#039; collision.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
%patch $31200 $09DC1795RL #Walking&lt;br /&gt;
%patch $3121E $09DC1795RL #Walking&lt;br /&gt;
%patch $3123C $09DC1795RL #Walking&lt;br /&gt;
%patch $3125A $09DC1795RL #Walking&lt;br /&gt;
&lt;br /&gt;
%patch $31278 $09DC176ERL #Stunned&lt;br /&gt;
&lt;br /&gt;
%patch $31296 $09DC176ERL #Unstunning&lt;br /&gt;
%patch $312B4 $09DC176ERL #Unstunning&lt;br /&gt;
%patch $312D2 $09DC176ERL #Unstunning&lt;br /&gt;
%patch $312F0 $09DC176ERL #Unstunning&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Galaxy Action Parameters#Action_Type|Action type]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut uses type 0 for all of its actions. This means that its motion is technically jerky, but it animates fast enough that this is not really noticeable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut moving&lt;br /&gt;
%patch $311EC [$0000W]&lt;br /&gt;
%patch $3120A [$0000W]&lt;br /&gt;
%patch $31228 [$0000W]&lt;br /&gt;
%patch $31246 [$0000W]&lt;br /&gt;
&lt;br /&gt;
#Arachnut stunned&lt;br /&gt;
%patch $31264 [$0000W]&lt;br /&gt;
&lt;br /&gt;
#Arachnut unstunning&lt;br /&gt;
%patch $31282 [$0000W]&lt;br /&gt;
%patch $312A0 [$0000W]&lt;br /&gt;
%patch $312BE [$0000W]&lt;br /&gt;
%patch $312DC [$0000W]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Galaxy Action Parameters#Deprotect_Animation|Deprotect and stick to ground]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut needs to move up and down slopes, so uses the stick-to-ground parameter in all of its actions. (Even when stunned.) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Arachnut moving&lt;br /&gt;
%patch $311EE [$0000W $0001W]&lt;br /&gt;
%patch $3120C [$0000W $0001W]&lt;br /&gt;
%patch $3122A [$0000W $0001W]&lt;br /&gt;
%patch $31248 [$0000W $0001W]&lt;br /&gt;
&lt;br /&gt;
#Arachnut stunned&lt;br /&gt;
%patch $31266 [$0000W $0001W]&lt;br /&gt;
&lt;br /&gt;
#Arachnut unstunning&lt;br /&gt;
%patch $31284 [$0000W $0001W]&lt;br /&gt;
%patch $312A2 [$0000W $0001W]&lt;br /&gt;
%patch $312C0 [$0000W $0001W]&lt;br /&gt;
%patch $312DE [$0000W $0001W]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Probability|Probability and randomness]] =&lt;br /&gt;
&lt;br /&gt;
The Arachnut&#039;s initial direction is randomly decided with a 50:50 chance. This has little effect as the Arachnut chases Keen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Probability of initially moving right&lt;br /&gt;
%patch $10549 $80&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Patch:Sprite spawning|Sprite spawn code]] =&lt;br /&gt;
&lt;br /&gt;
There are three different difficulties of Arachnut in the game. In the initiation code notice the [[Patch:Sprite cache|Arachnut cache]] being set (&amp;lt;tt&amp;gt;$C7 $06 $CB67W  $0001W&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Location of initiation code&lt;br /&gt;
%patch $EEAB [$02FAW] #Easy Arachnut (At $EBEA)&lt;br /&gt;
%patch $EF15 [$02F0W] #Medium Arachnut (At $EBE0)&lt;br /&gt;
%patch $EF17 [$02E6W] #Hard Arachnut (At $EBD6)&lt;br /&gt;
&lt;br /&gt;
#Arachnut Initiation code&lt;br /&gt;
%patch $EBD6 $83 $3E [$7A6CW]  {$03 $7D} $03 $E9 $021DW  $83 $3E [$7A6CW]  {$02 $7D}&lt;br /&gt;
             $03 $E9 $0213W  $FF $76 $FC $57 $9A {$0FA80A8ERL}     $83 $C4 $04&lt;br /&gt;
             $C7 $06 $CB67W  $0001W  $E9 $01FEW&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Music&amp;diff=19726</id>
		<title>Patch:Music</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Music&amp;diff=19726"/>
		<updated>2012-03-25T16:03:50Z</updated>

		<summary type="html">&lt;p&gt;Lemm: additional songs patch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers music related patches. As such, it relates mostly to Keen Galaxy. At present, about the only patches available are those that will change what song plays in a level.&lt;br /&gt;
&lt;br /&gt;
There is a patch and program created by [[User:Lemm]] to allow IMF files of up to 32 KB in Keen Vorticons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keen Vorticons music ==&lt;br /&gt;
&lt;br /&gt;
The TSR [[TSMusic]] created by [[User:Lemm]] allows a modder to include as many IMF music files as they wish, one per level. To be used TSMusic requires the Keen engine to coomunicate with it, and thus a patch. The patches for Keen 1–3 (v1.31) are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Play music with TSMusic:&lt;br /&gt;
%patch $BE97 $65&lt;br /&gt;
%patch $BEE2 $65&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
#Play music with TSMusic:&lt;br /&gt;
%patch $B5AF $65&lt;br /&gt;
%patch $B5FA $65&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 3&amp;quot;&amp;gt;&lt;br /&gt;
#Play music with TSMusic:&lt;br /&gt;
%patch $C90D $65&lt;br /&gt;
%patch $C958 $65&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keen Galaxy Level songs ==&lt;br /&gt;
&lt;br /&gt;
These patches change what song is played in a given level. You are limited only to songs in the &amp;lt;tt&amp;gt;AUDIO.CKx&amp;lt;/tt&amp;gt; file. For other music, the values used are not the song number, but the &#039;&#039;level&#039;&#039; number that plays the song you want, with some complications. (It is best to experiment with these later values, to see how things work.)&lt;br /&gt;
&lt;br /&gt;
Additional songs can be added to the game by using a chunk designated for sound to hold an extra songs.  In the executable, the audio chunk pointers are ordered so that the music chunk pointers are immediately after the sound chunk pointers.  Thus, if you shift the boundary between sound and music backwards, you create more space for music chunk pointers at the expense of sound chunk pointers.  This also shifts the existing song numbers correspondingly (e.g. if you shift by two chunks, a song that was originally song 3 becomes song 5, since the first music chunk is now two chunks earlier).  To use the extra songs patch, lower the existing start index of the song chunks by however many new songs you are adding.  Then lower the corresponding start of audio segment pointer by 2x however many songs you imported.  For example, in keen 5, if you were to add two songs, %patch $8C61 $00C0W would be lowered to $00BE, and %patch $8BF1 $BF45W would be lowered to $BF41W (along with the two subsequent patches).  Finally, you would have to change the total number of songs from 14 to 16.&lt;br /&gt;
&lt;br /&gt;
In Keen 4 it is also possible to play music in the [[Patch:Main menu]], see the page for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Where music list is read from:&lt;br /&gt;
%patch $8CCD $96 $03 #$2F206&lt;br /&gt;
&lt;br /&gt;
#Song values:&lt;br /&gt;
#0: Shadowlands       1: Eat your Veggies&lt;br /&gt;
#2: Too hot           3: Slug village&lt;br /&gt;
#4: Kick in the pants 5: Ancients&lt;br /&gt;
&lt;br /&gt;
#This is the music played in each level:&lt;br /&gt;
#             VALUE   LEVEL                 MUSIC PLAYED         LEVEL No&lt;br /&gt;
%patch $2F206 $00 $00 #Map                  (Shadowlands)          0&lt;br /&gt;
              $04 $00 #Border Village       (Kick in the Pants)    1&lt;br /&gt;
              $03 $00 #Slug Village         (Slug Village)         2&lt;br /&gt;
              $03 $00 #Perilous Pit         (Slug Village)         3&lt;br /&gt;
              $02 $00 #Cave of Descendants  (Too Hot)              4&lt;br /&gt;
              $02 $00 #Chasm of Chills      (Too Hot)              5&lt;br /&gt;
              $04 $00 #Crystalus            (Kick in the Pants)    6&lt;br /&gt;
              $03 $00 #Hiliville            (Slug Village)         7&lt;br /&gt;
              $01 $00 #Sand Yego            (Eat your Veggies)     8&lt;br /&gt;
              $01 $00 #Miragia              (Eat your Veggies)     9&lt;br /&gt;
              $01 $00 #Lifwater Oasis       (Eat your Veggies)    10&lt;br /&gt;
              $02 $00 #Pyramid of Moons     (Too Hot)             11&lt;br /&gt;
              $02 $00 #Pyramid of Shadows   (Too Hot)             12&lt;br /&gt;
              $02 $00 #Pyramid of Ancients  (Too Hot)             13&lt;br /&gt;
              $02 $00 #Pyramid of Forbidden (Too Hot)             14&lt;br /&gt;
              $02 $00 #Isle of Tar          (Too Hot)             15&lt;br /&gt;
              $02 $00 #Isle of Fire         (Too Hot)             16&lt;br /&gt;
              $01 $00 #Well of Wishes       (Eat your Veggies)    17&lt;br /&gt;
              $03 $00 #Bwb Megarocket       (Slug Village)        18&lt;br /&gt;
              $FF $FF #High scores          (No music, &amp;quot;Fanfare&amp;quot;) 19&lt;br /&gt;
&lt;br /&gt;
#Other music played: (Values here is number of LEVEL who&#039;s music is used)&lt;br /&gt;
%patch $5836 $0C $00 #Story demo (Too hot)&lt;br /&gt;
%patch $9CD7 $07 $00 #Ending Sequence (Slug Village)&lt;br /&gt;
%patch $F107 $FF $FF #Talking to Lindsey (Ancient)&lt;br /&gt;
%patch $F4CA $FF $FF #Talking to Ancient (Ancient)&lt;br /&gt;
&lt;br /&gt;
#Add new music&lt;br /&gt;
#Index of first music chunk within audio chunks:&lt;br /&gt;
%patch $8CEF $009CW&lt;br /&gt;
&lt;br /&gt;
#Start address of music chunks&lt;br /&gt;
#reduce start address by 2x that of &amp;quot;First Audio Entry&amp;quot;&lt;br /&gt;
%patch $8C75 $C895W # clear_music()&lt;br /&gt;
%patch $8C83 $C895W # clear_music()&lt;br /&gt;
%patch $8D83 $C895W # StartMusic()&lt;br /&gt;
%patch $8C91 6      # Total Number of Songs&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 5&amp;quot;&amp;gt;&lt;br /&gt;
#Song values:&lt;br /&gt;
#00 = Came In           01 = Armageddon Machine&lt;br /&gt;
#02 = High Scores       03 = Snooping&lt;br /&gt;
#04 = Bagpipes          05 = Wednesday on the Beach&lt;br /&gt;
#06 = Unknown           07 = Security Center&lt;br /&gt;
#08 = Help              09 = Be Sphereful With My Diamonds&lt;br /&gt;
#0A = Make it Tighter   0B = Omegamatic&lt;br /&gt;
#0C = Fanfare           0D = Quantum Explosion Dynamo&lt;br /&gt;
&lt;br /&gt;
#This is the music played in each level:&lt;br /&gt;
#             VALUE   LEVEL                      MUSIC PLAYED            LEVEL No&lt;br /&gt;
%patch $3067A $0B $00 #Map                       (Omegamatic)              0&lt;br /&gt;
              $05 $00 #Ion Ventilation System    (Wednesday on the Beach)  1&lt;br /&gt;
              $07 $00 #Security Center           (Security Center)         2&lt;br /&gt;
              $09 $00 #Defense Tunnel Vlook      (Be Sphereful)            3&lt;br /&gt;
              $0A $00 #Energy Flow Systems       (Make it Tighter)         4&lt;br /&gt;
              $09 $00 #Defense Tunnel Burrh      (Be Sphereful)            5&lt;br /&gt;
              $0A $00 #Regulation Control Center (Make it Tighter)         6&lt;br /&gt;
              $09 $00 #Defense Tunnel Sorra      (Be Sphereful)            7&lt;br /&gt;
              $0A $00 #Neutrino Burst Injector   (Make it Tighter)         8&lt;br /&gt;
              $09 $00 #Defense Tunnel Teln       (Be Sphereful)            9&lt;br /&gt;
              $0A $00 #Brownian Motion Inducer   (Make it Tighter)         10&lt;br /&gt;
              $03 $00 #Gravitational Damping Hub (Snooping)                11&lt;br /&gt;
              $0D $00 #Quantum Explosion Dynamo  (QED)                     12&lt;br /&gt;
              $04 $00 #Korath III Base           (Bagpipes)                13&lt;br /&gt;
              $0C $00 #Ending                    (Fanfare)&lt;br /&gt;
              $02 $00 #High Scores               (High Scores)             15&lt;br /&gt;
%patch $3069C $01 $00 #Scrolling Story           (Armageddon Machine)&lt;br /&gt;
              $00 $00 #Game Over                 (Came In)&lt;br /&gt;
              $08 $00 #Help                      (Help)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Add new music&lt;br /&gt;
#Index of first music chunk within audio chunks:&lt;br /&gt;
%patch $8C61 $00C0W&lt;br /&gt;
&lt;br /&gt;
#Start address of music chunks&lt;br /&gt;
#reduce start address by 2x that of &amp;quot;First Audio Entry&amp;quot;&lt;br /&gt;
%patch $8BF1 $BF45W # clear_music()&lt;br /&gt;
%patch $8BFF $BF45W # clear_music()&lt;br /&gt;
%patch $8CF5 $BF45W # StartMusic()&lt;br /&gt;
%patch $8C0D 14     # Total Number of Songs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 6&amp;quot;&amp;gt;&lt;br /&gt;
#Song values:&lt;br /&gt;
#00 = A World of Wonderment  01 = Brer Tar&lt;br /&gt;
#02 = To the Future          03 = Faster&lt;br /&gt;
#04 = Space Funk             05 = Aliens Ate My Babysitter&lt;br /&gt;
#06 = Ominous                07 = Metal&lt;br /&gt;
#08 = Mamba Snake&lt;br /&gt;
&lt;br /&gt;
#This is the music played in each level:&lt;br /&gt;
#             VALUE   LEVEL                           MUSIC PLAYED              LEVEL No&lt;br /&gt;
%patch $3103E $05 $00 #Map                            (Aliens Ate My Babysitter)  0&lt;br /&gt;
              $03 $00 #Bloogwaters Crossing           (Faster)                    1&lt;br /&gt;
              $01 $00 #Guard Post One                 (Brer Tar)                  2&lt;br /&gt;
              $08 $00 #First Dome of Darkness         (Mamba Snake)               3&lt;br /&gt;
              $08 $00 #Second Dome of Darkness        (Mamba Snake)               4&lt;br /&gt;
              $08 $00 #Bloogdome                      (Mamba Snake)               5&lt;br /&gt;
              $07 $00 #Bloogton Manufacturing         (Metal)                     6&lt;br /&gt;
              $02 $00 #Bloogton Tower                 (To the Future)             7&lt;br /&gt;
              $07 $00 #Bloogfoods, Inc.               (Metal)                     8&lt;br /&gt;
              $01 $00 #Guard Post 2                   (Brer Tar)                  9&lt;br /&gt;
              $03 $00 #Bloogville                     (Faster)                    10&lt;br /&gt;
              $02 $00 #BASA                           (To the Future)             11&lt;br /&gt;
              $01 $00 #Guard Post 3                   (Brer Tar)                  12&lt;br /&gt;
              $04 $00 #Bloogbase Recreational District(Space Funk)                13&lt;br /&gt;
              $04 $00 #Bloogbase Management District  (Space Funk)                14&lt;br /&gt;
              $06 $00 #Bloog Control Center           (Ominous)                   15&lt;br /&gt;
              $02 $00 #Blooglab Space Station         (To the Future)             16&lt;br /&gt;
              $00 $00 #Bean-with-Bacon Megarocket     (A World of Wonderment)     17&lt;br /&gt;
              $00 $00 #High Scores                    (A World of Wonderment)     18&lt;br /&gt;
&lt;br /&gt;
#Other music played:&lt;br /&gt;
%patch $563F $0D $00 #Star wars text (Space funk)&lt;br /&gt;
%patch $E33C $01 $00 #Molly ending (Faster)&lt;br /&gt;
&lt;br /&gt;
#Index of first music chunk within audio chunks:&lt;br /&gt;
%patch $8AC0 $00B4W&lt;br /&gt;
&lt;br /&gt;
#Add new music&lt;br /&gt;
#Start address of music chunks&lt;br /&gt;
#reduce start address by 2x that of &amp;quot;First Audio Entry&amp;quot;&lt;br /&gt;
%patch $8A59 $CA53W # clear_music()&lt;br /&gt;
%patch $8A67 $CA53W # clear_music()&lt;br /&gt;
%patch $8B5D $CA53W # StartMusic()&lt;br /&gt;
%patch $8A75 9      # Total number of songs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Music and extra levels ==&lt;br /&gt;
&lt;br /&gt;
[[Patch:Levels#Extra_levels|It is possible to have extra levels in Keen Vorticons an Galaxy.]] For Vorticons there is no issue, the TSR program will provide music for any level. With Keen Galaxy the music list must be extended, this is done by simply adding new entries to the end of it. (This will overwrite some of the [[Patch:F10 M Cheat]] text.) The extra level patch also has an entry for the number of level song entries in the list. This should match the number of levels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
Keen 4:&lt;br /&gt;
&amp;lt;patch&amp;gt;&lt;br /&gt;
#Insuff mem message:&lt;br /&gt;
%patch $8D30  $EC $06 #Read from&lt;br /&gt;
%patch $2F55C &amp;quot;Insufficient memory&amp;quot; $0A&lt;br /&gt;
              &amp;quot;for background music!&amp;quot; $00&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Main_menu&amp;diff=19534</id>
		<title>Patch:Main menu</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Main_menu&amp;diff=19534"/>
		<updated>2012-02-17T07:52:10Z</updated>

		<summary type="html">&lt;p&gt;Lemm: /* Colors */ control menus proc was buggy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers patches relating to the main menu, the first menu the player is confronted with on starting the game. Related pages are [[Patch:Title screen]]. It is divided into three sections, Vorticons, Dreams and Galaxy, relating to the three different menu styles employed in those games.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorticons =&lt;br /&gt;
&lt;br /&gt;
The menu appears over the title screen. It has seven items, New game, Continue game, Story, About id, High scores, Ordering info, Previews and Restart demo. The currently selected item is shown by an 8x8 cursor taken from the 8x8 tiles. The menu window itself is set up like a normal &amp;quot;game window&amp;quot; and uses the same tiles.&lt;br /&gt;
&lt;br /&gt;
There are three basic things to consider when changing the menu; the menu text, the menu item and what the item does. To properly alter the menu, all three must be considered. As an example, if we wanted to delete the &amp;quot;Continue game&amp;quot; option we would have to do three things; remove the continue game text so the player cannot see it, &amp;quot;shorten&amp;quot; the menu so that the player cannot select an &amp;quot;empty&amp;quot; option, and finally rearrange what the items do so they make sense again. See the example at the end of this section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu items ==&lt;br /&gt;
&lt;br /&gt;
Menu items are independent of the text displayed in the menu. Each item is a &amp;quot;line&amp;quot; that the player can select with the cursor. For simplicity you can change the number of items by changing the last two values of this patch. (Default 7 items.) More complexly, this patch controls where the cursor navigates to when the arrow keys are pressed. There is a value for the top and the bottom of the menu so that the cursor knows where to go when &amp;quot;wrapping around&amp;quot; (going from the top of the menu to the bottom and vice versa). These should be the same to avoid problems.&lt;br /&gt;
&lt;br /&gt;
Making the menu &amp;quot;shorter&amp;quot; will simply mean that there are items the player cannot select and thus cannot use. For example, making the bottom item 5 means the last two items, Previews and Restart demo appear, but cannot be selected. Making the top item 1 means &amp;quot;New game&amp;quot; cannot be selected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1, Change number of menu items&amp;quot;&amp;gt;&lt;br /&gt;
#Menu start item&lt;br /&gt;
%patch $9331 $00     #When moving up&lt;br /&gt;
%patch $9472 $00 $00 #When wrapping around from bottom&lt;br /&gt;
&lt;br /&gt;
#Menu bottom item&lt;br /&gt;
%patch $9414 $07     #Moving down&lt;br /&gt;
%patch $938F $07 $00 #When wrapping from top&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu cursor ==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the cursor uses graphics from the 8x8 tiles (also known as the &amp;quot;font&amp;quot;). It can use any number of these when moving about the menu. The first 8x8 tile is 0, and so on. Only the idle (no keys being pressed) cursor animates. The cursor also leaves behind a vertical &amp;quot;trail&amp;quot; of tiles which should, usually, be the same as the background (space) tile of the menu window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1, 8x8 cursor graphics&amp;quot;&amp;gt;&lt;br /&gt;
#Idle&lt;br /&gt;
%patch $92FB $09 $00&lt;br /&gt;
%patch $9316 $02 $00 #Animation frames - 1&lt;br /&gt;
&lt;br /&gt;
#Moving up&lt;br /&gt;
%patch $933E $09 $00 #While moving&lt;br /&gt;
%patch $93B5 $09 $00 #After moving (Should be the same as above line)&lt;br /&gt;
%patch $937E $02 $00 #Animation frames - 1&lt;br /&gt;
%patch $9361 $20 $00 #Tile left behind (White space)&lt;br /&gt;
&lt;br /&gt;
#Moving down&lt;br /&gt;
%patch $9421 $09 $00 #While moving&lt;br /&gt;
%patch $9498 $09 $00 #After moving (Should be the same as above line)&lt;br /&gt;
%patch $9461 $02 $00 #Animation frames - 1&lt;br /&gt;
%patch $9444 $20 $00 #Tile left behind (White space)&lt;br /&gt;
&lt;br /&gt;
#Cursor speed:&lt;br /&gt;
%patch $9358 $01 $00 #Up&lt;br /&gt;
%patch $943B $01 $00 #Down&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Window size ==&lt;br /&gt;
&lt;br /&gt;
The menu size is in 8x8 blocks. Try not to make a window shorter or narrower than the text in it, it does not look pretty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
%patch $9601 [$000AW] #Height&lt;br /&gt;
%patch $9605 [$0012W] #Width&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
%patch $9094 [$000AW] #Height&lt;br /&gt;
%patch $9098 [$0012W] #Width&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu options ==&lt;br /&gt;
&lt;br /&gt;
These are a collection of two-byte addresses that &amp;quot;point&amp;quot; to the various options. The actual values are not important unless the actual option code is being patched (which is more complicated and should be unnecessary). When &amp;quot;removing&amp;quot; an option, your best bet is to simply delete the pointer. To keep the line in the menu box but make it unuseable, &#039;&#039;&#039;replace&#039;&#039;&#039; the pointer with the value replace the pointer with $95CAW or &#039;do nothing&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Menu pointers&lt;br /&gt;
%patch $95ED $9570W # New Game&lt;br /&gt;
             $9577W # Continue Game&lt;br /&gt;
             $957FW # Story&lt;br /&gt;
             $9589W # About ID...&lt;br /&gt;
             $9596W # High Scores&lt;br /&gt;
             $95A3W # Ordering Info&lt;br /&gt;
             $95B5W # Previews!&lt;br /&gt;
             $95C2W # Restart Demo&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
The menu text is one line of text for each item plus a bottom of window instruction telling the player how to use the menu. Two things can be done, the text can be removed entirely or it can be changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove text  ===&lt;br /&gt;
&lt;br /&gt;
Removing an item&#039;s text does not in fact disable the item, it merely changes the whole menu to not have that text. So for example, using the first line of the patch shown below deletes the &amp;quot;New game&amp;quot; line from the menu. New game is now &amp;quot;Continue game&amp;quot;, Continue is now &amp;quot;Story&amp;quot;, and so on, with the last item having a blank line. These patches are thus not very useful unless you are deleting items from the bottom of the menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1, Remove item text&amp;quot;&amp;gt;&lt;br /&gt;
%patch $9628 $90 $90 $90 #New Game&lt;br /&gt;
%patch $9631 $90 $90 $90 #Continue Game&lt;br /&gt;
%patch $963A $90 $90 $90 #Story&lt;br /&gt;
%patch $9643 $90 $90 $90 #About Id&lt;br /&gt;
%patch $964C $90 $90 $90 #High Scores&lt;br /&gt;
%patch $9655 $90 $90 $90 #Ordering Info&lt;br /&gt;
%patch $965E $90 $90 $90 #Previews!&lt;br /&gt;
%patch $9667 $90 $90 $90 #Restart Demo&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Change text ===&lt;br /&gt;
&lt;br /&gt;
Changing the text is more complicated. See [[Patch:Text patches]]. If your new text fits into the old text&#039;s space you only need to edit that, but it&#039;s possible you will need to edit the text pointers too. These are the &#039;addresses&#039; of the text and seeing the link above will show you how they work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Menu text:&lt;br /&gt;
%patch $15EE6 &amp;quot;   New Game&amp;quot; $0A $00&lt;br /&gt;
%patch $15EF3 &amp;quot;   Continue Game&amp;quot; $0A $00&lt;br /&gt;
%patch $15F05 &amp;quot;   Story&amp;quot; $0A $00&lt;br /&gt;
%patch $15F0F &amp;quot;   About ID...&amp;quot; $0A $00&lt;br /&gt;
%patch $15F1F &amp;quot;   High Scores&amp;quot; $0A $00&lt;br /&gt;
%patch $15F2F &amp;quot;   Ordering Info&amp;quot; $0A $00&lt;br /&gt;
%patch $15F41 &amp;quot;   Previews!&amp;quot; $0A $00&lt;br /&gt;
%patch $15F4F &amp;quot;   Restart Demo&amp;quot; $0A $0A $00&lt;br /&gt;
%patch $15F61 &amp;quot;Use the &amp;quot; $00&lt;br /&gt;
%patch $15F6A &amp;quot;arrows&amp;quot; $00&lt;br /&gt;
%patch $15F71 &amp;quot;mouse&amp;quot; $00&lt;br /&gt;
%patch $15F77 &amp;quot;joystick&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Text read from&lt;br /&gt;
%patch $9625 [$2E96W] #New Game&lt;br /&gt;
%patch $962E [$2EA3W] #Continue Game&lt;br /&gt;
%patch $9637 [$2EB5W] #Story&lt;br /&gt;
%patch $9640 [$2EBFW] #About Id&lt;br /&gt;
%patch $9649 [$2ECFW] #High Scores&lt;br /&gt;
%patch $9652 [$2EDFW] #Ordering info&lt;br /&gt;
%patch $965B [$2EF1W] #Previews!&lt;br /&gt;
%patch $9664 [$2EFFW] #Restart demo&lt;br /&gt;
%patch $966D [$2F11W] #Use the&lt;br /&gt;
%patch $9686 [$2F1AW] #Arrows (Using keyboard)&lt;br /&gt;
%patch $968B [$2F21W] #Mouse (Using mouse)&lt;br /&gt;
%patch $9690 [$2F27W] #Joystick (Using joystick)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
#Menu text:&lt;br /&gt;
%patch $1A6B9 &amp;quot;   New Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6C6 &amp;quot;   Continue Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6D8 &amp;quot;   Story&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6E2 &amp;quot;   About ID...&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6F2 &amp;quot;   High Scores&amp;quot; $0A $00&lt;br /&gt;
%patch $1A702 &amp;quot;   Ordering Info&amp;quot; $0A $00&lt;br /&gt;
%patch $1A714 &amp;quot;   Previews!&amp;quot; $0A $00&lt;br /&gt;
%patch $1A722 &amp;quot;   Restart Demo&amp;quot; $0A $0A $00&lt;br /&gt;
%patch $1A734 &amp;quot;Use the &amp;quot; $00&lt;br /&gt;
%patch $1A73D &amp;quot;arrows&amp;quot; $00&lt;br /&gt;
%patch $1A744 &amp;quot;mouse&amp;quot; $00&lt;br /&gt;
%patch $1A74A &amp;quot;joystick&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Text read from&lt;br /&gt;
%patch $90B8 [$2F39W] #New Game&lt;br /&gt;
%patch $90C1 [$2F46W] #Continue Game&lt;br /&gt;
%patch $90CA [$2F58W] #Story&lt;br /&gt;
%patch $90D3 [$2F62W] #About Id&lt;br /&gt;
%patch $90DC [$2F72W] #High Scores&lt;br /&gt;
%patch $90E5 [$2F82W] #Ordering info&lt;br /&gt;
%patch $90EE [$2F94W] #Previews!&lt;br /&gt;
%patch $90F7 [$2FA2W] #Restart demo&lt;br /&gt;
%patch $9100 [$2FB4W] #Use the&lt;br /&gt;
%patch $9119 [$2FBDW] #Arrows (Using keyboard)&lt;br /&gt;
%patch $911E [$2FC4W] #Mouse (Using mouse)&lt;br /&gt;
%patch $9123 [$2FCAW] #Joystick (Using joystick)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 3&amp;quot;&amp;gt;&lt;br /&gt;
#Menu text:&lt;br /&gt;
%patch $1C7D5 &amp;quot;   New Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1C7E2 &amp;quot;   Continue Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1C7F4 &amp;quot;   Story&amp;quot; $0A $00&lt;br /&gt;
%patch $1C7FE &amp;quot;   About ID...&amp;quot; $0A $00&lt;br /&gt;
%patch $1C80E &amp;quot;   High Scores&amp;quot; $0A $00&lt;br /&gt;
%patch $1C81E &amp;quot;   Ordering Info&amp;quot; $0A $00&lt;br /&gt;
%patch $1C830 &amp;quot;   Previews!&amp;quot; $0A $00&lt;br /&gt;
%patch $1C83E &amp;quot;   Restart Demo&amp;quot; $0A $0A $00&lt;br /&gt;
%patch $1C850 &amp;quot;Use the &amp;quot; $00&lt;br /&gt;
%patch $1C859 &amp;quot;arrows&amp;quot; $00&lt;br /&gt;
%patch $1C860 &amp;quot;mouse&amp;quot; $00&lt;br /&gt;
%patch $1C866 &amp;quot;joystick&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
%patch $9F13 [$2FB5W] #New Game&lt;br /&gt;
%patch $9F1B [$2FC2W] #Continue Game&lt;br /&gt;
%patch $9F23 [$2FD4W] #Story&lt;br /&gt;
%patch $9F2B [$2FDEW] #About Id&lt;br /&gt;
%patch $9F33 [$2FEEW] #High Scores&lt;br /&gt;
%patch $9F3B [$2FFEW] #Ordering info&lt;br /&gt;
%patch $9F43 [$3010W] #Previews!&lt;br /&gt;
%patch $9F4B [$301EW] #Restart demo&lt;br /&gt;
%patch $9F53 [$3030W] #Use the&lt;br /&gt;
%patch $9F6B [$3039W] #Arrows (Using keyboard)&lt;br /&gt;
%patch $9F75 [$3040W] #Mouse (Using mouse)&lt;br /&gt;
%patch $9F7F [$3046W] #Joystick (Using joystick)&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dreams =&lt;br /&gt;
&lt;br /&gt;
The Dreams menu is the most complex of any Keen game. In consists of a number of bitmaps that can be selected using the mouse or keyboard. The menu is divided into a number of screens that contain further options. At present, only the graphics can be changed and it is likely very difficult to change the layout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Galaxy =&lt;br /&gt;
&lt;br /&gt;
The Galaxy menu is more closely related to Keen Vorticons&#039; menu, but is also like the Dreams menu in that it also uses bitmaps (it even has its own fullscreen graphic). At present, both the text and the graphics of the menu can be changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
%patch $33656 &amp;quot;BEGIN EASY GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN NORMAL GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN HARD GAME&amp;quot; $00&lt;br /&gt;
%patch $3372F &amp;quot;NEW GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;LOAD GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;SAVE GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;CONFIGURE&amp;quot; $00 &lt;br /&gt;
              &amp;quot;END GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;PADDLE WAR&amp;quot; $00&lt;br /&gt;
              &amp;quot;QUIT&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
%patch $33792 &amp;quot;ESC TO BACK OUT&amp;quot; $00&lt;br /&gt;
%patch $337A2 &amp;quot;REALLY END CURRENT GAME?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO END IT&amp;quot; $00&lt;br /&gt;
%patch $337CD &amp;quot;REALLY QUIT?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO QUIT&amp;quot; $00&lt;br /&gt;
%patch $337EA &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO LOAD GAME&amp;quot; $00&lt;br /&gt;
%patch $33810 &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y FOR NEW GAME&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Options menu&lt;br /&gt;
%patch $33874 &amp;quot;SCORE BOX (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SCORE BOX (OFF)&amp;quot; $00&lt;br /&gt;
%patch $33893 &amp;quot;TWOBUTTON FIRING (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;TWOBUTTON FIRING (OFF)&amp;quot; $00&lt;br /&gt;
%patch $338C2 &amp;quot;FIX JERKY MOTION (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;FIX JERKY MOTION (OFF)&amp;quot; $00&lt;br /&gt;
%patch $338EF &amp;quot;SVGA COMPATIBILITY (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SVGA COMPATIBILITY (OFF)&amp;quot; $00&lt;br /&gt;
%patch $33920 &amp;quot;USE GRAVIS GAMEPAD (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;USE GRAVIS GAMEPAD (OFF)&amp;quot; $00&lt;br /&gt;
%patch $33951 &amp;quot;Score box now on&amp;quot; $00&lt;br /&gt;
              &amp;quot;Score box now off&amp;quot; $00&lt;br /&gt;
              &amp;quot;Press any key&amp;quot; $00&lt;br /&gt;
%patch $33CCA &amp;quot;RETURN TO GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;RETURN TO DEMO&amp;quot; $00&lt;br /&gt;
%patch $33D11 &amp;quot;Quitting...&amp;quot; $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 5&amp;quot;&amp;gt;&lt;br /&gt;
%patch $3412F &amp;quot;BEGIN EASY GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN NORMAL GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN HARD GAME&amp;quot; $00&lt;br /&gt;
%patch $341F2 &amp;quot;NEW GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;LOAD GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;SAVE GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;CONFIGURE&amp;quot; $00&lt;br /&gt;
              &amp;quot;END GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PADDLE WAR&amp;quot; $00&lt;br /&gt;
              &amp;quot;QUIT&amp;quot; $00&lt;br /&gt;
%patch $34253 &amp;quot;ESC TO BACK OUT&amp;quot; $00&lt;br /&gt;
%patch $34263 &amp;quot;REALLY END CURRENT GAME?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO END IT&amp;quot; $00&lt;br /&gt;
%patch $3428E &amp;quot;REALLY QUIT?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO QUIT&amp;quot; $00&lt;br /&gt;
%patch $342AB &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO LOAD GAME&amp;quot; $00&lt;br /&gt;
%patch $342D1 &amp;quot;PRESS Y FOR NEW GAME&amp;quot; $00&lt;br /&gt;
%patch $3469A &amp;quot;RETURN TO GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;RETURN TO DEMO&amp;quot; $00&lt;br /&gt;
%patch $346E1 &amp;quot;Quitting...&amp;quot; $00 &lt;br /&gt;
&lt;br /&gt;
#Options menu text:&lt;br /&gt;
%patch $34324 &amp;quot;SCORE BOX (ON)&amp;quot; $00&lt;br /&gt;
%patch $34333 &amp;quot;SCORE BOX (OFF)&amp;quot; $00&lt;br /&gt;
%patch $34343 &amp;quot;TWO-BUTTON FIRING (ON)&amp;quot; $00&lt;br /&gt;
%patch $34354 &amp;quot;TWO-BUTTON FIRING (OFF)&amp;quot; $00&lt;br /&gt;
%patch $34372 &amp;quot;FIX JERKY MOTION (ON)&amp;quot; $00&lt;br /&gt;
%patch $34388 &amp;quot;FIX JERKY MOTION (OFF)&amp;quot; $00&lt;br /&gt;
%patch $3439F &amp;quot;SVGA COMPATIBILITY (ON)&amp;quot; $00&lt;br /&gt;
%patch $343B7 &amp;quot;SVGA COMPATIBILITY (OFF)&amp;quot; $00&lt;br /&gt;
%patch $343D0 &amp;quot;USE GRAVIS GAMEPAD (ON)&amp;quot; $00&lt;br /&gt;
%patch $343E8 &amp;quot;USE GRAVIS GAMEPAD (OFF)&amp;quot; $00&lt;br /&gt;
%patch $34401 &amp;quot;Score box now on&amp;quot; $00&lt;br /&gt;
              &amp;quot;Score box now off&amp;quot; $00&lt;br /&gt;
              &amp;quot;Press any key&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Text called from&lt;br /&gt;
%patch $1C0A4 $3FE4W #Score on&lt;br /&gt;
%patch $1C0A9 $3FF3W #Score off&lt;br /&gt;
%patch $1C0BC $4003W #Two button on&lt;br /&gt;
%patch $1C0C1 $4014W #Two button off&lt;br /&gt;
%patch $1C0D4 $4032W #Jerk on&lt;br /&gt;
%patch $1C0D9 $4048W #Jerk off&lt;br /&gt;
%patch $1C0EC $405FW #SVGA on&lt;br /&gt;
%patch $1C0F1 $4077W #SVGA off&lt;br /&gt;
%patch $1C142 $4090W #Gravis on&lt;br /&gt;
%patch $1C147 $40A8W #Gravis off&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 6&amp;quot;&amp;gt;&lt;br /&gt;
%patch $34F90 &amp;quot;BEGIN EASY GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN NORMAL GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN HARD GAME&amp;quot; $00&lt;br /&gt;
%patch $35069 &amp;quot;NEW GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;LOAD GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;SAVE GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;CONFIGURE&amp;quot; $00&lt;br /&gt;
              &amp;quot;END GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PADDLE WAR&amp;quot; $00&lt;br /&gt;
              &amp;quot;QUIT&amp;quot; $00&lt;br /&gt;
%patch $350CC &amp;quot;ESC TO BACK OUT&amp;quot; $00&lt;br /&gt;
%patch $350DC &amp;quot;REALLY END CURRENT GAME?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO END IT&amp;quot; $00&lt;br /&gt;
%patch $35107 &amp;quot;REALLY QUIT?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO QUIT&amp;quot; $00&lt;br /&gt;
%patch $35124 &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO LOAD GAME&amp;quot; $00&lt;br /&gt;
%patch $3514A &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
   &amp;quot;PRESS Y FOR NEW GAME&amp;quot; $00&lt;br /&gt;
%patch $35604 &amp;quot;RETURN TO GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;RETURN TO DEMO&amp;quot; $00&lt;br /&gt;
%patch $3564B &amp;quot;Quitting...&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Options menu&lt;br /&gt;
%patch $351AE &amp;quot;SCORE BOX (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SCORE BOX (OFF)&amp;quot; $00&lt;br /&gt;
%patch $351CD &amp;quot;TWO-BUTTON FIRING (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;TWO-BUTTON FIRING (OFF)&amp;quot; $00&lt;br /&gt;
%patch $351FC &amp;quot;FIX JERKY MOTION (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;FIX JERKY MOTION (OFF)&amp;quot; $00&lt;br /&gt;
%patch $35229 &amp;quot;SVGA COMPATIBILITY (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SVGA COMPATIBILITY (OFF)&amp;quot; $00&lt;br /&gt;
%patch $3525A &amp;quot;USE GRAVIS GAMEPAD (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;USE GRAVIS GAMEPAD (OFF)&amp;quot; $00&lt;br /&gt;
%patch $3528B &amp;quot;Score box now on&amp;quot; $00&lt;br /&gt;
              &amp;quot;Score box now off&amp;quot; $00&lt;br /&gt;
              &amp;quot;Press any key&amp;quot; $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
&lt;br /&gt;
There are numerous functions that set watch text and background colours, allowing you to have different colours in different parts of the watch.  Note that the font colour is dependent on the background color.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# draw_menu_item&lt;br /&gt;
%patch $1A9C6&lt;br /&gt;
$B0 8				# mov al, BGCOLOR  ; NOTE THIS WORKS BECAUSE AX MUST BE 0 AT THIS OP&lt;br /&gt;
$50					# push ax &lt;br /&gt;
$B0 8				# mov al 8&lt;br /&gt;
$50					# push ax&lt;br /&gt;
$B0 $9F				# mov al 9fh&lt;br /&gt;
$50					# push ax&lt;br /&gt;
&lt;br /&gt;
%patch $1AA06 2		#menu font 1&lt;br /&gt;
%patch $1AA0D 10	#menu font 2&lt;br /&gt;
%patch $1AA33 15	#menu font 3&lt;br /&gt;
&lt;br /&gt;
# draw_menu_footer&lt;br /&gt;
%patch $1AA40 10	#font 1&lt;br /&gt;
%patch $1AABF 0		#font 2&lt;br /&gt;
%patch $1AAC1 10W	#hlin 1&lt;br /&gt;
&lt;br /&gt;
# draw_current_menu&lt;br /&gt;
%patch $1AB14 10W	#Hlin 1&lt;br /&gt;
&lt;br /&gt;
# center_watch_window&lt;br /&gt;
%patch $1AC5B 8W	#BAR 1&lt;br /&gt;
%patch $1AC75 10W	#Hlin 1&lt;br /&gt;
%patch $1AC90 10W	#Hlin 2&lt;br /&gt;
%patch $1ACAE 10W	#Vlin 1&lt;br /&gt;
%patch $1ACC9 10W	#Vlin 2&lt;br /&gt;
&lt;br /&gt;
#green_message_box&lt;br /&gt;
%patch $1AE6C 2		#font 1&lt;br /&gt;
%patch $1AEA3 10W	#hlin 1&lt;br /&gt;
%patch $1AEC8 10	#fontcolor 1&lt;br /&gt;
&lt;br /&gt;
#configure_menu_proc&lt;br /&gt;
%patch $1B2F6 10	#font 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#set_key_control&lt;br /&gt;
%patch $1B33B 2		# font 1&lt;br /&gt;
%patch $1B35E 8W	# BAR 1&lt;br /&gt;
%patch $1B381 8W	# BAR 2&lt;br /&gt;
&lt;br /&gt;
#controls_menu_proc&lt;br /&gt;
%patch $1B50E&lt;br /&gt;
$B0 3				# mov al, BGCOLOR  ; NOTE THIS WORKS BECAUSE AH MUST BE 0 AT THIS OP&lt;br /&gt;
$50					# push ax &lt;br /&gt;
$B0 8				# mov al 8&lt;br /&gt;
$50					# push ax&lt;br /&gt;
$B0 $9F				# mov al 9fh&lt;br /&gt;
$50					# push ax   &lt;br /&gt;
&lt;br /&gt;
%patch $1B543 2		# font1&lt;br /&gt;
%patch $1B547 10	# font1B&lt;br /&gt;
%patch $1B572 8W	# BAR 2 (XOR)&lt;br /&gt;
%patch $1B595 8W	# BAR 3&lt;br /&gt;
&lt;br /&gt;
#print_joystick_prompt&lt;br /&gt;
%patch $1B64F 8W	# Bar 1&lt;br /&gt;
%patch $1B670 2		# font1&lt;br /&gt;
&lt;br /&gt;
#print_gamepad_prompt&lt;br /&gt;
%patch $1B987 8W	# Bar 1&lt;br /&gt;
&lt;br /&gt;
#gamepad_menu_proc&lt;br /&gt;
%patch $1BB9C 2		#font 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#draw_savegame_item&lt;br /&gt;
%patch $1BC73 2		#font 1a&lt;br /&gt;
%patch $1BC77 10	#font 1b&lt;br /&gt;
&lt;br /&gt;
%patch $1BC7E 8W	#Hlin 1, 2, Vlin 1,2&lt;br /&gt;
&lt;br /&gt;
#load_game_menu_proc&lt;br /&gt;
%patch $1BEA7 8W	#bar 1 &lt;br /&gt;
&lt;br /&gt;
#save_savegame_item&lt;br /&gt;
%patch $1BFAF 2		#font 1&lt;br /&gt;
%patch $1BFB1 8W	#Bar 1&lt;br /&gt;
&lt;br /&gt;
#Paddle War left out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#do_main_menu&lt;br /&gt;
%patch $1CC69 15	#font 1&lt;br /&gt;
&lt;br /&gt;
#init_menu&lt;br /&gt;
%patch $1CD8E 15	#font 1&lt;br /&gt;
&amp;lt;/patch&amp;gt;                              &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Play music in menu ===&lt;br /&gt;
&lt;br /&gt;
This allows you to play music in the main menu. As a side effect the menu background color is black, not cyan. This only matters if your menu image is smaller than 320x200. The value used here is the level who&#039;s music is used. (For example a value of 0 will play the map level&#039;s music.) See [[Patch:Music]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Play music in the menu&lt;br /&gt;
%patch $1CC6F $06BD20C7RL&lt;br /&gt;
%patch $1CC6B [$0003W]      #Play this level&#039;s song&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 1|}}&lt;br /&gt;
{{PatchCategories|Keen 2|}}&lt;br /&gt;
{{PatchCategories|Keen 3|}}&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Main_menu&amp;diff=19533</id>
		<title>Patch:Main menu</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Main_menu&amp;diff=19533"/>
		<updated>2012-02-17T06:46:07Z</updated>

		<summary type="html">&lt;p&gt;Lemm: /* Galaxy */  Watch Colours for Keen 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers patches relating to the main menu, the first menu the player is confronted with on starting the game. Related pages are [[Patch:Title screen]]. It is divided into three sections, Vorticons, Dreams and Galaxy, relating to the three different menu styles employed in those games.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorticons =&lt;br /&gt;
&lt;br /&gt;
The menu appears over the title screen. It has seven items, New game, Continue game, Story, About id, High scores, Ordering info, Previews and Restart demo. The currently selected item is shown by an 8x8 cursor taken from the 8x8 tiles. The menu window itself is set up like a normal &amp;quot;game window&amp;quot; and uses the same tiles.&lt;br /&gt;
&lt;br /&gt;
There are three basic things to consider when changing the menu; the menu text, the menu item and what the item does. To properly alter the menu, all three must be considered. As an example, if we wanted to delete the &amp;quot;Continue game&amp;quot; option we would have to do three things; remove the continue game text so the player cannot see it, &amp;quot;shorten&amp;quot; the menu so that the player cannot select an &amp;quot;empty&amp;quot; option, and finally rearrange what the items do so they make sense again. See the example at the end of this section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu items ==&lt;br /&gt;
&lt;br /&gt;
Menu items are independent of the text displayed in the menu. Each item is a &amp;quot;line&amp;quot; that the player can select with the cursor. For simplicity you can change the number of items by changing the last two values of this patch. (Default 7 items.) More complexly, this patch controls where the cursor navigates to when the arrow keys are pressed. There is a value for the top and the bottom of the menu so that the cursor knows where to go when &amp;quot;wrapping around&amp;quot; (going from the top of the menu to the bottom and vice versa). These should be the same to avoid problems.&lt;br /&gt;
&lt;br /&gt;
Making the menu &amp;quot;shorter&amp;quot; will simply mean that there are items the player cannot select and thus cannot use. For example, making the bottom item 5 means the last two items, Previews and Restart demo appear, but cannot be selected. Making the top item 1 means &amp;quot;New game&amp;quot; cannot be selected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1, Change number of menu items&amp;quot;&amp;gt;&lt;br /&gt;
#Menu start item&lt;br /&gt;
%patch $9331 $00     #When moving up&lt;br /&gt;
%patch $9472 $00 $00 #When wrapping around from bottom&lt;br /&gt;
&lt;br /&gt;
#Menu bottom item&lt;br /&gt;
%patch $9414 $07     #Moving down&lt;br /&gt;
%patch $938F $07 $00 #When wrapping from top&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu cursor ==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the cursor uses graphics from the 8x8 tiles (also known as the &amp;quot;font&amp;quot;). It can use any number of these when moving about the menu. The first 8x8 tile is 0, and so on. Only the idle (no keys being pressed) cursor animates. The cursor also leaves behind a vertical &amp;quot;trail&amp;quot; of tiles which should, usually, be the same as the background (space) tile of the menu window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1, 8x8 cursor graphics&amp;quot;&amp;gt;&lt;br /&gt;
#Idle&lt;br /&gt;
%patch $92FB $09 $00&lt;br /&gt;
%patch $9316 $02 $00 #Animation frames - 1&lt;br /&gt;
&lt;br /&gt;
#Moving up&lt;br /&gt;
%patch $933E $09 $00 #While moving&lt;br /&gt;
%patch $93B5 $09 $00 #After moving (Should be the same as above line)&lt;br /&gt;
%patch $937E $02 $00 #Animation frames - 1&lt;br /&gt;
%patch $9361 $20 $00 #Tile left behind (White space)&lt;br /&gt;
&lt;br /&gt;
#Moving down&lt;br /&gt;
%patch $9421 $09 $00 #While moving&lt;br /&gt;
%patch $9498 $09 $00 #After moving (Should be the same as above line)&lt;br /&gt;
%patch $9461 $02 $00 #Animation frames - 1&lt;br /&gt;
%patch $9444 $20 $00 #Tile left behind (White space)&lt;br /&gt;
&lt;br /&gt;
#Cursor speed:&lt;br /&gt;
%patch $9358 $01 $00 #Up&lt;br /&gt;
%patch $943B $01 $00 #Down&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Window size ==&lt;br /&gt;
&lt;br /&gt;
The menu size is in 8x8 blocks. Try not to make a window shorter or narrower than the text in it, it does not look pretty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
%patch $9601 [$000AW] #Height&lt;br /&gt;
%patch $9605 [$0012W] #Width&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
%patch $9094 [$000AW] #Height&lt;br /&gt;
%patch $9098 [$0012W] #Width&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu options ==&lt;br /&gt;
&lt;br /&gt;
These are a collection of two-byte addresses that &amp;quot;point&amp;quot; to the various options. The actual values are not important unless the actual option code is being patched (which is more complicated and should be unnecessary). When &amp;quot;removing&amp;quot; an option, your best bet is to simply delete the pointer. To keep the line in the menu box but make it unuseable, &#039;&#039;&#039;replace&#039;&#039;&#039; the pointer with the value replace the pointer with $95CAW or &#039;do nothing&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Menu pointers&lt;br /&gt;
%patch $95ED $9570W # New Game&lt;br /&gt;
             $9577W # Continue Game&lt;br /&gt;
             $957FW # Story&lt;br /&gt;
             $9589W # About ID...&lt;br /&gt;
             $9596W # High Scores&lt;br /&gt;
             $95A3W # Ordering Info&lt;br /&gt;
             $95B5W # Previews!&lt;br /&gt;
             $95C2W # Restart Demo&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
The menu text is one line of text for each item plus a bottom of window instruction telling the player how to use the menu. Two things can be done, the text can be removed entirely or it can be changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove text  ===&lt;br /&gt;
&lt;br /&gt;
Removing an item&#039;s text does not in fact disable the item, it merely changes the whole menu to not have that text. So for example, using the first line of the patch shown below deletes the &amp;quot;New game&amp;quot; line from the menu. New game is now &amp;quot;Continue game&amp;quot;, Continue is now &amp;quot;Story&amp;quot;, and so on, with the last item having a blank line. These patches are thus not very useful unless you are deleting items from the bottom of the menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1, Remove item text&amp;quot;&amp;gt;&lt;br /&gt;
%patch $9628 $90 $90 $90 #New Game&lt;br /&gt;
%patch $9631 $90 $90 $90 #Continue Game&lt;br /&gt;
%patch $963A $90 $90 $90 #Story&lt;br /&gt;
%patch $9643 $90 $90 $90 #About Id&lt;br /&gt;
%patch $964C $90 $90 $90 #High Scores&lt;br /&gt;
%patch $9655 $90 $90 $90 #Ordering Info&lt;br /&gt;
%patch $965E $90 $90 $90 #Previews!&lt;br /&gt;
%patch $9667 $90 $90 $90 #Restart Demo&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Change text ===&lt;br /&gt;
&lt;br /&gt;
Changing the text is more complicated. See [[Patch:Text patches]]. If your new text fits into the old text&#039;s space you only need to edit that, but it&#039;s possible you will need to edit the text pointers too. These are the &#039;addresses&#039; of the text and seeing the link above will show you how they work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Menu text:&lt;br /&gt;
%patch $15EE6 &amp;quot;   New Game&amp;quot; $0A $00&lt;br /&gt;
%patch $15EF3 &amp;quot;   Continue Game&amp;quot; $0A $00&lt;br /&gt;
%patch $15F05 &amp;quot;   Story&amp;quot; $0A $00&lt;br /&gt;
%patch $15F0F &amp;quot;   About ID...&amp;quot; $0A $00&lt;br /&gt;
%patch $15F1F &amp;quot;   High Scores&amp;quot; $0A $00&lt;br /&gt;
%patch $15F2F &amp;quot;   Ordering Info&amp;quot; $0A $00&lt;br /&gt;
%patch $15F41 &amp;quot;   Previews!&amp;quot; $0A $00&lt;br /&gt;
%patch $15F4F &amp;quot;   Restart Demo&amp;quot; $0A $0A $00&lt;br /&gt;
%patch $15F61 &amp;quot;Use the &amp;quot; $00&lt;br /&gt;
%patch $15F6A &amp;quot;arrows&amp;quot; $00&lt;br /&gt;
%patch $15F71 &amp;quot;mouse&amp;quot; $00&lt;br /&gt;
%patch $15F77 &amp;quot;joystick&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Text read from&lt;br /&gt;
%patch $9625 [$2E96W] #New Game&lt;br /&gt;
%patch $962E [$2EA3W] #Continue Game&lt;br /&gt;
%patch $9637 [$2EB5W] #Story&lt;br /&gt;
%patch $9640 [$2EBFW] #About Id&lt;br /&gt;
%patch $9649 [$2ECFW] #High Scores&lt;br /&gt;
%patch $9652 [$2EDFW] #Ordering info&lt;br /&gt;
%patch $965B [$2EF1W] #Previews!&lt;br /&gt;
%patch $9664 [$2EFFW] #Restart demo&lt;br /&gt;
%patch $966D [$2F11W] #Use the&lt;br /&gt;
%patch $9686 [$2F1AW] #Arrows (Using keyboard)&lt;br /&gt;
%patch $968B [$2F21W] #Mouse (Using mouse)&lt;br /&gt;
%patch $9690 [$2F27W] #Joystick (Using joystick)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
#Menu text:&lt;br /&gt;
%patch $1A6B9 &amp;quot;   New Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6C6 &amp;quot;   Continue Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6D8 &amp;quot;   Story&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6E2 &amp;quot;   About ID...&amp;quot; $0A $00&lt;br /&gt;
%patch $1A6F2 &amp;quot;   High Scores&amp;quot; $0A $00&lt;br /&gt;
%patch $1A702 &amp;quot;   Ordering Info&amp;quot; $0A $00&lt;br /&gt;
%patch $1A714 &amp;quot;   Previews!&amp;quot; $0A $00&lt;br /&gt;
%patch $1A722 &amp;quot;   Restart Demo&amp;quot; $0A $0A $00&lt;br /&gt;
%patch $1A734 &amp;quot;Use the &amp;quot; $00&lt;br /&gt;
%patch $1A73D &amp;quot;arrows&amp;quot; $00&lt;br /&gt;
%patch $1A744 &amp;quot;mouse&amp;quot; $00&lt;br /&gt;
%patch $1A74A &amp;quot;joystick&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Text read from&lt;br /&gt;
%patch $90B8 [$2F39W] #New Game&lt;br /&gt;
%patch $90C1 [$2F46W] #Continue Game&lt;br /&gt;
%patch $90CA [$2F58W] #Story&lt;br /&gt;
%patch $90D3 [$2F62W] #About Id&lt;br /&gt;
%patch $90DC [$2F72W] #High Scores&lt;br /&gt;
%patch $90E5 [$2F82W] #Ordering info&lt;br /&gt;
%patch $90EE [$2F94W] #Previews!&lt;br /&gt;
%patch $90F7 [$2FA2W] #Restart demo&lt;br /&gt;
%patch $9100 [$2FB4W] #Use the&lt;br /&gt;
%patch $9119 [$2FBDW] #Arrows (Using keyboard)&lt;br /&gt;
%patch $911E [$2FC4W] #Mouse (Using mouse)&lt;br /&gt;
%patch $9123 [$2FCAW] #Joystick (Using joystick)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 3&amp;quot;&amp;gt;&lt;br /&gt;
#Menu text:&lt;br /&gt;
%patch $1C7D5 &amp;quot;   New Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1C7E2 &amp;quot;   Continue Game&amp;quot; $0A $00&lt;br /&gt;
%patch $1C7F4 &amp;quot;   Story&amp;quot; $0A $00&lt;br /&gt;
%patch $1C7FE &amp;quot;   About ID...&amp;quot; $0A $00&lt;br /&gt;
%patch $1C80E &amp;quot;   High Scores&amp;quot; $0A $00&lt;br /&gt;
%patch $1C81E &amp;quot;   Ordering Info&amp;quot; $0A $00&lt;br /&gt;
%patch $1C830 &amp;quot;   Previews!&amp;quot; $0A $00&lt;br /&gt;
%patch $1C83E &amp;quot;   Restart Demo&amp;quot; $0A $0A $00&lt;br /&gt;
%patch $1C850 &amp;quot;Use the &amp;quot; $00&lt;br /&gt;
%patch $1C859 &amp;quot;arrows&amp;quot; $00&lt;br /&gt;
%patch $1C860 &amp;quot;mouse&amp;quot; $00&lt;br /&gt;
%patch $1C866 &amp;quot;joystick&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
%patch $9F13 [$2FB5W] #New Game&lt;br /&gt;
%patch $9F1B [$2FC2W] #Continue Game&lt;br /&gt;
%patch $9F23 [$2FD4W] #Story&lt;br /&gt;
%patch $9F2B [$2FDEW] #About Id&lt;br /&gt;
%patch $9F33 [$2FEEW] #High Scores&lt;br /&gt;
%patch $9F3B [$2FFEW] #Ordering info&lt;br /&gt;
%patch $9F43 [$3010W] #Previews!&lt;br /&gt;
%patch $9F4B [$301EW] #Restart demo&lt;br /&gt;
%patch $9F53 [$3030W] #Use the&lt;br /&gt;
%patch $9F6B [$3039W] #Arrows (Using keyboard)&lt;br /&gt;
%patch $9F75 [$3040W] #Mouse (Using mouse)&lt;br /&gt;
%patch $9F7F [$3046W] #Joystick (Using joystick)&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dreams =&lt;br /&gt;
&lt;br /&gt;
The Dreams menu is the most complex of any Keen game. In consists of a number of bitmaps that can be selected using the mouse or keyboard. The menu is divided into a number of screens that contain further options. At present, only the graphics can be changed and it is likely very difficult to change the layout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Galaxy =&lt;br /&gt;
&lt;br /&gt;
The Galaxy menu is more closely related to Keen Vorticons&#039; menu, but is also like the Dreams menu in that it also uses bitmaps (it even has its own fullscreen graphic). At present, both the text and the graphics of the menu can be changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
%patch $33656 &amp;quot;BEGIN EASY GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN NORMAL GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN HARD GAME&amp;quot; $00&lt;br /&gt;
%patch $3372F &amp;quot;NEW GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;LOAD GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;SAVE GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;CONFIGURE&amp;quot; $00 &lt;br /&gt;
              &amp;quot;END GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;PADDLE WAR&amp;quot; $00&lt;br /&gt;
              &amp;quot;QUIT&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
%patch $33792 &amp;quot;ESC TO BACK OUT&amp;quot; $00&lt;br /&gt;
%patch $337A2 &amp;quot;REALLY END CURRENT GAME?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO END IT&amp;quot; $00&lt;br /&gt;
%patch $337CD &amp;quot;REALLY QUIT?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO QUIT&amp;quot; $00&lt;br /&gt;
%patch $337EA &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO LOAD GAME&amp;quot; $00&lt;br /&gt;
%patch $33810 &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y FOR NEW GAME&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Options menu&lt;br /&gt;
%patch $33874 &amp;quot;SCORE BOX (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SCORE BOX (OFF)&amp;quot; $00&lt;br /&gt;
%patch $33893 &amp;quot;TWOBUTTON FIRING (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;TWOBUTTON FIRING (OFF)&amp;quot; $00&lt;br /&gt;
%patch $338C2 &amp;quot;FIX JERKY MOTION (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;FIX JERKY MOTION (OFF)&amp;quot; $00&lt;br /&gt;
%patch $338EF &amp;quot;SVGA COMPATIBILITY (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SVGA COMPATIBILITY (OFF)&amp;quot; $00&lt;br /&gt;
%patch $33920 &amp;quot;USE GRAVIS GAMEPAD (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;USE GRAVIS GAMEPAD (OFF)&amp;quot; $00&lt;br /&gt;
%patch $33951 &amp;quot;Score box now on&amp;quot; $00&lt;br /&gt;
              &amp;quot;Score box now off&amp;quot; $00&lt;br /&gt;
              &amp;quot;Press any key&amp;quot; $00&lt;br /&gt;
%patch $33CCA &amp;quot;RETURN TO GAME&amp;quot; $00 &lt;br /&gt;
              &amp;quot;RETURN TO DEMO&amp;quot; $00&lt;br /&gt;
%patch $33D11 &amp;quot;Quitting...&amp;quot; $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 5&amp;quot;&amp;gt;&lt;br /&gt;
%patch $3412F &amp;quot;BEGIN EASY GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN NORMAL GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN HARD GAME&amp;quot; $00&lt;br /&gt;
%patch $341F2 &amp;quot;NEW GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;LOAD GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;SAVE GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;CONFIGURE&amp;quot; $00&lt;br /&gt;
              &amp;quot;END GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PADDLE WAR&amp;quot; $00&lt;br /&gt;
              &amp;quot;QUIT&amp;quot; $00&lt;br /&gt;
%patch $34253 &amp;quot;ESC TO BACK OUT&amp;quot; $00&lt;br /&gt;
%patch $34263 &amp;quot;REALLY END CURRENT GAME?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO END IT&amp;quot; $00&lt;br /&gt;
%patch $3428E &amp;quot;REALLY QUIT?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO QUIT&amp;quot; $00&lt;br /&gt;
%patch $342AB &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO LOAD GAME&amp;quot; $00&lt;br /&gt;
%patch $342D1 &amp;quot;PRESS Y FOR NEW GAME&amp;quot; $00&lt;br /&gt;
%patch $3469A &amp;quot;RETURN TO GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;RETURN TO DEMO&amp;quot; $00&lt;br /&gt;
%patch $346E1 &amp;quot;Quitting...&amp;quot; $00 &lt;br /&gt;
&lt;br /&gt;
#Options menu text:&lt;br /&gt;
%patch $34324 &amp;quot;SCORE BOX (ON)&amp;quot; $00&lt;br /&gt;
%patch $34333 &amp;quot;SCORE BOX (OFF)&amp;quot; $00&lt;br /&gt;
%patch $34343 &amp;quot;TWO-BUTTON FIRING (ON)&amp;quot; $00&lt;br /&gt;
%patch $34354 &amp;quot;TWO-BUTTON FIRING (OFF)&amp;quot; $00&lt;br /&gt;
%patch $34372 &amp;quot;FIX JERKY MOTION (ON)&amp;quot; $00&lt;br /&gt;
%patch $34388 &amp;quot;FIX JERKY MOTION (OFF)&amp;quot; $00&lt;br /&gt;
%patch $3439F &amp;quot;SVGA COMPATIBILITY (ON)&amp;quot; $00&lt;br /&gt;
%patch $343B7 &amp;quot;SVGA COMPATIBILITY (OFF)&amp;quot; $00&lt;br /&gt;
%patch $343D0 &amp;quot;USE GRAVIS GAMEPAD (ON)&amp;quot; $00&lt;br /&gt;
%patch $343E8 &amp;quot;USE GRAVIS GAMEPAD (OFF)&amp;quot; $00&lt;br /&gt;
%patch $34401 &amp;quot;Score box now on&amp;quot; $00&lt;br /&gt;
              &amp;quot;Score box now off&amp;quot; $00&lt;br /&gt;
              &amp;quot;Press any key&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Text called from&lt;br /&gt;
%patch $1C0A4 $3FE4W #Score on&lt;br /&gt;
%patch $1C0A9 $3FF3W #Score off&lt;br /&gt;
%patch $1C0BC $4003W #Two button on&lt;br /&gt;
%patch $1C0C1 $4014W #Two button off&lt;br /&gt;
%patch $1C0D4 $4032W #Jerk on&lt;br /&gt;
%patch $1C0D9 $4048W #Jerk off&lt;br /&gt;
%patch $1C0EC $405FW #SVGA on&lt;br /&gt;
%patch $1C0F1 $4077W #SVGA off&lt;br /&gt;
%patch $1C142 $4090W #Gravis on&lt;br /&gt;
%patch $1C147 $40A8W #Gravis off&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 6&amp;quot;&amp;gt;&lt;br /&gt;
%patch $34F90 &amp;quot;BEGIN EASY GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN NORMAL GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;BEGIN HARD GAME&amp;quot; $00&lt;br /&gt;
%patch $35069 &amp;quot;NEW GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;LOAD GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;SAVE GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;CONFIGURE&amp;quot; $00&lt;br /&gt;
              &amp;quot;END GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PADDLE WAR&amp;quot; $00&lt;br /&gt;
              &amp;quot;QUIT&amp;quot; $00&lt;br /&gt;
%patch $350CC &amp;quot;ESC TO BACK OUT&amp;quot; $00&lt;br /&gt;
%patch $350DC &amp;quot;REALLY END CURRENT GAME?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO END IT&amp;quot; $00&lt;br /&gt;
%patch $35107 &amp;quot;REALLY QUIT?&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO QUIT&amp;quot; $00&lt;br /&gt;
%patch $35124 &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;PRESS Y TO LOAD GAME&amp;quot; $00&lt;br /&gt;
%patch $3514A &amp;quot;YOU&#039;RE IN A GAME&amp;quot; $00&lt;br /&gt;
   &amp;quot;PRESS Y FOR NEW GAME&amp;quot; $00&lt;br /&gt;
%patch $35604 &amp;quot;RETURN TO GAME&amp;quot; $00&lt;br /&gt;
              &amp;quot;RETURN TO DEMO&amp;quot; $00&lt;br /&gt;
%patch $3564B &amp;quot;Quitting...&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Options menu&lt;br /&gt;
%patch $351AE &amp;quot;SCORE BOX (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SCORE BOX (OFF)&amp;quot; $00&lt;br /&gt;
%patch $351CD &amp;quot;TWO-BUTTON FIRING (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;TWO-BUTTON FIRING (OFF)&amp;quot; $00&lt;br /&gt;
%patch $351FC &amp;quot;FIX JERKY MOTION (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;FIX JERKY MOTION (OFF)&amp;quot; $00&lt;br /&gt;
%patch $35229 &amp;quot;SVGA COMPATIBILITY (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;SVGA COMPATIBILITY (OFF)&amp;quot; $00&lt;br /&gt;
%patch $3525A &amp;quot;USE GRAVIS GAMEPAD (ON)&amp;quot; $00&lt;br /&gt;
              &amp;quot;USE GRAVIS GAMEPAD (OFF)&amp;quot; $00&lt;br /&gt;
%patch $3528B &amp;quot;Score box now on&amp;quot; $00&lt;br /&gt;
              &amp;quot;Score box now off&amp;quot; $00&lt;br /&gt;
              &amp;quot;Press any key&amp;quot; $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
&lt;br /&gt;
There are numerous functions that set watch text and background colours, allowing you to have different colours in different parts of the watch.  Note that the font colour is dependent on the background color.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# draw_menu_item&lt;br /&gt;
%patch $1A9C6&lt;br /&gt;
$B0 8				# mov al, BGCOLOR  ; NOTE THIS WORKS BECAUSE AX MUST BE 0 AT THIS OP&lt;br /&gt;
$50					# push ax &lt;br /&gt;
$B0 8				# mov al 8&lt;br /&gt;
$50					# push ax&lt;br /&gt;
$B0 $9F				# mov al 9fh&lt;br /&gt;
$50					# push ax&lt;br /&gt;
&lt;br /&gt;
%patch $1AA06 2		#menu font 1&lt;br /&gt;
%patch $1AA0D 10	#menu font 2&lt;br /&gt;
%patch $1AA33 15	#menu font 3&lt;br /&gt;
&lt;br /&gt;
# draw_menu_footer&lt;br /&gt;
%patch $1AA40 10	#font 1&lt;br /&gt;
%patch $1AABF 0		#font 2&lt;br /&gt;
%patch $1AAC1 10W	#hlin 1&lt;br /&gt;
&lt;br /&gt;
# draw_current_menu&lt;br /&gt;
%patch $1AB14 10W	#Hlin 1&lt;br /&gt;
&lt;br /&gt;
# center_watch_window&lt;br /&gt;
%patch $1AC5B 8W	#BAR 1&lt;br /&gt;
%patch $1AC75 10W	#Hlin 1&lt;br /&gt;
%patch $1AC90 10W	#Hlin 2&lt;br /&gt;
%patch $1ACAE 10W	#Vlin 1&lt;br /&gt;
%patch $1ACC9 10W	#Vlin 2&lt;br /&gt;
&lt;br /&gt;
#green_message_box&lt;br /&gt;
%patch $1AE6C 2		#font 1&lt;br /&gt;
%patch $1AEA3 10W	#hlin 1&lt;br /&gt;
%patch $1AEC8 10	#fontcolor 1&lt;br /&gt;
&lt;br /&gt;
#configure_menu_proc&lt;br /&gt;
%patch $1B2F6 10	#font 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#set_key_control&lt;br /&gt;
%patch $1B33B 2		# font 1&lt;br /&gt;
%patch $1B35E 8W	# BAR 1&lt;br /&gt;
%patch $1B381 8W	# BAR 2&lt;br /&gt;
&lt;br /&gt;
#controls_menu_proc&lt;br /&gt;
%patch $1B50F 8W	# BAR 1&lt;br /&gt;
%patch $1B543 2		# font1&lt;br /&gt;
%patch $1B547 10	# font1B&lt;br /&gt;
%patch $1B572 8W	# BAR 2 (XOR)&lt;br /&gt;
%patch $1B595 8W	# BAR 3&lt;br /&gt;
&lt;br /&gt;
#print_joystick_prompt&lt;br /&gt;
%patch $1B64F 8W	# Bar 1&lt;br /&gt;
%patch $1B670 2		# font1&lt;br /&gt;
&lt;br /&gt;
#print_gamepad_prompt&lt;br /&gt;
%patch $1B987 8W	# Bar 1&lt;br /&gt;
&lt;br /&gt;
#gamepad_menu_proc&lt;br /&gt;
%patch $1BB9C 2		#font 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#draw_savegame_item&lt;br /&gt;
%patch $1BC73 2		#font 1a&lt;br /&gt;
%patch $1BC77 10	#font 1b&lt;br /&gt;
&lt;br /&gt;
%patch $1BC7E 8W	#Hlin 1, 2, Vlin 1,2&lt;br /&gt;
&lt;br /&gt;
#load_game_menu_proc&lt;br /&gt;
%patch $1BEA7 8W	#bar 1 &lt;br /&gt;
&lt;br /&gt;
#save_savegame_item&lt;br /&gt;
%patch $1BFAF 2		#font 1&lt;br /&gt;
%patch $1BFB1 8W	#Bar 1&lt;br /&gt;
&lt;br /&gt;
#Paddle War left out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#do_main_menu&lt;br /&gt;
%patch $1CC69 15	#font 1&lt;br /&gt;
&lt;br /&gt;
#init_menu&lt;br /&gt;
%patch $1CD8E 15	#font 1&lt;br /&gt;
&amp;lt;/patch&amp;gt;                              &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Play music in menu ===&lt;br /&gt;
&lt;br /&gt;
This allows you to play music in the main menu. As a side effect the menu background color is black, not cyan. This only matters if your menu image is smaller than 320x200. The value used here is the level who&#039;s music is used. (For example a value of 0 will play the map level&#039;s music.) See [[Patch:Music]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Play music in the menu&lt;br /&gt;
%patch $1CC6F $06BD20C7RL&lt;br /&gt;
%patch $1CC6B [$0003W]      #Play this level&#039;s song&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 1|}}&lt;br /&gt;
{{PatchCategories|Keen 2|}}&lt;br /&gt;
{{PatchCategories|Keen 3|}}&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Levels&amp;diff=19457</id>
		<title>Patch:Levels</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Levels&amp;diff=19457"/>
		<updated>2012-01-22T01:52:02Z</updated>

		<summary type="html">&lt;p&gt;Lemm: keen 4 end game after n&amp;#039;th level&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers patches relating to levels. Related patches are [[Patch:Level exit]] and [[Patch:Gameplay]]. For patches involving the cities needing to be saved in [[Keen 2]] see [[Patch:Cities]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing levels ==&lt;br /&gt;
&lt;br /&gt;
Keen Vorticons levels have a number of editors available, editing is a simple process and does not require patching. Keen Galaxy on the other hand requires patching of the &#039;maphead&#039; file when levels are edited. (See [[TED5]].) Keen Dreams requires that the levels be decompressed by [[KDLevel]] before being edited by any Galaxy editor and recompressed before playing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extra levels ==&lt;br /&gt;
&lt;br /&gt;
In Keen Vorticons it is possible to use levels between 30-100 on the map, though only some work and none will be done properly (They will be replayable after exit.) It is also possible that they may be unstable and\or overwrite important stuff. To properly set up levels there is a patch that fits 32 level into the space for the default 16. This affects the [[Patch:Item bytes|item bytes]] of these levels, each becomes 1 byte long. (So level 1 in Keen 1 is still $A6 $AA, but level 2 is $A7 $AA and so on.)&lt;br /&gt;
&lt;br /&gt;
Changing the &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;$01&amp;lt;/font&amp;gt; to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;$00&amp;lt;/font&amp;gt; will allow Keen to replay all the levels as many times as he wants. [[Patch:Levels#Infinite_replays| (See below)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#32 levels:&lt;br /&gt;
#Let Keen enter levels if these values are 0&lt;br /&gt;
%patch $7D3A  $90 $90 $80 $BF $A6 $AA $00&lt;br /&gt;
%patch $7FCA  $90 $90 $80 $BF $A5 $AA $00&lt;br /&gt;
#When starting a new game, make all 32 levels not done&lt;br /&gt;
%patch $9065  $90 $90 $C6 $87 $A6 $AA $00 $90&lt;br /&gt;
%patch $9070  $83 $7E $F8 $20&lt;br /&gt;
#Change things when marking a level as done&lt;br /&gt;
%patch $8013  $90 $90 $C6 $87 $A5 $AA [$01] $90&lt;br /&gt;
%patch $7E48  $83 $7E $FC $20&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 3&amp;quot;&amp;gt;&lt;br /&gt;
#32 levels:&lt;br /&gt;
#Let Keen enter levels if these values are 0&lt;br /&gt;
%patch $8AE2  $90 $90 $80 $BF $26 $9D $00&lt;br /&gt;
%patch $8D9A  $90 $90 $80 $BF $25 $9D $00&lt;br /&gt;
#When starting a new game, make all 32 levels not done&lt;br /&gt;
%patch $9944  $90 $90 $C6 $87 $26 $9D $00 $90&lt;br /&gt;
%patch $994F  $20&lt;br /&gt;
#Change things when marking a level as done&lt;br /&gt;
%patch $8DE1  $90 $90 $C6 $87 $25 $9D [$01] $90&lt;br /&gt;
%patch $8BF9  $20&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of levels in Keen 4-6 and Dreams are limited by a simple check on the map, it is currently possible to change the number of levels in Keen 4, however this is complicated by the fact that all levels must have valid names and level entry texts. It is possible to use level 14 in Keen 5 however, as it is available, but unused.&lt;br /&gt;
&lt;br /&gt;
The check works as follows, if a sprite is between two values, a third value is subtracted from it and this is the level number. For Keen Galaxy this &#039;base value&#039; is $C000. So If Keen tries to enter a sprite of value $C011 he can, it passes both value checks, and represents level $0011, or 17. Levels not falling between this value can be warped to or have demos recorded in them (And played back) if those two cheats allow it, but cannot be entered from the map. The high scores is one of these levels.&lt;br /&gt;
&lt;br /&gt;
If the number of levels is increased then care must be taken, [[Patch:Levels#Level_text| each level must have a valid level entry text, AND music, or the game will freeze.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#How many levels&lt;br /&gt;
%patch $DF56 $C000W #Sprite value of map level&lt;br /&gt;
%patch $DF5D $C012W #Sprite value of highest playable level&lt;br /&gt;
%patch $DF71 $C000W #This must match first value (Value of any level is sprite value minus this)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Infinite replays ==&lt;br /&gt;
&lt;br /&gt;
This allows a player to play the level as many times as they want. The level is not marked as completed when Keen exits it. If the Vorticons 32 level patch is being used this must be after it. (It can be built into that patch, [[Patch:Levels#Extra_levels| see above.)]] In Keen Galaxy these level(s) are known as &#039;bwb levels&#039; as the only level this applies to by default is the BWB. The bwb patch uses [[Patch:Jump conditions|jump conditions]]. Use only one of the three possibilities given at a time, they are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Infinite replays of all levels:&lt;br /&gt;
%patch $8019 $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 3&amp;quot;&amp;gt;&lt;br /&gt;
#Infinite replays of all levels:&lt;br /&gt;
%patch $8DE7 $00&lt;br /&gt;
&lt;br /&gt;
#Only levels &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;$04&amp;lt;/font&amp;gt; and below get marked as done, others are infinite replay&lt;br /&gt;
%patch $8BF9 [$04]&lt;br /&gt;
%patch $8DA1 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#BwB level(s):&lt;br /&gt;
%patch $60FD [$xx] $77 #Any level above [$xx]&lt;br /&gt;
%patch $60FD [$xx] $7C #Any level below [$xx]&lt;br /&gt;
%patch $60FD [$xx] $74 #Just level [$xx] (If 0, NO BwB level)&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Complete levels to win ==&lt;br /&gt;
&lt;br /&gt;
These patches allow Keen to win the game only if he completes either a specific level or a specific number of levels. (For Keen 3 this is level 16.) For the Keen 1 &#039;level 16 to win&#039; patch you will need to see [[Patch:Item bytes|item bytes]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Complete [x+1] levels to win:&lt;br /&gt;
#SIDE EFFECT: Ship parts don&#039;t matter&lt;br /&gt;
%patch $8020 $83 $BF {$AAA6W} [$0x] $75 $1E $E8 $62 $01 $EB $29&lt;br /&gt;
&lt;br /&gt;
#Complete the game when level 16 is done:&lt;br /&gt;
%patch $8022 {$AAC4W} $00 $74 #The byte C4 sets a win condition to level 16, level&lt;br /&gt;
%patch $8029 {$AAC4W} $00 $74 #15 is C2, etc. For the 32 levels patch use B5 with&lt;br /&gt;
%patch $8030 {$AAC4W} $00 $74 #level 15 as B4, etc. This patch means you can have&lt;br /&gt;
%patch $8037 {$AAC4W} $00 $74 #up to four levels as winning conditions&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
#Only win when exiting level [$0x]&lt;br /&gt;
%patch $8436  $83 $3E $3C $80 [$0x] $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keen 4 has a 2-level demo trial parameter (/DEMO switch).  By tweaking this code a little bit, it can be used to end the game after a certain level is beaten.  If you want to make a &amp;quot;trial demo&amp;quot; of your own, you can patch this in as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
# MAKE GAME END AFTER LEVEL X&lt;br /&gt;
# Always check to see if level X was beat, even if not in demo mode.&lt;br /&gt;
%patch $6B4E $90 $90 #nop out if-else jump&lt;br /&gt;
# Specify level that must be beaten to win game (default is 2)&lt;br /&gt;
%patch $6B54 2   #change level&lt;br /&gt;
%patch $6B57 $EB $99  #jump to end if we beat level x&lt;br /&gt;
&lt;br /&gt;
# Enable &amp;quot;2 level demo&amp;quot; parameter by default&lt;br /&gt;
# Note: this is not necessary to make the game end after level X&lt;br /&gt;
%patch $3E90 $90 $90 #nop out an if else&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
                  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Level text ==&lt;br /&gt;
&lt;br /&gt;
Keen Galaxy and Dreams has individual names for its levels. These work in a complex manner. There are lists of level names, the location of which is controlled by lists of pointers, the location of which is referenced in the code. All patches that follow use the default values.&lt;br /&gt;
&lt;br /&gt;
=== Pointer list locations ===&lt;br /&gt;
&lt;br /&gt;
These are the start of the level names, where the list of level names are read from. They are in [[Patch:Text patches|standard text patch format]] with one twist, there are TWO word values giving the location in the code minus the text start location instead of one. In the Keen 4 example below the text starts at $2EE70 so the level name list is at $2EE70 + $18F4 = $30764&lt;br /&gt;
&lt;br /&gt;
There are two values for each reference because the level name pointers are 32-bit (Four bytes), meaning that two values each of two bytes must be read then added together. The first value is by default unimportant since all of those values are zero. (A side effect of this is that all default level names must be multiples of 16 bytes long.) The two values in each reference don&#039;t have to be anywhere near each other, but unless they are two bytes different this makes things a lot more complex.&lt;br /&gt;
&lt;br /&gt;
There shouldn&#039;t be any need to relocate the pointer lists unless you are planning on adding a lot of extra levels and the default locations don&#039;t have enough space. There are three references, one loads the level entry text when Keen enters levels. The remaining two loads the level name when Keen dies and when the status window is displayed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Where level entry text list is located:&lt;br /&gt;
%patch $6274 [$1958W]&lt;br /&gt;
%patch $6270 [$195AW]&lt;br /&gt;
&lt;br /&gt;
#Where level name list is located:&lt;br /&gt;
%patch $6648 [$18F4W] #Didn&#039;t make it past 1&lt;br /&gt;
%patch $6644 [$18F6W] #Didn&#039;t make it past 2&lt;br /&gt;
%patch $7D2C [$18F4W] #Status window 1&lt;br /&gt;
%patch $7D28 [$18F6W] #Status window 2&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Level Name Pointer Lists ===&lt;br /&gt;
&lt;br /&gt;
The next step is the level name pointer list, a list of [[Patch:Executable segments|32-bit values giving the location of the level entry texts and names.]] By default the lower two bytes of these values is zero, meaning the location of each text entry can be found by reading the first five letters of the patch. Thus the Keen 4 map name value of $1F040000RL points to the text at $1F040. This leads to the side effect that all level names are multiples of 16 bytes long.&lt;br /&gt;
&lt;br /&gt;
There is some space in the level lists for extra levels, in Keen 4 up to six new entries are allowed without having to change the list location. (Just add them to the end of the default list.) [[Patch:Levels#Extra_levels|This is important when adding extra levels as levels need text or the game will freeze.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Level name pointers:&lt;br /&gt;
%patch $30764 $1F040000RL #Map&lt;br /&gt;
              $1F050000RL #Level 1&lt;br /&gt;
              $1F060000RL #Level 2&lt;br /&gt;
              $1F070000RL #Level 3&lt;br /&gt;
              $1F090000RL #Level 4...&lt;br /&gt;
              $1F0B0000RL&lt;br /&gt;
              $1F0C0000RL&lt;br /&gt;
              $1F0D0000RL&lt;br /&gt;
              $1F0E0000RL&lt;br /&gt;
              $1F0F0000RL&lt;br /&gt;
              $1F100000RL&lt;br /&gt;
              $1F110000RL&lt;br /&gt;
              $1F130000RL&lt;br /&gt;
              $1F150000RL&lt;br /&gt;
              $1F180000RL&lt;br /&gt;
              $1F1A0000RL&lt;br /&gt;
              $1F1B0000RL&lt;br /&gt;
              $1F1C0000RL&lt;br /&gt;
              $1F1D0000RL #Bwb Rocket&lt;br /&gt;
&lt;br /&gt;
#Level entrance text pointers&lt;br /&gt;
%patch $307C8 $1F1F0000RL #Map&lt;br /&gt;
              $1F210000RL #Level 1&lt;br /&gt;
              $1F240000RL #Level 2&lt;br /&gt;
              $1F260000RL #Level 3...&lt;br /&gt;
              $1F290000RL&lt;br /&gt;
              $1F2D0000RL&lt;br /&gt;
              $1F300000RL&lt;br /&gt;
              $1F330000RL&lt;br /&gt;
              $1F350000RL&lt;br /&gt;
              $1F380000RL&lt;br /&gt;
              $1F3A0000RL&lt;br /&gt;
              $1F3D0000RL&lt;br /&gt;
              $1F400000RL&lt;br /&gt;
              $1F430000RL&lt;br /&gt;
              $1F470000RL&lt;br /&gt;
              $1F4B0000RL&lt;br /&gt;
              $1F4E0000RL&lt;br /&gt;
              $1F510000RL&lt;br /&gt;
              $1F540000RL #Bwb Rocket&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Level names and entrance texts ===&lt;br /&gt;
&lt;br /&gt;
These are almost standard [[Patch:Text patches|text patches]]. There is a program to automate patching level names, [[Startext]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Level names:&lt;br /&gt;
%patch $1F040 &amp;quot;Shadowlands    &amp;quot; $00&lt;br /&gt;
%patch $1F050 &amp;quot;Border Village &amp;quot; $00&lt;br /&gt;
%patch $1F060 &amp;quot;Slug Village   &amp;quot; $00&lt;br /&gt;
%patch $1F0B0 &amp;quot;Chasm of Chills&amp;quot; $00&lt;br /&gt;
%patch $1F0C0 &amp;quot;Crystalus      &amp;quot; $00&lt;br /&gt;
%patch $1F0D0 &amp;quot;Hillville      &amp;quot; $00&lt;br /&gt;
%patch $1F0E0 &amp;quot;Sand Yego      &amp;quot; $00&lt;br /&gt;
%patch $1F0F0 &amp;quot;Miragia        &amp;quot; $00&lt;br /&gt;
%patch $1F100 &amp;quot;Lifewater Oasis&amp;quot; $00&lt;br /&gt;
%patch $1F1A0 &amp;quot;Isle of Tar    &amp;quot; $00&lt;br /&gt;
%patch $1F1B0 &amp;quot;Isle of Fire   &amp;quot; $00&lt;br /&gt;
%patch $1F1C0 &amp;quot;Well of Wishes &amp;quot; $00&lt;br /&gt;
%patch $1F1D0 &amp;quot;Bean-with-Bacon&amp;quot; $0A&lt;br /&gt;
              &amp;quot;Megarocket     &amp;quot; $00&lt;br /&gt;
%patch $1F070 &amp;quot;The Perilous Pit               &amp;quot; $00&lt;br /&gt;
%patch $1F090 &amp;quot;Cave of the Descendents        &amp;quot; $00&lt;br /&gt;
%patch $1F110 &amp;quot;Pyramid of the Moons           &amp;quot; $00&lt;br /&gt;
%patch $1F130 &amp;quot;Pyramid of Shadows             &amp;quot; $00&lt;br /&gt;
%patch $1F150 &amp;quot;Pyramid of the&amp;quot;                  $0A&lt;br /&gt;
              &amp;quot;Gnosticene Ancients            &amp;quot; $00&lt;br /&gt;
%patch $1F180 &amp;quot;Pyramid of the Forbidden       &amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Keen entering levels&lt;br /&gt;
%patch $1F1F0 &amp;quot;Keen enters the&amp;quot; $0A &amp;quot;Shadowlands    &amp;quot; $00&lt;br /&gt;
%patch $1F240 &amp;quot;Keen slips into&amp;quot; $0A &amp;quot;Slug Village   &amp;quot; $00&lt;br /&gt;
%patch $1F330 &amp;quot;Keen stubmles upon&amp;quot; $0A &amp;quot;Hillville   &amp;quot; $00&lt;br /&gt;
%patch $1F380 &amp;quot;Keen disappears into&amp;quot; $0A &amp;quot;Miragia   &amp;quot; $00&lt;br /&gt;
%patch $1F210 &amp;quot;Keen makes a run for&amp;quot; $0A &amp;quot;the Border Village        &amp;quot; $00&lt;br /&gt;
%patch $1F260 &amp;quot;Keen plummets into&amp;quot; $0A &amp;quot;the The Perilous Pit        &amp;quot; $00&lt;br /&gt;
%patch $1F2D0 &amp;quot;Keen shivers along&amp;quot; $0A &amp;quot;the Chasm of Chills         &amp;quot; $00&lt;br /&gt;
%patch $1F300 &amp;quot;Keen reflects upon&amp;quot; $0A &amp;quot;entering Crystalus          &amp;quot; $00&lt;br /&gt;
%patch $1F350 &amp;quot;Keen grits his teeth&amp;quot; $0A &amp;quot;and enters Sand Yego      &amp;quot; $00&lt;br /&gt;
%patch $1F3A0 &amp;quot;Keen crawls into&amp;quot; $0A &amp;quot;Lifewater Oasis               &amp;quot; $00&lt;br /&gt;
%patch $1F3D0 &amp;quot;Keen backs into the&amp;quot; $0A &amp;quot;Pyramid of the Moons       &amp;quot; $00&lt;br /&gt;
%patch $1F400 &amp;quot;Keen move silently in&amp;quot; $0A &amp;quot;the Pyramid of Shadows   &amp;quot; $00&lt;br /&gt;
%patch $1F4B0 &amp;quot;Keen mucks along the&amp;quot; $0A &amp;quot;Isle of Tar               &amp;quot; $00&lt;br /&gt;
%patch $1F4E0 &amp;quot;Keen blazes across the&amp;quot; $0A &amp;quot;Isle of Fire            &amp;quot; $00&lt;br /&gt;
%patch $1F510 &amp;quot;Keen hopefully enters&amp;quot; $0A &amp;quot;the Well of Wishes       &amp;quot; $00&lt;br /&gt;
%patch $1F290 &amp;quot;Keen plods down into&amp;quot; $0A &amp;quot;the Cave of the Descendents               &amp;quot; $00&lt;br /&gt;
%patch $1F430 &amp;quot;Keen reverently enters&amp;quot; $0A &amp;quot;the Pyramid of the&amp;quot; $0A &amp;quot;Gnosticene Ancients  &amp;quot; $00&lt;br /&gt;
%patch $1F470 &amp;quot;Keen hesitantly crosses&amp;quot; $0A &amp;quot;into the Pyramid of the&amp;quot; $0A &amp;quot;Forbidden      &amp;quot; $00&lt;br /&gt;
%patch $1F540 &amp;quot;Keen launches into the&amp;quot; $0A &amp;quot;Bean-with-Bacon&amp;quot; $0A &amp;quot;Megarocket              &amp;quot; $00&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Misc level text ===&lt;br /&gt;
&lt;br /&gt;
There are also level entry texts and some texts used in the &#039;try again&#039; window. These are of course [[Patch:Text patches|text patches]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Try again window text&lt;br /&gt;
%patch $2F16F &amp;quot;You didn&#039;t make it past&amp;quot; $00&lt;br /&gt;
%patch $2F187 &amp;quot;Try Again&amp;quot; $00&lt;br /&gt;
%patch $2F191 &amp;quot;Exit to Shadowlands&amp;quot; $00&lt;br /&gt;
%patch $2F1F9 &amp;quot;One moment&amp;quot; $00 #Used while loading a level&lt;br /&gt;
%patch $2F47C &amp;quot;PAUSED&amp;quot; $00&lt;br /&gt;
&lt;br /&gt;
#Try again texts read from:&lt;br /&gt;
%patch $66A7 $FF $02 #Didn&#039;t make it past&lt;br /&gt;
%patch $66DC $17 $03 #Try again&lt;br /&gt;
%patch $66F6 $21 $03 #Exit&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 5&amp;quot;&amp;gt;&lt;br /&gt;
#Try again window text&lt;br /&gt;
%patch $305E3 &amp;quot;You didn&#039;t make it past&amp;quot; $00&lt;br /&gt;
%patch $305FB &amp;quot;Try Again&amp;quot; $00&lt;br /&gt;
%patch $30605 &amp;quot;Exit to Armageddon&amp;quot; $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 6&amp;quot;&amp;gt;&lt;br /&gt;
#Try again texts read from:&lt;br /&gt;
%patch $30F73 &amp;quot;You didn&#039;t make it past&amp;quot; $00&lt;br /&gt;
%patch $30F8B &amp;quot;Try Again&amp;quot; $00&lt;br /&gt;
%patch $30F95 &amp;quot;Exit to Fribbulus Xax&amp;quot; $00&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Level markers ==&lt;br /&gt;
&lt;br /&gt;
For patches relating to level markers see [[Patch:Done markers]], [[Patch:Done sign]] and [[Patch:Flags]]. The remaining patches deal with when the markers are used. (Note, the above patch for replayable levels affects where Keen Vorticons done signs appear.)&lt;br /&gt;
&lt;br /&gt;
In Keen Vorticons there are two stages to the flag, the flipping stage, and the placement stage. Any tiles in the foreground layer that have the level&#039;s entrance sprite on them will also be changed (By default to tile 0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Never produce a flipping flag on level exit,&lt;br /&gt;
#but still have &#039;placed&#039; flags&lt;br /&gt;
%patch $6145 $90 $90 $90 $90 $90&lt;br /&gt;
&lt;br /&gt;
#No flags at all, ever&lt;br /&gt;
%patch $6137 $D0&lt;br /&gt;
&lt;br /&gt;
#Flags appear in holders AND on all level entry sprites&lt;br /&gt;
%patch $6139 $90 $90&lt;br /&gt;
&lt;br /&gt;
#Tile $D0xx marked map tiles are replaced with when&lt;br /&gt;
#level finished. (By default, 0, tile removed entirely)&lt;br /&gt;
%patch $6130 [$0000W]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
The last patch in this section uses [[Patch:Jump conditions|jump conditions]]. Use only one of the three possibilities given.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 4&amp;quot;&amp;gt;&lt;br /&gt;
#Keen can exit the well of wishes by going offscreen (like normal levels, changes scrolling)&lt;br /&gt;
%patch $905B $90 $90&lt;br /&gt;
&lt;br /&gt;
#Automatically restart a level when killed (No map option) IF:&lt;br /&gt;
%patch $6686 [$xx] $7D #Keen has [$xx] or less lives left&lt;br /&gt;
%patch $6686 [$xx] $7E #Keen has [$xx] or more lives left&lt;br /&gt;
%patch $6687 $90 $90 #Always&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 1|}}&lt;br /&gt;
{{PatchCategories|Keen 2|}}&lt;br /&gt;
{{PatchCategories|Keen 3|}}&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Keen_(Keen_4)&amp;diff=19429</id>
		<title>Patch:Keen (Keen 4)</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Keen_(Keen_4)&amp;diff=19429"/>
		<updated>2011-12-20T18:30:48Z</updated>

		<summary type="html">&lt;p&gt;Lemm: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains patches relating to Keen as a sprite in [[Keen 4]]. That is, such things as the sprites used, the speeds and sounds. It does not cover patches relating to gameplay such as those that make levels scroll or change keys. Those can be found at [[Patch:Gameplay (Keen Galaxy)]]. It is divided into sections relating to the various sprite properties the patches involved. Being fluent with various sprite patch pages will help when working with these patches.&lt;br /&gt;
&lt;br /&gt;
As little is known about Keen, there is less information here than for most sprites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Swimming Keen ==&lt;br /&gt;
&lt;br /&gt;
These patches relate to Keen swimming, in the Well Of Wishes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speed ===&lt;br /&gt;
&lt;br /&gt;
When swimming Keen has momentum, if you press the right arrow key, Keen will move right, and continue moving right for a short time before coming to a stop. The following patches control this momentum, that is, they are not the speeds Keen has when arrows are pressed.&lt;br /&gt;
&lt;br /&gt;
By default these speeds counteract Keen&#039;s speed, the left speed slows his left speed to a standstill for example. If these are set to $0000W then Keen will keep moving in that direction unless another arrow key is pressed. (He will become &#039;frictionless&#039;) If they are set to one value Keen will feel a constant tug in that direction, as if a current were pulling him. (For example, setting all horizontal speeds to $0001W will make Keen drift right, even if no keys are pressed, and make it harder for him to swim left.) If the values are $0003W or above the &#039;current&#039; is so strong Keen will not be able to move against it, effectively making him constantly move in one direction.&lt;br /&gt;
&lt;br /&gt;
Increasing all values makes Keen swim faster overall.&lt;br /&gt;
&lt;br /&gt;
There are three sections, the first controls horizontal movement, the second vertical, the third is unknown. Notably, gravity is &#039;&#039;always&#039;&#039; &#039;on&#039; by default, constantly pulling Keen down. There are two values for each direction, the first when no arrow key is pressed (when Keen will slowly stop moving) and the second, larger when Keen is trying to turn around (when Keen will quickly stop moving and start moving in the opposite direction.) If the &#039;turning&#039; values are set to $0000W then Keen will have to stop moving before he can start moving in the opposite direction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Swimming momentum speeds&amp;quot;&amp;gt;&lt;br /&gt;
#Horizontal&lt;br /&gt;
%patch $F7C4 [$FFFDW] #Left (Change direction)&lt;br /&gt;
%patch $F7CF [$FFFFW] #Left&lt;br /&gt;
%patch $F7DA [$0001W] #Right&lt;br /&gt;
%patch $F7DF [$0003W] #Right (Change direction)&lt;br /&gt;
&lt;br /&gt;
#Vertical&lt;br /&gt;
%patch $F819 [$FFFDW] #Up (Change direction)&lt;br /&gt;
%patch $F826 [$FFFFW] #Up&lt;br /&gt;
%patch $F833 [$0001W] #Down (This doubles as gravity)&lt;br /&gt;
%patch $F83A [$0003W] #Down  (Change direction)&lt;br /&gt;
&lt;br /&gt;
#Unknown&lt;br /&gt;
%patch $F92D [$0001W]&lt;br /&gt;
%patch $F93B [$FFFFW]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bubbles\no bubbles produced ===&lt;br /&gt;
&lt;br /&gt;
By default Keen regularly produces bubble sprites which then move offscreen. It is possible to alter what is produced, however if the sprites are not regularly disposed of then they will quickly build up and overload the sprite array. It is also possible to stop anything being produced at all. There are four values, each produces a bubble with a different animation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;What swimming Keen produces&amp;quot;&amp;gt;&lt;br /&gt;
#What is produced by swimming Keen&lt;br /&gt;
%patch $F6AB  [$1A64W] #Bubble 1&lt;br /&gt;
%patch $F6BD  [$1A82W] #Bubble 2&lt;br /&gt;
%patch $F6CF  [$1AA0W] #Bubble 3&lt;br /&gt;
%patch $F6E1  [$1ABEW] #Bubble 4&lt;br /&gt;
&lt;br /&gt;
#Stop bubbles being produced (Each line stops one of the above bubbles)&lt;br /&gt;
%patch $F6B2 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $F6C4 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $F6D6 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $F6E8 $90 $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bubble sound ===&lt;br /&gt;
&lt;br /&gt;
This sound is produced every time swimming Keen produces a bubble (See above section) about once per second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Bubble sound&amp;quot;&amp;gt;&lt;br /&gt;
#Sound&lt;br /&gt;
%patch $F6F1  [$24]&lt;br /&gt;
&lt;br /&gt;
#Don&#039;t play sound&lt;br /&gt;
%patch $F6F4 $90 $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Terrestrial Keen ==&lt;br /&gt;
&lt;br /&gt;
=== Jumping Physics ===&lt;br /&gt;
&lt;br /&gt;
The variables that control the height and duration of Keen&#039;s jumps are spread over several behaviours.  There are two important parameters: initial velocity, and duration.  The velocity is the initial speed of the jump or pogo, while the duration is the maximum time that this initial velocity can be sustained before Keen feels gravity.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ramifications in simple terms:  &lt;br /&gt;
More negative (faster) velocity and longer duration means that Keen jumps higher.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Jumping Physics&amp;quot;&amp;gt;&lt;br /&gt;
# Jump from standstill&lt;br /&gt;
%patch $BAF0 [$FFD8W]				# V_i &lt;br /&gt;
%patch $BAFC [18W]				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo from standstill&lt;br /&gt;
%patch $BB33 [$FFD0W]				# V_i&lt;br /&gt;
%patch $BB3F [24W]				# time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Jump from walking&lt;br /&gt;
%patch $BF0A [$FFD8W]				# V_i&lt;br /&gt;
%patch $BF18 [18W]				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo from walking&lt;br /&gt;
%patch $BF51 [$FFD0W]				# V_i&lt;br /&gt;
%patch $BF5D [24W]				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo bounce&lt;br /&gt;
%patch $C4D3 [$FFD0W]				# V_i&lt;br /&gt;
%patch $C4E4 [24W]				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo air&lt;br /&gt;
%patch $C50E [9]					# time thresh-hold, after which gravity changes&lt;br /&gt;
							# end of pogo linear region&lt;br /&gt;
&lt;br /&gt;
# Jump from a pole&lt;br /&gt;
%patch $C6AB [$FFECW]				# V_i&lt;br /&gt;
%patch $C6B6 [10W]				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo Bounce&lt;br /&gt;
%patch $D830 [$FFD0W]				# V_i&lt;br /&gt;
%patch $D836 [24W]				# time&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
(If the jump or pogo button is released, then Keen will start to feel gravity even if the jump timer has not expired).  The timer is measured in tics (70 Hz), so a timer of 70 means that Keen can jump upwards for 1 second before feeling gravity.  The initial velocity is in map units per tic, which is 256ths of a tile per 70th of a second.&lt;br /&gt;
&lt;br /&gt;
Example problems:&lt;br /&gt;
 Q1.  If Keen is given an initial velocity of -18 ($FFEEW) and a max timer of 70 tics (1 second), what is the tile-height at his jump apex?&lt;br /&gt;
 A1.  -18 (map units/tic) * 70 tics * 1 (tile/256 map units) = 4 tiles.&lt;br /&gt;
&lt;br /&gt;
 Q2.  We have given Keen an initial velocity of 8, and we want his jump apex to be 5 tiles high.  What will his maximum timer need to be set at?&lt;br /&gt;
 A2.  8 (map units/tic) * 1 (tile / 256 map units) * X tics = 5 tiles  --&amp;gt; rearrange to solve for X --&amp;gt; X = 160 tics.&lt;br /&gt;
&lt;br /&gt;
Note that these problems only consider the linear region of Keen&#039;s jump (i.e., when the jump button is depressed and velocity is constant upwards in the y-axis).  After this linear region, Keen will still travel upwards as gravity begins to pull him down (i.e., he has reached the parabolic region of his jump).  This extra distance is dependent only on velocity at the end of the linear region (i.e., the initial velocity that you patched), and not on the jump timer.  Once Keen has reached the parabolic region, he will accelerate downwards at 2 map units / tic^2 (or 1.5 on easy mode).&lt;br /&gt;
&lt;br /&gt;
 Q3.  Reread Q1.  In consideration of the extra height that Keen will acquire due to the parabolic region of his jump, what is his TRUE tile-height at his jump apex?&lt;br /&gt;
 A3.  At the end of the linear region, Keen had travelled 4 tiles and retained a velocity of -18 (map units / tic).  &lt;br /&gt;
     Use v^2 = u^2 + 2as to deduce maximum height, at which point v^2 = 0.&lt;br /&gt;
     0 = u^2 + 2as --&amp;gt; --&amp;gt; s = -u^2/2a &lt;br /&gt;
     s = [- 324 (mu^2/tic^2) ] / [ 4 (mu/tic^2) ] = -81 mu = ~ -0.3 tiles.&lt;br /&gt;
&lt;br /&gt;
So the calculated height is 4.3 tiles.  In actuality, Keen jumps a little over 5 tiles, because the acceleration is not uniform per tic (it is actually applied twice after every second tic) and it is distorted a little bit at the apex.  In addition, at the end of the linear region of the pogo, gravity is greatly decreased, and the duration of this decreased gravity effect can be altered.  Even after considering the parabolic region, jump height will likely be a little bit higher than calculated, so you&#039;ll have to fine tune it by testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Keen_(Keen_4)&amp;diff=19428</id>
		<title>Patch:Keen (Keen 4)</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Keen_(Keen_4)&amp;diff=19428"/>
		<updated>2011-12-20T18:26:48Z</updated>

		<summary type="html">&lt;p&gt;Lemm: jumping physics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains patches relating to Keen as a sprite in [[Keen 4]]. That is, such things as the sprites used, the speeds and sounds. It does not cover patches relating to gameplay such as those that make levels scroll or change keys. Those can be found at [[Patch:Gameplay (Keen Galaxy)]]. It is divided into sections relating to the various sprite properties the patches involved. Being fluent with various sprite patch pages will help when working with these patches.&lt;br /&gt;
&lt;br /&gt;
As little is known about Keen, there is less information here than for most sprites.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Swimming Keen ==&lt;br /&gt;
&lt;br /&gt;
These patches relate to Keen swimming, in the Well Of Wishes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speed ===&lt;br /&gt;
&lt;br /&gt;
When swimming Keen has momentum, if you press the right arrow key, Keen will move right, and continue moving right for a short time before coming to a stop. The following patches control this momentum, that is, they are not the speeds Keen has when arrows are pressed.&lt;br /&gt;
&lt;br /&gt;
By default these speeds counteract Keen&#039;s speed, the left speed slows his left speed to a standstill for example. If these are set to $0000W then Keen will keep moving in that direction unless another arrow key is pressed. (He will become &#039;frictionless&#039;) If they are set to one value Keen will feel a constant tug in that direction, as if a current were pulling him. (For example, setting all horizontal speeds to $0001W will make Keen drift right, even if no keys are pressed, and make it harder for him to swim left.) If the values are $0003W or above the &#039;current&#039; is so strong Keen will not be able to move against it, effectively making him constantly move in one direction.&lt;br /&gt;
&lt;br /&gt;
Increasing all values makes Keen swim faster overall.&lt;br /&gt;
&lt;br /&gt;
There are three sections, the first controls horizontal movement, the second vertical, the third is unknown. Notably, gravity is &#039;&#039;always&#039;&#039; &#039;on&#039; by default, constantly pulling Keen down. There are two values for each direction, the first when no arrow key is pressed (when Keen will slowly stop moving) and the second, larger when Keen is trying to turn around (when Keen will quickly stop moving and start moving in the opposite direction.) If the &#039;turning&#039; values are set to $0000W then Keen will have to stop moving before he can start moving in the opposite direction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Swimming momentum speeds&amp;quot;&amp;gt;&lt;br /&gt;
#Horizontal&lt;br /&gt;
%patch $F7C4 [$FFFDW] #Left (Change direction)&lt;br /&gt;
%patch $F7CF [$FFFFW] #Left&lt;br /&gt;
%patch $F7DA [$0001W] #Right&lt;br /&gt;
%patch $F7DF [$0003W] #Right (Change direction)&lt;br /&gt;
&lt;br /&gt;
#Vertical&lt;br /&gt;
%patch $F819 [$FFFDW] #Up (Change direction)&lt;br /&gt;
%patch $F826 [$FFFFW] #Up&lt;br /&gt;
%patch $F833 [$0001W] #Down (This doubles as gravity)&lt;br /&gt;
%patch $F83A [$0003W] #Down  (Change direction)&lt;br /&gt;
&lt;br /&gt;
#Unknown&lt;br /&gt;
%patch $F92D [$0001W]&lt;br /&gt;
%patch $F93B [$FFFFW]&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bubbles\no bubbles produced ===&lt;br /&gt;
&lt;br /&gt;
By default Keen regularly produces bubble sprites which then move offscreen. It is possible to alter what is produced, however if the sprites are not regularly disposed of then they will quickly build up and overload the sprite array. It is also possible to stop anything being produced at all. There are four values, each produces a bubble with a different animation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;What swimming Keen produces&amp;quot;&amp;gt;&lt;br /&gt;
#What is produced by swimming Keen&lt;br /&gt;
%patch $F6AB  [$1A64W] #Bubble 1&lt;br /&gt;
%patch $F6BD  [$1A82W] #Bubble 2&lt;br /&gt;
%patch $F6CF  [$1AA0W] #Bubble 3&lt;br /&gt;
%patch $F6E1  [$1ABEW] #Bubble 4&lt;br /&gt;
&lt;br /&gt;
#Stop bubbles being produced (Each line stops one of the above bubbles)&lt;br /&gt;
%patch $F6B2 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $F6C4 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $F6D6 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $F6E8 $90 $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bubble sound ===&lt;br /&gt;
&lt;br /&gt;
This sound is produced every time swimming Keen produces a bubble (See above section) about once per second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Bubble sound&amp;quot;&amp;gt;&lt;br /&gt;
#Sound&lt;br /&gt;
%patch $F6F1  [$24]&lt;br /&gt;
&lt;br /&gt;
#Don&#039;t play sound&lt;br /&gt;
%patch $F6F4 $90 $90 $90 $90 $90&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Terrestrial Keen ==&lt;br /&gt;
&lt;br /&gt;
=== Jumping Physics ===&lt;br /&gt;
&lt;br /&gt;
The variables that control the height and duration of Keen&#039;s jumps are spread over several behaviours.  There are two important parameters: initial velocity, and duration.  The velocity is the initial speed of the jump or pogo, while the duration is the maximum time that this initial velocity can be sustained before Keen feels gravity.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ramifications in simple terms:  &lt;br /&gt;
More negative (faster) velocity and longer duration means that Keen jumps higher.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Jumping Physics&amp;quot;&amp;gt;&lt;br /&gt;
# Jump from standstill&lt;br /&gt;
%patch $BAF0 $FFF8W				# V_i &lt;br /&gt;
%patch $BAFC 160W				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo from standstill&lt;br /&gt;
%patch $BB33 $FFD0W				# V_i&lt;br /&gt;
%patch $BB3F 24W				# time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Jump from walking&lt;br /&gt;
%patch $BF0A $FFD8W				# V_i&lt;br /&gt;
%patch $BF18 18W				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo from walking&lt;br /&gt;
%patch $BF51 $FFD0W				# V_i&lt;br /&gt;
%patch $BF5D 24W				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo bounce&lt;br /&gt;
%patch $C4D3 $FFD0W				# V_i&lt;br /&gt;
%patch $C4E4 24W				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo air&lt;br /&gt;
%patch $C50E 9					# time thresh-hold, after which gravity changes&lt;br /&gt;
								# end of pogo linear region&lt;br /&gt;
&lt;br /&gt;
# Jump from a pole&lt;br /&gt;
%patch $C6AB $FFECW				# V_i&lt;br /&gt;
%patch $C6B6 10W				# time&lt;br /&gt;
&lt;br /&gt;
# Pogo Bounce&lt;br /&gt;
%patch $D830 $FFD0W				# V_i&lt;br /&gt;
%patch $D836 24W				# time&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
(If the jump or pogo button is released, then Keen will start to feel gravity even if the jump timer has not expired).  The timer is measured in tics (70 Hz), so a timer of 70 means that Keen can jump upwards for 1 second before feeling gravity.  The initial velocity is in map units per tic, which is 256ths of a tile per 70th of a second.&lt;br /&gt;
&lt;br /&gt;
Example problems:&lt;br /&gt;
 Q1.  If Keen is given an initial velocity of -18 ($FFEEW) and a max timer of 70 tics (1 second), what is the tile-height at his jump apex?&lt;br /&gt;
 A1.  -18 (map units/tic) * 70 tics * 1 (tile/256 map units) = 4 tiles.&lt;br /&gt;
&lt;br /&gt;
 Q2.  We have given Keen an initial velocity of 8, and we want his jump apex to be 5 tiles high.  What will his maximum timer need to be set at?&lt;br /&gt;
 A2.  8 (map units/tic) * 1 (tile / 256 map units) * X tics = 5 tiles  --&amp;gt; rearrange to solve for X --&amp;gt; X = 160 tics.&lt;br /&gt;
&lt;br /&gt;
Note that these problems only consider the linear region of Keen&#039;s jump (i.e., when the jump button is depressed and velocity is constant upwards in the y-axis).  After this linear region, Keen will still travel upwards as gravity begins to pull him down (i.e., he has reached the parabolic region of his jump).  This extra distance is dependent only on velocity at the end of the linear region (i.e., the initial velocity that you patched), and not on the jump timer.  Once Keen has reached the parabolic region, he will accelerate downwards at 2 map units / tic^2 (or 1.5 on easy mode).&lt;br /&gt;
&lt;br /&gt;
 Q3.  Reread Q1.  In consideration of the extra height that Keen will acquire due to the parabolic region of his jump, what is his TRUE tile-height at his jump apex?&lt;br /&gt;
 A3.  At the end of the linear region, Keen had travelled 4 tiles and retained a velocity of -18 (map units / tic).  &lt;br /&gt;
     Use v^2 = u^2 + 2as to deduce maximum height, at which point v^2 = 0.&lt;br /&gt;
     0 = u^2 + 2as --&amp;gt; --&amp;gt; s = -u^2/2a &lt;br /&gt;
     s = [- 324 (mu^2/tic^2) ] / [ 4 (mu/tic^2) ] = -81 mu = ~ -0.3 tiles.&lt;br /&gt;
&lt;br /&gt;
So the calculated height is 4.3 tiles.  In actuality, Keen jumps a little over 5 tiles, because the acceleration is not uniform per tic (it is actually applied twice after every second tic) and it is distorted a little bit at the apex.  In addition, at the end of the linear region of the pogo, gravity is greatly decreased, and the duration of this decreased gravity effect can be altered.  Even after considering the parabolic region, jump height will likely be a little bit higher than calculated, so you&#039;ll have to fine tune it by testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_actions&amp;diff=19177</id>
		<title>Patch:Galaxy actions</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_actions&amp;diff=19177"/>
		<updated>2011-08-23T13:49:37Z</updated>

		<summary type="html">&lt;p&gt;Lemm: linked the galaxy action parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about sprite actions in Keen Galaxy and Dreams. Unlike in Vorticons, in Galaxy and Dreams there are two main components of a sprite, it&#039;s code, which behaves as in Vorticons, containing most of the decisions a sprite must make (What to do when faced with a wall, hit by a shot, etc) and actions, which define simpler things, such as animations to use, most speeds and pointers to more code.&lt;br /&gt;
&lt;br /&gt;
Each action is 30 bytes long and consists of the following:&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 0:  Left sprite         Valid sprite chunks&lt;br /&gt;
 Int 2:  Right sprite        Valid sprite chunks&lt;br /&gt;
 Int 4:  Type                0-4&lt;br /&gt;
 Int 6:  Deprotect Animation 0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-8000&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 16: Behavior            Start of behavior codes&lt;br /&gt;
 Int 18: Behavior segment    Segment values&lt;br /&gt;
 Int 20: Check sprites       Start of check sprite codes&lt;br /&gt;
 Int 22: Check segment       Segment values only&lt;br /&gt;
 Int 24: Check tiles         Start of check tile code&lt;br /&gt;
 Int 26: Check segment       Segment values&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Actions can be treated like [[Patch:Text patches|text strings]], with pointers to them. They are located in the text segment of the executable, usually in chunks. More information can be gained from each value&#039;s page: [[Patch:Sprite animations]], [[Patch:Sprite behavior]], [[Patch:Sprite collision code]], [[Patch:Sprite tile check]], [[Patch:Galaxy Action Parameters]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19176</id>
		<title>Patch:Galaxy Action Parameters</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19176"/>
		<updated>2011-08-23T13:45:02Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Figured out the final parameter!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Galaxy action parameters are integral fields within [[Patch:Galaxy actions|Galaxy actions]] that control the movement of the objects (i.e., &amp;quot;sprites&amp;quot;) or the action timing.  The relevant subset of action fields is tabulated below.  Note that the &amp;quot;Next action&amp;quot; field is a 2-byte (near) pointer to another action, but is included here anyway for completeness&#039; sake.  Remember that the game has (at optimum speed), 35 animation frames per second, corresponding to 70 game &amp;quot;tics&amp;quot; per second (thus, one frame completes in two tics).  &amp;quot;Calling&amp;quot; a function means that the function code is executed in that animation frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 4:  Action Type         0-4&lt;br /&gt;
 Int 6:  Deprotect Animation 0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-0x7FFF&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Action Type ==&lt;br /&gt;
&lt;br /&gt;
The action type defines how often the the [[Patch:Sprite behavior | behaviour]] function is called and how often the action movement amount offsets are applied.  It takes five meaningful values (0-4) summarized below:&lt;br /&gt;
&lt;br /&gt;
 Movement Parm       Behaviour Called...    Action Movements Applied...        Delay field is used?&lt;br /&gt;
 0                   Once                   Once                               Yes      &lt;br /&gt;
 1                   Once                   Every frame                        Yes&lt;br /&gt;
 2                   Every frame            Not applied                        No&lt;br /&gt;
 3                   Every frame            Once                               Yes&lt;br /&gt;
 4                   Every frame            Every frame                        Yes&lt;br /&gt;
&lt;br /&gt;
The behaviour is called either once, right before the action changes to the next action, or on every animation frame.  The action movements are applied to the object either once, when the action changes, or on every animation frame, scaled by the number of tics consumed by one animation frame (usually 2 tics/frame at optimum speed).  The delay field is used, meaning it specifies the number of tics before the action is advanced to the next action, or it is unused, meaning the action repeats itself every frame.&lt;br /&gt;
&lt;br /&gt;
In general, a behaviour that is called once would be used for spawning something (e.g., a slime puddle or projectile), while a behaviour called every frame would be used as a sensor.  Movements applied once per action are used for jerky locomotion (pedal, or serpentine), whereas movements application every frame is used for smooth motion.  Movement can also be defined in the behaviour, collision, and tile checking functions, in addition to the action movement parameters.  Examples of where action parameters are found, and how they can be used are described below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Type 0 ===&lt;br /&gt;
The bulk of sprites use type 0, meaning that the behavior is called AND the object is moved when action advances ( (i.e., when the sprite animates.) This is what makes poison slugs or arachnuts, for example, &#039;crawl&#039; in jerks. If animation is often enough and speed slow enough, motion seems smooth.  &lt;br /&gt;
&lt;br /&gt;
=== Type 1 ===&lt;br /&gt;
Type 1 is similar to type 0, but movement is smoother.  Here, the H/V movement offsets are applied every frame, depending on which way the berkeloid is facing.  Berkeloids use this to make sure their &#039;floating&#039; movement isn&#039;t jerky.&lt;br /&gt;
&lt;br /&gt;
=== Type 2 ===&lt;br /&gt;
Type 2 actions ignore any movement and delay timers (animation speed).  It is used notably for stunned falling sprites which keep falling all the time until they hit ground and move on.  Airboards also use this. In other words, used for things that need to be instantly responsive. They won&#039;t animate and need movement defined in their behavior.  Type 2 is best used for sensory behaviours.  Type 2 actions are executed once, and only once, per animation frame.&lt;br /&gt;
&lt;br /&gt;
=== Type 3 === &lt;br /&gt;
Movement is jerky, happening every time the sprite animates. This is for things that need to be very responsive, but also animate. Dopefish and Mad Mushrooms use this because they must be able to react to walls and floors to avoid getting stuck.  The behaviour function of these creatures defines the motion, which is why they do not move in jerks.&lt;br /&gt;
&lt;br /&gt;
=== Type 4 ===&lt;br /&gt;
Type 4 is a rarely used case, sometimes used for things that are going to need to land on or leave the ground somehow. The flying bluebird does this for example, and it is about the only Keen 4 example.&lt;br /&gt;
&lt;br /&gt;
== Deprotect Animation ==&lt;br /&gt;
The rarely-used, boolean &amp;quot;Deprotect Animation&amp;quot; parameter forces the action to run for the proper number of tics, even if this means skipping over an animation.  If this flag is not set, the sprites for actions will be drawn for at least one animation frame, no matter how short the delay is (even a delay of 0 or 1 tics).  If the flag is set, then these fleeting actions will still have their sprite behaviour function and movement parameters processed (but not the sprite collision nor tile-checking functions), but the animation MIGHT not be drawn (see the detailed explanation).  This flag is most useful if you want to apply the action movement parameters or a behaviour instantaneously (using 0 for the delay), and you don&#039;t want the intermediate sprite to be seen, or you don&#039;t want a hiccup in the animation.  &lt;br /&gt;
&lt;br /&gt;
For example, you might want object A to call a single behaviour six times in a row by writing six sequential type 0 actions of delay 0.  This behaviour might spawn object B at object A&#039;s location.  If the animation is protected (flag = 0), then this will take a minimum of six animation frames, and object A will be drawn every frame.  If the animation is deprotected (flag = 1), then all sprites will spawn on the same animation frame.  In addition, the movement parameters can be tweaked so that object A is located at a different position for each object B spawn, and returns to its initial position after the sixth spawn.  If animation is protected, then object A will skip around the screen, whereas if it is protected, its intermediate positions will not be drawn.&lt;br /&gt;
&lt;br /&gt;
This parameter has no meaning for type 2 actions.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation:  For any animation frame, when an action expires because it reaches its delay, the game runs the old action for a fraction of the frame length, and the new action for the remainder of the frame.  As an example, assume that action 1 has 3 more tics to go, and the animation frame took 5 tics to complete.  Then action 3 would be run for 3 tics and action 2 would be run for 2 tics.  In the event that the second action is so short that there are still tics to be processed, the &amp;quot;Deprotect Animation&amp;quot; flag comes into use.  If reset (zero), then the action is run for delay - 1 tics and no more actions are processed for that frame.  If the &amp;quot;Deprotect Animation&amp;quot; flag is set (1), then the action is run for the specified number of tics and the 3rd action in the chain is processed for the remaining number of tics.  Since the 3rd action is the last to be processed, its frame will be displayed, and the sprite frame for action 2 is never seen.&lt;br /&gt;
&lt;br /&gt;
== Stick to Ground ==&lt;br /&gt;
The boolean &amp;quot;Stick to Ground&amp;quot; (formerly, &amp;quot;Change V&amp;quot;) parameter affects the vertical movement of the object.  If Stick to Ground is 1, then the sprite will move DOWNWARDS by however far it moved left or right, for each animation frame.  Some objects will malfunction if they leave the ground (e.g., inchworms and arachnuts).  Because slopes are always less than 45 degrees, objects will always be forced into the ground if they are moving downhill.  If an object is to walk along the ground, this flag should be set to 1.  If the object is airborne, the flag must be set to 0.&lt;br /&gt;
&lt;br /&gt;
== Delay and Next Action ==&lt;br /&gt;
The &amp;quot;Delay&amp;quot; field specifies how many tics will pass before the action pointed to by the &amp;quot;Next action&amp;quot; pointer is selected.  If an action has a delay of 70, that action will remain valid for one second until the next action is selected.   Both fields serve no purpose for action type 2.  For movement types 0, 1, and 3, the delay also regulates how often the behaviour function or the movement parameters are applied (see table above).  If the next action is zero, then the sprite freezes.&lt;br /&gt;
&lt;br /&gt;
== H/V Movement Amount ==&lt;br /&gt;
The movement offsets allow for action-defined motion.  Movement offsets (here, and in general) are always in 16ths of a pixel, or 256ths of a tile.  Objects have an X-Motion (-1 = left, 0 = none, 1 = right), and a Y-motion parameter (-1 = up, 0 = none, 1 = down) that is defined by the sprite behaviour, collision, and tile-checking functions.  For action types 0 and 3, the H and V values are applied when the action delay timer expires.  For example, an action of parameter type 0, H-offset of 128, and delay of 35 will move right or left by a half tile every half second.  For action types 1 and 4, the H and V values are applied every animation frame, and scaled by the number of tics consumed during that frame (approximately 2 tics/frame on DOSBox), meaning that the action delay is irrelevant for motion and that the motion is smooth.  An object with action type 1 or 4 and a V-offset of 4 will move 1/4 (four 16ths) of a pixel every game tic, which is equal to 1/2 a pixel every game frame and about 17 pixels a second.&lt;br /&gt;
&lt;br /&gt;
Movement can also be defined in the behaviour, collision, or tile-check functions.  The offset applied in these functions is added to that defined by the action, and the net movement is applied to the object.  Remember that, if the Stick-to-Ground flag is set, the vertical movement defined by either the action or a function is ignored.&lt;br /&gt;
&lt;br /&gt;
== Behaviour, Collision, and Tile Checking Functions ==&lt;br /&gt;
&lt;br /&gt;
These are double-word pointers to the start of a function described in detail elsewhere.  Note that the behaviour function is called every frame for action types 1,2, and 4, but it is called right when the action switches to the next action for types 0 and 3.  The collision function is called every frame whenever an object is in contact with another object, and the tile-collion (draw function) is called every frame when the object is on screen.&lt;br /&gt;
&lt;br /&gt;
== Other Games ==&lt;br /&gt;
Although not part of the &amp;quot;Id Engine&amp;quot; proper, the physics and action code is shared by many games that use the Keen:Galaxy engine.  BioMenace, Dangerous Dave 3 and 4, and Rescue Rover 2 all use actions.  Shadow Nights, Dave 2, and Rescue Rover 1 might use actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19175</id>
		<title>Patch:Galaxy Action Parameters</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19175"/>
		<updated>2011-08-23T10:11:24Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Undo revision 19174 by Lemm (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Galaxy action parameters are integral fields within [[Patch:Galaxy actions|Galaxy actions]] that control the movement of the objects (i.e., &amp;quot;sprites&amp;quot;) or the action timing.  The relevant subset of action fields is tabulated below.  Note that the &amp;quot;Next action&amp;quot; field is a 2-byte (near) pointer to another action, but is included here anyway for completeness&#039; sake.  Remember that the game has (at optimum speed), 35 animation frames per second, corresponding to 70 game &amp;quot;tics&amp;quot; per second (thus, one frame completes in two tics).  &amp;quot;Calling&amp;quot; a function means that the function code is executed in that animation frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 4:  Movement parameter  0-4&lt;br /&gt;
 Int 6:  Change h            0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-0x7FFF&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Movement Parameter ==&lt;br /&gt;
&lt;br /&gt;
The movement parameter defines how often the the [[Patch:Sprite behavior | behaviour]] function is called and how often the action movement amount offsets are applied.  It takes five meaningful values (0-4) summarized below:&lt;br /&gt;
&lt;br /&gt;
 Movement Parm       Behaviour Called...    Action Movements Applied...        Delay field is used?&lt;br /&gt;
 0                   Once                   Once                               Yes      &lt;br /&gt;
 1                   Once                   Every frame                        Yes&lt;br /&gt;
 2                   Every frame            Not applied                        No&lt;br /&gt;
 3                   Every frame            Once                               Yes&lt;br /&gt;
 4                   Every frame            Every frame                        Yes&lt;br /&gt;
&lt;br /&gt;
The behaviour is called either once, right before the action changes to the next action, or on every animation frame.  The action movements are applied to the object either once, when the action changes, or on every animation frame, scaled by the number of tics consumed by one animation frame (usually 2 tics/frame at optimum speed).  The delay field is used, meaning it specifies the number of tics before the action is advanced to the next action, or it is unused, meaning the action repeats itself every frame.&lt;br /&gt;
&lt;br /&gt;
In general, a behaviour that is called once would be used for spawning something (e.g., a slime puddle or projectile), while a behaviour called every frame would be used as a sensor.  Movements applied once per action are used for jerky locomotion (pedal, or serpentine), whereas movements application every frame is used for smooth motion.  Movement can also be defined in the behaviour, collision, and tile checking functions, in addition to the action movement parameters.  Examples of where action parameters are found, and how they can be used are described below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Type 0 ===&lt;br /&gt;
The bulk of sprites use type 0, meaning that the behavior is called AND the object is moved when action advances ( (i.e., when the sprite animates.) This is what makes poison slugs or arachnuts, for example, &#039;crawl&#039; in jerks. If animation is often enough and speed slow enough, motion seems smooth.  &lt;br /&gt;
&lt;br /&gt;
=== Type 1 ===&lt;br /&gt;
Type 1 is similar to type 0, but movement is smoother.  Here, the H/V movement offsets are applied every frame, depending on which way the berkeloid is facing.  Berkeloids use this to make sure their &#039;floating&#039; movement isn&#039;t jerky.&lt;br /&gt;
&lt;br /&gt;
=== Type 2 ===&lt;br /&gt;
Type 2 actions ignore any movement and delay timers (animation speed).  It is used notably for stunned falling sprites which keep falling all the time until they hit ground and move on.  Airboards also use this. In other words, used for things that need to be instantly responsive. They won&#039;t animate and need movement defined in their behavior.  Type 2 is best used for sensory behaviours.&lt;br /&gt;
&lt;br /&gt;
=== Type 3 === &lt;br /&gt;
Movement is jerky, happening every time the sprite animates. This is for things that need to be very responsive, but also animate. Dopefish and Mad Mushrooms use this because they must be able to react to walls and floors to avoid getting stuck.  The behaviour function of these creatures defines the motion, which is why they do not move in jerks.&lt;br /&gt;
&lt;br /&gt;
=== Type 4 ===&lt;br /&gt;
Type 4 is a rarely used case, sometimes used for things that are going to need to land on or leave the ground somehow. The flying bluebird does this for example, and it is about the only Keen 4 example.&lt;br /&gt;
&lt;br /&gt;
== Change h ==&lt;br /&gt;
The boolean &amp;quot;Change h&amp;quot; parameter affects the action timing in some manner.  It seems to be a flag telling an action to alter its timing if it is referenced as the &amp;quot;next action&amp;quot; of the previous action.&lt;br /&gt;
&lt;br /&gt;
== Stick to Ground ==&lt;br /&gt;
The boolean &amp;quot;Stick to Ground&amp;quot; (formerly, &amp;quot;Change V&amp;quot;) parameter affects the vertical movement of the object.  If Stick to Ground is 1, then the sprite will move DOWNWARDS by however far it moved left or right, for each animation frame.  Some objects will malfunction if they leave the ground (e.g., inchworms and arachnuts).  Because slopes are always less than 45 degrees, objects will always be forced into the ground if they are moving downhill.  If an object is to walk along the ground, this flag should be set to 1.  If the object is airborne, the flag must be set to 0.&lt;br /&gt;
&lt;br /&gt;
== Delay and Next Action ==&lt;br /&gt;
The &amp;quot;Delay&amp;quot; field specifies how many tics will pass before the action pointed to by the &amp;quot;Next action&amp;quot; pointer is selected.  If an action has a delay of 70, that action will remain valid for one second until the next action is selected.   Both fields serve no purpose for movement parameter type 2.  For movement types 0, 1, and 3, the delay also regulates how often the behaviour function or the movement parameters are applied (see table above).  If the next action is zero, then the sprite freezes.&lt;br /&gt;
&lt;br /&gt;
== H/V Movement Amount ==&lt;br /&gt;
The movement offsets allow for action-defined motion.  Movement offsets (here, and in general) are always in 16ths of a pixel, or 256ths of a tile.  Objects have an X-Motion (-1 = left, 0 = none, 1 = right), and a Y-motion parameter (-1 = up, 0 = none, 1 = down) that is defined by the sprite behaviour, collision, and tile-checking functions.  For movement parameter types 0 and 3, the H and V values are applied when the action delay timer expires.  For example, an action of parameter type 0, H-offset of 128, and delay of 35 will move right or left by a half tile every half second.  For movement parameter types 1 and 4, the H and V values are applied every animation frame, and scaled by the number of tics consumed during that frame (approximately 2 tics/frame on DOSBox), meaning that the action delay is irrelevant for motion and that the motion is smooth.  An object with movement parameter 1 or 4 and a V-offset of 4 will move 1/4 (four 16ths) of a pixel every game tic, which is equal to 1/2 a pixel every game frame and about 17 pixels a second.&lt;br /&gt;
&lt;br /&gt;
Movement can also be defined in the behaviour, collision, or tile-check functions.  The offset applied in these functions is added to that defined by the action, and the net movement is applied to the object.  Remember that, if the Stick-to-Ground flag is set, the vertical movement defined by either the action or a function is ignored.&lt;br /&gt;
&lt;br /&gt;
== Behaviour, Collision, and Tile Checking Functions ==&lt;br /&gt;
&lt;br /&gt;
These are double-word pointers to the start of a function described in detail elsewhere.  Note that the behaviour function is called every frame for movement parameter types 1,2, and 4, but it is called right when the action switches to the next action for types 0 and 3.  The collision function is called every frame whenever an object is in contact with another object, and the tile-collion (draw function) is called every frame when the object is on screen.&lt;br /&gt;
&lt;br /&gt;
== Other Games ==&lt;br /&gt;
Although not part of the &amp;quot;Id Engine&amp;quot; proper, the physics and action code is shared by many games that use the Keen:Galaxy engine.  BioMenace, Dangerous Dave 3 and 4, and Rescue Rover 2 all use actions.  Shadow Nights, Dave 2, and Rescue Rover 1 might use actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19174</id>
		<title>Patch:Galaxy Action Parameters</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19174"/>
		<updated>2011-08-23T10:00:08Z</updated>

		<summary type="html">&lt;p&gt;Lemm: actions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Galaxy action parameters are integral fields within [[Patch:Galaxy actions|Galaxy actions]] that control the movement of the objects (i.e., &amp;quot;sprites&amp;quot;) or the action timing.  The relevant subset of action fields is tabulated below.  Note that the &amp;quot;Next action&amp;quot; field is a 2-byte (near) pointer to another action, but is included here anyway for completeness&#039; sake.  Remember that the game has (at optimum speed), 35 animation frames per second, corresponding to 70 game &amp;quot;tics&amp;quot; per second (thus, one frame completes in two tics).  &amp;quot;Calling&amp;quot; a function means that the function code is executed in that animation frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 4:  Movement parameter  0-4&lt;br /&gt;
 Int 6:  Change h            0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-0x7FFF&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Movement Parameter ==&lt;br /&gt;
&lt;br /&gt;
The movement parameter defines how often the the [[Patch:Sprite behavior | behaviour]] function is called and how often the action movement amount offsets are applied.  It takes five meaningful values (0-4) summarized below:&lt;br /&gt;
&lt;br /&gt;
 Movement Parm       Behaviour Called...    Action Movements Applied...        Delay field is used?&lt;br /&gt;
 0                   Once                   Once                               Yes      &lt;br /&gt;
 1                   Once                   Every frame                        Yes&lt;br /&gt;
 2                   Every frame            Not applied                        No&lt;br /&gt;
 3                   Every frame            Once                               Yes&lt;br /&gt;
 4                   Every frame            Every frame                        Yes&lt;br /&gt;
&lt;br /&gt;
The behaviour is called either once, right before the action changes to the next action, or on every animation frame.  The action movements are applied to the object either once, when the action changes, or on every animation frame, scaled by the number of tics consumed by one animation frame (usually 2 tics/frame at optimum speed).  The delay field is used, meaning it specifies the number of tics before the action is advanced to the next action, or it is unused, meaning the action repeats itself every frame.&lt;br /&gt;
&lt;br /&gt;
In general, a behaviour that is called once would be used for spawning something (e.g., a slime puddle or projectile), while a behaviour called every frame would be used as a sensor.  Movements applied once per action are used for jerky locomotion (pedal, or serpentine), whereas movements application every frame is used for smooth motion.  Movement can also be defined in the behaviour, collision, and tile checking functions, in addition to the action movement parameters.  Examples of where action parameters are found, and how they can be used are described below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Type 0 ===&lt;br /&gt;
The bulk of sprites use type 0, meaning that the behavior is called AND the object is moved when action advances ( (i.e., when the sprite animates.) This is what makes poison slugs or arachnuts, for example, &#039;crawl&#039; in jerks. If animation is often enough and speed slow enough, motion seems smooth.  &lt;br /&gt;
&lt;br /&gt;
=== Type 1 ===&lt;br /&gt;
Type 1 is similar to type 0, but movement is smoother.  Here, the H/V movement offsets are applied every frame, depending on which way the berkeloid is facing.  Berkeloids use this to make sure their &#039;floating&#039; movement isn&#039;t jerky.&lt;br /&gt;
&lt;br /&gt;
=== Type 2 ===&lt;br /&gt;
Type 2 actions ignore any movement and delay timers (animation speed).  It is used notably for stunned falling sprites which keep falling all the time until they hit ground and move on.  Airboards also use this. In other words, used for things that need to be instantly responsive. They won&#039;t animate and need movement defined in their behavior.  Type 2 is best used for sensory behaviours.&lt;br /&gt;
&lt;br /&gt;
=== Type 3 === &lt;br /&gt;
Movement is jerky, happening every time the sprite animates. This is for things that need to be very responsive, but also animate. Dopefish and Mad Mushrooms use this because they must be able to react to walls and floors to avoid getting stuck.  The behaviour function of these creatures defines the motion, which is why they do not move in jerks.&lt;br /&gt;
&lt;br /&gt;
=== Type 4 ===&lt;br /&gt;
Type 4 is a rarely used case, sometimes used for things that are going to need to land on or leave the ground somehow. The flying bluebird does this for example, and it is about the only Keen 4 example.&lt;br /&gt;
&lt;br /&gt;
== Change h ==&lt;br /&gt;
The boolean &amp;quot;Change h&amp;quot; parameter affects the action timing in some manner.  It seems to be a flag telling an action to alter its timing if it is referenced as the &amp;quot;next action&amp;quot; of the previous action.&lt;br /&gt;
&lt;br /&gt;
== Stick to Ground ==&lt;br /&gt;
The boolean &amp;quot;Stick to Ground&amp;quot; (formerly, &amp;quot;Change V&amp;quot;) parameter affects the vertical movement of the object.  If Stick to Ground is 1, then the sprite will move DOWNWARDS by however far it moved left or right, for each animation frame.  Some objects will malfunction if they leave the ground (e.g., inchworms and arachnuts).  Because slopes are always less than 45 degrees, objects will always be forced into the ground if they are moving downhill.  If an object is to walk along the ground, this flag should be set to 1.  If the object is airborne, the flag must be set to 0.&lt;br /&gt;
&lt;br /&gt;
== Delay and Next Action ==&lt;br /&gt;
The &amp;quot;Delay&amp;quot; field specifies how many tics will pass before the action pointed to by the &amp;quot;Next action&amp;quot; pointer is selected.  If an action has a delay of 70, that action will remain valid for one second until the next action is selected.   Both fields serve no purpose for movement parameter type 2.  For movement types 0, 1, and 3, the delay also regulates how often the behaviour function or the movement parameters are applied (see table above).  If the next action is zero, then the sprite freezes.&lt;br /&gt;
&lt;br /&gt;
== H/V Movement Amount ==&lt;br /&gt;
The movement offsets allow for action-defined motion.  Movement offsets (here, and in general) are always in 16ths of a pixel, or 256ths of a tile.  Objects have an X-Motion (-1 = left, 0 = none, 1 = right), and a Y-motion parameter (-1 = up, 0 = none, 1 = down) that is defined by the sprite behaviour, collision, and tile-checking functions.  For movement parameter types 0 and 3, the H and V values are applied when the action delay timer expires.  For example, an action of parameter type 0, H-offset of 128, and delay of 35 will move right or left by a half tile every half second.  For movement parameter types 1 and 4, the H and V values are applied every animation frame, and scaled by the number of tics consumed during that frame (approximately 2 tics/frame on DOSBox), meaning that the action delay is irrelevant for motion and that the motion is smooth.  An object with movement parameter 1 or 4 and a V-offset of 4 will move 1/4 (four 16ths) of a pixel every game tic, which is equal to 1/2 a pixel every game frame and about 17 pixels a second.&lt;br /&gt;
&lt;br /&gt;
Movement can also be defined in the behaviour, collision, or tile-check functions.  The offset applied in these functions is added to that defined by the action, and the net movement is applied to the object.  Remember that, if the Stick-to-Ground flag is set, the vertical movement defined by either the action or a function is ignored.&lt;br /&gt;
&lt;br /&gt;
== Behaviour, Collision, and Tile Checking Functions ==&lt;br /&gt;
&lt;br /&gt;
These are double-word pointers to the start of a function described in detail elsewhere.  Note that the behaviour function is called every frame for movement parameter types 1,2, and 4, but it is called once, at the start of the action, for types 0 and 3.  The collision function is called every frame whenever an object is in contact with another object, and the tile-collion (draw function) is called every frame when the object is on screen.&lt;br /&gt;
&lt;br /&gt;
== Other Games ==&lt;br /&gt;
Although not part of the &amp;quot;Id Engine&amp;quot; proper, the physics and action code is shared by many games that use the Keen:Galaxy engine.  BioMenace, Dangerous Dave 3 and 4, and Rescue Rover 2 all use actions.  Shadow Nights, Dave 2, and Rescue Rover 1 might use actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19173</id>
		<title>Patch:Galaxy Action Parameters</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19173"/>
		<updated>2011-08-23T08:59:07Z</updated>

		<summary type="html">&lt;p&gt;Lemm: H/V movement amounts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Galaxy action parameters are integral fields within [[Patch:Galaxy actions|Galaxy actions]] that control the movement of the objects (i.e., &amp;quot;sprites&amp;quot;) or the action timing.  The relevant subset of action fields is tabulated below.  Note that the &amp;quot;Next action&amp;quot; field is a 2-byte (near) pointer to another action, but is included here anyway for completeness&#039; sake.  Remember that the game has (at optimum speed), 35 animation frames per second, corresponding to 70 game &amp;quot;tics&amp;quot; per second (thus, one frame completes in two tics).  &amp;quot;Calling&amp;quot; a function means that the function code is executed in that animation frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 4:  Movement parameter  0-4&lt;br /&gt;
 Int 6:  Change h            0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-0x7FFF&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Movement Parameter ==&lt;br /&gt;
&lt;br /&gt;
The movement parameter defines how often the the [[Patch:Sprite behavior | behaviour]] function is called and how often the action movement amount offsets are applied.  It takes five meaningful values (0-4) summarized below:&lt;br /&gt;
&lt;br /&gt;
 Movement Parm       Behaviour Called...    Action Movements Applied...        Delay field is used?&lt;br /&gt;
 0                   Once                   Once                               Yes      &lt;br /&gt;
 1                   Once                   Every frame                        Yes&lt;br /&gt;
 2                   Every frame            Not applied                        No&lt;br /&gt;
 3                   Every frame            Once                               Yes&lt;br /&gt;
 4                   Every frame            Every frame                        Yes&lt;br /&gt;
&lt;br /&gt;
The behaviour is called either once, right before the action changes to the next action, or on every animation frame.  The action movements are applied to the object either once, when the action changes, or on every animation frame, scaled by the number of tics consumed by one animation frame (usually 2 tics/frame at optimum speed).  The delay field is used, meaning it specifies the number of tics before the action is advanced to the next action, or it is unused, meaning the action repeats itself every frame.&lt;br /&gt;
&lt;br /&gt;
In general, a behaviour that is called once would be used for spawning something (e.g., a slime puddle or projectile), while a behaviour called every frame would be used as a sensor.  Movements applied once per action are used for jerky locomotion (pedal, or serpentine), whereas movements application every frame is used for smooth motion.  Movement can also be defined in the behaviour, collision, and tile checking functions, in addition to the action movement parameters.  Examples of where action parameters are found, and how they can be used are described below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Type 0 ===&lt;br /&gt;
The bulk of sprites use type 0, meaning that the behavior is called AND the object is moved when action advances ( (i.e., when the sprite animates.) This is what makes poison slugs or arachnuts, for example, &#039;crawl&#039; in jerks. If animation is often enough and speed slow enough, motion seems smooth.  &lt;br /&gt;
&lt;br /&gt;
=== Type 1 ===&lt;br /&gt;
Type 1 is similar to type 0, but movement is smoother.  Here, the H/V movement offsets are applied every frame, depending on which way the berkeloid is facing.  Berkeloids use this to make sure their &#039;floating&#039; movement isn&#039;t jerky.&lt;br /&gt;
&lt;br /&gt;
=== Type 2 ===&lt;br /&gt;
Type 2 actions ignore any movement and delay timers (animation speed).  It is used notably for stunned falling sprites which keep falling all the time until they hit ground and move on.  Airboards also use this. In other words, used for things that need to be instantly responsive. They won&#039;t animate and need movement defined in their behavior.  Type 2 is best used for sensory behaviours.&lt;br /&gt;
&lt;br /&gt;
=== Type 3 === &lt;br /&gt;
Movement is jerky, happening every time the sprite animates. This is for things that need to be very responsive, but also animate. Dopefish and Mad Mushrooms use this because they must be able to react to walls and floors to avoid getting stuck.  The behaviour function of these creatures defines the motion, which is why they do not move in jerks.&lt;br /&gt;
&lt;br /&gt;
=== Type 4 ===&lt;br /&gt;
Type 4 is a rarely used case, sometimes used for things that are going to need to land on or leave the ground somehow. The flying bluebird does this for example, and it is about the only Keen 4 example.&lt;br /&gt;
&lt;br /&gt;
== Change h ==&lt;br /&gt;
The boolean &amp;quot;Change h&amp;quot; parameter affects the action timing in some manner.  It seems to be a flag telling an action to alter its timing if it is referenced as the &amp;quot;next action&amp;quot; of the previous action.&lt;br /&gt;
&lt;br /&gt;
== Stick to Ground ==&lt;br /&gt;
The boolean &amp;quot;Stick to Ground&amp;quot; (formerly, &amp;quot;Change V&amp;quot;) parameter affects the vertical movement of the object.  If Stick to Ground is 1, then the sprite will move DOWNWARDS by however far it moved left or right, for each animation frame.  Some objects will malfunction if they leave the ground (e.g., inchworms and arachnuts).  Because slopes are always less than 45 degrees, objects will always be forced into the ground if they are moving downhill.  If an object is to walk along the ground, this flag should be set to 1.  If the object is airborne, the flag must be set to 0.&lt;br /&gt;
&lt;br /&gt;
== Delay and Next Action ==&lt;br /&gt;
The &amp;quot;Delay&amp;quot; field specifies how many tics will pass before the action pointed to by the &amp;quot;Next action&amp;quot; pointer is selected.  If an action has a delay of 70, that action will remain valid for one second until the next action is selected.   Both fields serve no purpose for movement parameter type 2.  For movement types 0, 1, and 3, the delay also regulates how often the behaviour function or the movement parameters are applied (see table above).  If the next action is zero, then the sprite freezes.&lt;br /&gt;
&lt;br /&gt;
== H/V Movement Amount ==&lt;br /&gt;
The movement offsets allow for action-defined motion.  Movement offsets (here, and in general) are always in 16ths of a pixel, or 256ths of a tile.  Objects have an X-Motion (-1 = left, 0 = none, 1 = right), and a Y-motion parameter (-1 = up, 0 = none, 1 = down) that is defined by the sprite behaviour, collision, and tile-checking functions.  For movement parameter types 0 and 3, the H and V values are applied when the action delay timer expires.  For example, an action of parameter type 0, H-offset of 128, and delay of 35 will move right or left by a half tile every half second.  For movement parameter types 1 and 4, the H and V values are applied every animation frame, and scaled by the number of tics consumed during that frame (approximately 2 tics/frame on DOSBox), meaning that the action delay is irrelevant for motion and that the motion is smooth.  An object with movement parameter 1 or 4 and a V-offset of 4 will move 1/4 (four 16ths) of a pixel every game tic, which is equal to 1/2 a pixel every game frame and about 17 pixels a second.&lt;br /&gt;
&lt;br /&gt;
Movement can also be defined in the behaviour, collision, or tile-check functions.  The offset applied in these functions is added to that defined by the action, and the net movement is applied to the object.  Remember that, if the Stick-to-Ground flag is set, the vertical movement defined by either the action or a function is ignored.&lt;br /&gt;
&lt;br /&gt;
== Behaviour, Collision, and Tile Checking Functions ==&lt;br /&gt;
&lt;br /&gt;
These are double-word pointers to the start of a function described in detail elsewhere.  Note that the behaviour function is called every frame for movement parameter types 1,2, and 4, but it is called right when the action switches to the next action for types 0 and 3.  The collision function is called every frame whenever an object is in contact with another object, and the tile-collion (draw function) is called every frame when the object is on screen.&lt;br /&gt;
&lt;br /&gt;
== Other Games ==&lt;br /&gt;
Although not part of the &amp;quot;Id Engine&amp;quot; proper, the physics and action code is shared by many games that use the Keen:Galaxy engine.  BioMenace, Dangerous Dave 3 and 4, and Rescue Rover 2 all use actions.  Shadow Nights, Dave 2, and Rescue Rover 1 might use actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19172</id>
		<title>Patch:Galaxy Action Parameters</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19172"/>
		<updated>2011-08-23T08:54:41Z</updated>

		<summary type="html">&lt;p&gt;Lemm: more stuff added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Galaxy action parameters are integral fields within [[Patch:Galaxy actions|Galaxy actions]] that control the movement of the objects (i.e., &amp;quot;sprites&amp;quot;) or the action timing.  The relevant subset of action fields is tabulated below.  Note that the &amp;quot;Next action&amp;quot; field is a 2-byte (near) pointer to another action, but is included here anyway for completeness&#039; sake.  Remember that the game has (at optimum speed), 35 animation frames per second, corresponding to 70 game &amp;quot;tics&amp;quot; per second (thus, one frame completes in two tics).  &amp;quot;Calling&amp;quot; a function means that the function code is executed in that animation frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 4:  Movement parameter  0-4&lt;br /&gt;
 Int 6:  Change h            0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-0x7FFF&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Movement Parameter ==&lt;br /&gt;
&lt;br /&gt;
The movement parameter defines how often the the [[Patch:Sprite behavior | behaviour]] function is called and how often the action movement amount offsets are applied.  It takes five meaningful values (0-4) summarized below:&lt;br /&gt;
&lt;br /&gt;
 Movement Parm       Behaviour Called...    Action Movements Applied...        Delay field is used?&lt;br /&gt;
 0                   Once                   Once                               Yes      &lt;br /&gt;
 1                   Once                   Every frame                        Yes&lt;br /&gt;
 2                   Every frame            Not applied                        No&lt;br /&gt;
 3                   Every frame            Once                               Yes&lt;br /&gt;
 4                   Every frame            Every frame                        Yes&lt;br /&gt;
&lt;br /&gt;
The behaviour is called either once, right before the action changes to the next action, or on every animation frame.  The action movements are applied to the object either once, when the action changes, or on every animation frame, scaled by the number of tics consumed by one animation frame (usually 2 tics/frame at optimum speed).  The delay field is used, meaning it specifies the number of tics before the action is advanced to the next action, or it is unused, meaning the action repeats itself every frame.&lt;br /&gt;
&lt;br /&gt;
In general, a behaviour that is called once would be used for spawning something (e.g., a slime puddle or projectile), while a behaviour called every frame would be used as a sensor.  Movements applied once per action are used for jerky locomotion (pedal, or serpentine), whereas movements application every frame is used for smooth motion.  Movement can also be defined in the behaviour, collision, and tile checking functions, in addition to the action movement parameters.  Examples of where action parameters are found, and how they can be used are described below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Type 0 ===&lt;br /&gt;
The bulk of sprites use type 0, meaning that the behavior is called AND the object is moved when action advances ( (i.e., when the sprite animates.) This is what makes poison slugs or arachnuts, for example, &#039;crawl&#039; in jerks. If animation is often enough and speed slow enough, motion seems smooth.  &lt;br /&gt;
&lt;br /&gt;
=== Type 1 ===&lt;br /&gt;
Type 1 is similar to type 0, but movement is smoother.  Here, the H/V movement offsets are applied every frame, depending on which way the berkeloid is facing.  Berkeloids use this to make sure their &#039;floating&#039; movement isn&#039;t jerky.&lt;br /&gt;
&lt;br /&gt;
=== Type 2 ===&lt;br /&gt;
Type 2 actions ignore any movement and delay timers (animation speed).  It is used notably for stunned falling sprites which keep falling all the time until they hit ground and move on.  Airboards also use this. In other words, used for things that need to be instantly responsive. They won&#039;t animate and need movement defined in their behavior.  Type 2 is best used for sensory behaviours.&lt;br /&gt;
&lt;br /&gt;
=== Type 3 === &lt;br /&gt;
Movement is jerky, happening every time the sprite animates. This is for things that need to be very responsive, but also animate. Dopefish and Mad Mushrooms use this because they must be able to react to walls and floors to avoid getting stuck.  The behaviour function of these creatures defines the motion, which is why they do not move in jerks.&lt;br /&gt;
&lt;br /&gt;
=== Type 4 ===&lt;br /&gt;
Type 4 is a rarely used case, sometimes used for things that are going to need to land on or leave the ground somehow. The flying bluebird does this for example, and it is about the only Keen 4 example.&lt;br /&gt;
&lt;br /&gt;
== Change h ==&lt;br /&gt;
The boolean &amp;quot;Change h&amp;quot; parameter affects the action timing in some manner.  It seems to be a flag telling an action to alter its timing if it is referenced as the &amp;quot;next action&amp;quot; of the previous action.&lt;br /&gt;
&lt;br /&gt;
== Stick to Ground ==&lt;br /&gt;
The boolean &amp;quot;Stick to Ground&amp;quot; (formerly, &amp;quot;Change V&amp;quot;) parameter affects the vertical movement of the object.  If Stick to Ground is 1, then the sprite will move DOWNWARDS by however far it moved left or right, for each animation frame.  Some objects will malfunction if they leave the ground (e.g., inchworms and arachnuts).  Because slopes are always less than 45 degrees, objects will always be forced into the ground if they are moving downhill.  If an object is to walk along the ground, this flag should be set to 1.  If the object is airborne, the flag must be set to 0.&lt;br /&gt;
&lt;br /&gt;
== Delay and Next Action ==&lt;br /&gt;
The &amp;quot;Delay&amp;quot; field specifies how many tics will pass before the action pointed to by the &amp;quot;Next action&amp;quot; pointer is selected.  If an action has a delay of 70, that action will remain valid for one second until the next action is selected.   Both fields serve no purpose for movement parameter type 2.  For movement types 0, 1, and 3, the delay also regulates how often the behaviour function or the movement parameters are applied (see table above).  If the next action is zero, then the sprite freezes.&lt;br /&gt;
&lt;br /&gt;
== H/V Movement Amount ==&lt;br /&gt;
The movement offsets allow for action-defined motion.  Movement offsets (here, and in general) are always in 16ths of a pixel, or 256ths of a tile.  Objects have an X-Motion (-1 = left, 0 = none, 1 = right), and a Y-motion parameter (-1 = up, 0 = none, 1 = down) that is defined by the sprite behaviour, collision, and tile-checking functions.  For movement parameter types 0 and 3, the H and V values are applied when the action delay timer expires.  For example, an action of parameter type 0, H-offset of 128, and delay of 35 will move right or left by a half tile every half second.  For movement parameter types 1 and 4, the H and V values are applied every animation frame, and scaled by the number of tics consumed during that frame (approximately 2 tics/frame on DOSBox), meaning that the action delay is irrelevant for motion and that the motion is smooth.  An object with movement parameter 1 or 4 and a V-offset of 4 will move 1/4 (four 16ths) of a pixel every game tic, which is equal to 1/2 a pixel every game frame and about 17 pixels a second.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Behaviour, Collision, and Tile Checking Functions ==&lt;br /&gt;
&lt;br /&gt;
These are double-word pointers to the start of a function.  They are described in detail elsewhere.  Note that the behaviour function is called every frame for movement parameter types 1,2, and 4, but it is called right when the action switches to the next action for types 0 and 3.  The collision function is called every frame whenever an object is in contact with another object, and the tile-collion (draw function) is called every frame when the object is on screen.&lt;br /&gt;
&lt;br /&gt;
== Other Games ==&lt;br /&gt;
Although not part of the &amp;quot;Id Engine&amp;quot; proper, the physics and action code is shared by many games that use the Keen:Galaxy engine.  BioMenace, Dangerous Dave 3 and 4, and Rescue Rover 2 all use actions.  Shadow Nights, Dave 2, and Rescue Rover 1 might use actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19170</id>
		<title>Patch:Galaxy Action Parameters</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Galaxy_Action_Parameters&amp;diff=19170"/>
		<updated>2011-08-22T22:00:39Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Action parameter descriptions added (this will tie all the small stuff together)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Galaxy action parameters are integral fields within [[Patch:Galaxy actions|Galaxy actions]] that control the movement of the objects (i.e., &amp;quot;sprites&amp;quot;) or the action timing.  The relevant subset of action fields is tabulated below.  Note that the &amp;quot;Next action&amp;quot; field is a 2-byte (near) pointer to another action, but is included here anyway for completeness&#039; sake.  Remember that the game has (at optimum speed), 35 animation frames per second, corresponding to 70 game &amp;quot;tics&amp;quot; per second (thus, one frame completes in two tics).  &amp;quot;Calling&amp;quot; a function means that the function code is executed in that animation frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Int     Description         Values&lt;br /&gt;
 Int 4:  Movement parameter  0-4&lt;br /&gt;
 Int 6:  Change h            0/1&lt;br /&gt;
 Int 8:  Stick to Ground     0/1&lt;br /&gt;
 Int 10: Delay (Anim speed)  0-8000&lt;br /&gt;
 Int 12: H anim move amount  +- any value&lt;br /&gt;
 Int 14: V anim move amount  +- any value&lt;br /&gt;
 Int 30: Next action         Valid actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Movement Parameter ==&lt;br /&gt;
&lt;br /&gt;
The movement parameter defines how often the the [[Patch:Sprite behavior | behaviour]] function is called and how often the action movement amount offsets are applied.  It takes five meaningful values (0-4) summarized below:&lt;br /&gt;
&lt;br /&gt;
 Movement Parm       Behaviour Called...    Action Movements Applied...        Delay field is used?&lt;br /&gt;
 0                   Once                   Once                               Yes      &lt;br /&gt;
 1                   Once                   Every frame                        Yes&lt;br /&gt;
 2                   Every frame            Not applied                        No&lt;br /&gt;
 3                   Every frame            Once                               Yes&lt;br /&gt;
 4                   Every frame            Every frame                        Yes&lt;br /&gt;
&lt;br /&gt;
The behaviour is called either once, right before the action changes to the next action, or on every animation frame.  The action movements are applied to the object either once, when the action changes, or on every animation frame.  The delay field is used, meaning it specifies the number of tics before the action is advanced to the next action, or it is unused, meaning the action repeats itself every frame.&lt;br /&gt;
&lt;br /&gt;
In general, a behaviour that is called once would be used for spawning something (e.g., a slime puddle or projectile), while a behaviour called every frame would be used as a sensor.  Movements applied once per action are used for jerky locomotion (pedal, or serpentine), whereas movements application every frame is used for smooth motion.  Movement can also be defined in the behaviour, collision, and tile checking functions, in addition to the action movement parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Type 0 ===&lt;br /&gt;
The bulk of sprites use type 0, meaning that the behavior is called AND the object is moved when action advances ( (i.e., when the sprite animates.) This is what makes poison slugs or arachnuts, for example, &#039;crawl&#039; in jerks. If animation is often enough and speed slow enough, motion seems smooth.  &lt;br /&gt;
&lt;br /&gt;
=== Type 1 ===&lt;br /&gt;
Type 1 is similar to type 0, but movement is smoother.  Here we take the total movement and then divide it by how long it takes for the sprite to animate, the move smoothly. Berkeloids use this to make sure their &#039;floating&#039; movement isn&#039;t jerky.&lt;br /&gt;
&lt;br /&gt;
=== Type 2 ===&lt;br /&gt;
Type 2 actions ignore any movement and delay timers (animation speed).  It is used notably for stunned falling sprites which keep falling all the time until they hit ground and move on.  Airboards also use this. In other words, used for things that need to be instantly responsive. They won&#039;t animate and need movement defined in their behavior.&lt;br /&gt;
&lt;br /&gt;
=== Type 3 === &lt;br /&gt;
Movement is jerky, happening every time the sprite animates. This is for things that need to be very responsive, but also animate. Dopefish and Mad Mushrooms use this because they must be able to react to walls and floors to avoid getting stuck.  The behaviour function of these creatures defines the motion, which is why they do not move in jerks.&lt;br /&gt;
&lt;br /&gt;
=== Type 4 ===&lt;br /&gt;
Type 4 is a rarely case, sometimes used for things that are going to need to land on or leave the ground somehow. The flying bluebird does this for example, and it is about the only Keen 4 example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
... more to come&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Sprite-tile_interaction&amp;diff=19169</id>
		<title>Patch:Sprite-tile interaction</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Sprite-tile_interaction&amp;diff=19169"/>
		<updated>2011-08-22T20:16:25Z</updated>

		<summary type="html">&lt;p&gt;Lemm: tile checking functions also do drawing in galaxy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The tile-checking (and/or drawing) function is a 32-bit (far) pointer to code that instructs the sprite based on its collisions with tiles (top, left, bottom, or right blocking). The tile checking function is also responsible for directing the game to draw the sprite.  Unlike the sprite behaviour functions, which might be called sporadically, the tile checking function is always called, every animation frame.&lt;br /&gt;
&lt;br /&gt;
Patches that affect the tile checking code itself are few and at [[Patch:Tile checking code]]. Related pages are [[Patch:Sprite behavior]] and [[Patch:Sprite collision]]. Patching tile check is simple enough, a four-byte pointer for every [[Patch:Galaxy actions|sprite action]] that you wish to change. Interestingly, sprite tile checks and drawing are rather simpler and different in Keen Vorticons, integrated with the main sprite code, and as such there are no patches for Vorticons on this page. Patches do however tend to be more difficult and only really useful when copying a value to increase the number of actions a sprite has.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Values in games =&lt;br /&gt;
&lt;br /&gt;
 Keen 4:&lt;br /&gt;
 $00000000L  	#Nothing&lt;br /&gt;
 $04EC0FA8RL    #Display &#039;Not enough memory to save game&#039; window, restart level&lt;br /&gt;
 $0D8F0E32RL    #Keen&#039;s shot (Hit walls, floors, ceilings and go zap.)&lt;br /&gt;
 $0E8F112FRL    #Swimming Keen (Hit walls, ceilings and floor &#039;softly&#039;)&lt;br /&gt;
 $09DC1795RL    #Walk back and forth, turn around at walls or edges&lt;br /&gt;
 $09DC176ERL    #Sit (Ignore all tiles unless clipped to notice them)&lt;br /&gt;
 $09DC1847RL    #Crawling Poison Slug&lt;br /&gt;
 $09DC1913RL    #Used by shot sprites (Fall until hit ground)&lt;br /&gt;
 $0B801A7BRL    #Floating Keen (Ignore all tiles, but stay in one place, e.g on poles.)&lt;br /&gt;
 $0B801AA2RL    #Standing Keen&lt;br /&gt;
 $0B801B5FRL    #Walking Keen&lt;br /&gt;
 $0B801C48RL    #Jumping Keen&lt;br /&gt;
 $0B801F81RL    #Pogoing Keen&lt;br /&gt;
 $0B802071RL    #Going down poles Keen&lt;br /&gt;
 $0FA804ECRL    #Mad Mushroom (Bounce like Mushroom off floors and ceilings)&lt;br /&gt;
 $0FA808A1RL    #Walking Bird (Walk on ground)&lt;br /&gt;
 $0FA80945RL    #Landing Bird (Check for gorund, if found become walking Bird)&lt;br /&gt;
 $0FA8097FRL    #Eggshell fragment (Move until hit ground)&lt;br /&gt;
 $0FA809B4RL    #Flying Bird (Hit walls, get stuck or go to landing Bird)&lt;br /&gt;
 $0FA80D0BRL    #Flying Skypest (Bounce off stuff, land sometimes)&lt;br /&gt;
 $108002E1RL    #Cloud (Float, reverse when hitting walls)&lt;br /&gt;
 $1080055ERL    #Berkeloid flame (Fly through air, become landed flame after hitting ground)&lt;br /&gt;
 $108005B5RL    #Flaming Berkeloid (Float above ground)&lt;br /&gt;
 $10800610RL    #Berkeloid (Float above gound and &#039;walk&#039; along it)&lt;br /&gt;
 $1080097ERL    #Bounder (Bounce off ground)&lt;br /&gt;
 $10800C71RL    #Lick on ground (Wait then jump)&lt;br /&gt;
 $10800F56RL    #Controllable Airboard (Ignore tiles, look for B sprites)&lt;br /&gt;
 $11A203DERL    #Jumping Smirky (Hit ceilings and stick, land on floors)&lt;br /&gt;
 $11A205C1RL    #Jumping Mimrock (Hit ceilings, walls and floors)&lt;br /&gt;
 $11A2062ERL    #Bouncing Mimrock (Hit floors)&lt;br /&gt;
 $11A20A3CRL    #Swimming Dopefish and Schoolfish (Mind walls)&lt;br /&gt;
 $11A20CA1RL    #Enemy shot (Darts, Sprite&#039;s shot; shoot into walls and vanish&lt;br /&gt;
&lt;br /&gt;
 Keen 5:&lt;br /&gt;
 $00000000L     #Nothing&lt;br /&gt;
 $090B17B5RL    #Solid (Default &#039;blocked by solid stuff collision used by many things)&lt;br /&gt;
 $090B17DCRL    #Move l/r and down slopes&lt;br /&gt;
 $090B195ARL    #Stunned&lt;br /&gt;
 $0AAF1A9FRL    #Keen sit (&#039;Sit in air&#039;; similar to normal Keen)&lt;br /&gt;
 $0AAF1AC6RL    #Keen (Blocked by blocking tiles, killed by deadly, etc, complex.)&lt;br /&gt;
 $0AAF1B83RL    #Keen walk&lt;br /&gt;
 $0AAF1C6CRL    #Keen in air (Fall, hit ground and walls)&lt;br /&gt;
 $0AAF200BRL    #Keen pogo (Can break fuses!)&lt;br /&gt;
 $0AAF2145RL    #Keen go down poles (If no pole left, fall)&lt;br /&gt;
 $0CCB11A2RL    #Keen&#039;s shot&lt;br /&gt;
 $0F920119RL    #Explosion fragments&lt;br /&gt;
 $0F9200A8RL    #Master teleport&lt;br /&gt;
 $0F9216ACRL    #Enemy shot&lt;br /&gt;
 $11020188RL    #Sparky&lt;br /&gt;
 $11020679RL    #Ampton walk (Check for poles and switches too)&lt;br /&gt;
 $11020897RL    #Bouncy Slicestar&lt;br /&gt;
 $11020B2FRL    #Shelley walk&lt;br /&gt;
 $11020BA1RL    #Shelley fall&lt;br /&gt;
 $11C4090ERL    #Shikadi mine&lt;br /&gt;
 $11C40B09RL    #Robo red&#039;s shoot&lt;br /&gt;
 $11C40C03RL    #Spirogrip slam&lt;br /&gt;
 $11C40D86RL    #Spindred&lt;br /&gt;
 $11C411B0RL    #Mater&#039;s shot&lt;br /&gt;
 $11C41248RL    #Master&#039;s sparks&lt;br /&gt;
 $11C41538RL    #Shikadi (Check for poles)&lt;br /&gt;
 $11C4179FRL    #Shocksund&lt;br /&gt;
 $11C418CBRL    #Shocksund jump&lt;br /&gt;
 $11C41980RL    #Shocksund&#039;s shot&lt;br /&gt;
 $11C41AC4RL    #Sphereful&lt;br /&gt;
&lt;br /&gt;
 Keen 6:&lt;br /&gt;
 TODO&lt;br /&gt;
&lt;br /&gt;
 Keen Dreams:&lt;br /&gt;
 TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Galaxy_actions&amp;diff=19168</id>
		<title>Patch talk:Galaxy actions</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Galaxy_actions&amp;diff=19168"/>
		<updated>2011-08-22T19:46:53Z</updated>

		<summary type="html">&lt;p&gt;Lemm: merge action field descriptions?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I wonder if all of the Galaxy action parameters should just have a subsection within the main &amp;quot;Galaxy Action&amp;quot; patch.  Some of these parameters are very simple and it doesn&#039;t warrant a new wiki page in my opinion.&lt;br /&gt;
[[User:Lemm|Lemm]] 19:46, 22 August 2011 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Treasure_Eater&amp;diff=18990</id>
		<title>Treasure Eater</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Treasure_Eater&amp;diff=18990"/>
		<updated>2011-07-14T09:29:31Z</updated>

		<summary type="html">&lt;p&gt;Lemm: searching&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Creature Infobox&lt;br /&gt;
| Appears = [[Keen 4]]&lt;br /&gt;
| Harmful = No&lt;br /&gt;
| Shots = 1&lt;br /&gt;
}}&lt;br /&gt;
[[Image:Gnosticene_ancient-ingame.png|frame|A Treasure Eater in [[Keen 4]]]]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Treasure Eaters&#039;&#039;&#039; are enemies found in [[Keen 4]], in the [[Shadowlands]] of [[Gnosticus IV]].&lt;br /&gt;
&lt;br /&gt;
Treasure Eaters can only be found in the [[Pyramid of the Gnosticene Ancients]]. They are large, red and quite spherical. They cannot walk and prefer to hop about. When they need to move larger distances they will teleport themselves, often with a shrill giggle. They live mostly off of [[Keen 4 Items|candy]] that they will go to any lengths to steal.&lt;br /&gt;
&lt;br /&gt;
If [[Keen]] does not kill any Treasure Eaters in the Pyramid of the Gnosticene Ancients, they will end up stealing the [[Gems|green gem]] needed to rescue the [[Council Member]], and Keen will have to start the level over again.&lt;br /&gt;
&lt;br /&gt;
As these creatures are not listed in the in-game help, they have also been known as Smirky (for their constant smiling and giggling) and [[Gnosticenes|Gnosticene]] Ancients (for the level name where they can be found), but [[Tom Hall]] has stated: &amp;lt;ref&amp;gt;[http://publiccommanderkeenforum.yuku.com/topic/656/t/Treasure-Eaters-and-Tom-s.html?page=2 PCKF forum post with Tom&#039;s full e-mail (yuku.com)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|I believe they are Treasure Eaters.... I&#039;d have to locate my original drawing... Not my best name in the series, but that&#039;s what they were there for!}}&lt;br /&gt;
&lt;br /&gt;
See also [[Keen 4 Creatures|List of Keen 4 Creatures]].&lt;br /&gt;
&lt;br /&gt;
== Modding info ==&lt;br /&gt;
&lt;br /&gt;
Treasure eaters will only take another hop if they see four consecutive tiles to their immediate right or left that are top blocking.  If they cannot make another hop twice, then they will teleport to the next piece of Candy.  They will search for candy and lifewater, and if it has all been collected, then they will disappear.  They always select the first piece of candy that they see in the sprite list, (which is generally the top-left most piece of candy remaining). If Keen is given the power to teleport (by patching with [[CKPatch]]) he too will steal the same candy and will disappear when it is removed.  The type of sprite that Treasure Eaters seek, and the number of unavailable moves they sense before teleporting can be patched.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Keen 4 creatures]]&lt;br /&gt;
[[Category:Creatures]]&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Sprite_motion_parameter&amp;diff=18982</id>
		<title>Patch:Sprite motion parameter</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Sprite_motion_parameter&amp;diff=18982"/>
		<updated>2011-07-13T09:10:58Z</updated>

		<summary type="html">&lt;p&gt;Lemm: explanations for types 3 and 4 were backwards&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The sprite motion parameter is the name for a variable that controls three aspects of Keen Galaxy sprites. The variable may have a value between 0 and 4 inclusive. Basically it controls when various things are run.&lt;br /&gt;
&lt;br /&gt;
The three variables affected are 1.) when the [[Patch:Sprite behavior|sprite behavior]] is run, 2.) When the sprite speed is run and 3.) When the [[Patch:Sprite actions|sprite action]] is run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Per frame vs per action ===&lt;br /&gt;
&lt;br /&gt;
How a sprite behaves varies depending on whether something is run once per action or once per game frame. There are 35 game frames in every second. How this affect the three variables above is as follows:&lt;br /&gt;
&lt;br /&gt;
Motion: If motion is run once then the sprite will move in a series of jerks, like an inchworm, as all the motion is used at once. (The sprite &#039;jumps from position A to position B) If the motion is run every game frame, then it is redrawn 35 times a second, giving it the appearance of smooth motion. (The sprite moves from position A to 1/35th near B, then 2/35ths...)&lt;br /&gt;
&lt;br /&gt;
Behavior: If the behavior is run constantly the sprite responds instantly to anything it should, such as Keen being close.This however eats up memory. Complex behaviors should be run once per action, and there are some behaviors like throwing projectiles that must be run once per action. (35 shots per second would quickly crash the game.)&lt;br /&gt;
&lt;br /&gt;
Action: usually the &#039;animation speed&#039; controls how long the current action lasts. If it is not used then the sprite will stay in its current action for a varying amount of time. This is useful in that a sprite can sit or fall for as long as it needs to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Values ===&lt;br /&gt;
&lt;br /&gt;
The five values and what they do are as follows:&lt;br /&gt;
&lt;br /&gt;
0: Behavior run once, smooth movement, animation speed controls action length. Used for smoothly moving sprites like walking Keen or moving platforms.&lt;br /&gt;
&lt;br /&gt;
1: Behavior and movement are run once, animation speed controls action length. Commonly used, e.g. Inchworms.&lt;br /&gt;
&lt;br /&gt;
2: Behavior run once, BUT animation speed and movement speed are ignored. Used for sprites that need to sit\fall for varying amounts of time. Stunned sprites use this, allowing them to fall until they react to hitting the ground. While the action movement speed is ignored, other motion programmed in any of the sprite behaviours, if any, is smooth.&lt;br /&gt;
&lt;br /&gt;
3: Behavior run continuously, motion is jerky, animation speed controls action length. This is for responsive things that mover jerkily and as such is rare. The landing blue bird in Keen 4 uses this (When close to the ground it &#039;jerks&#039; down to land.)&lt;br /&gt;
&lt;br /&gt;
4: Behavior run continuously, motion is smooth, animation speed controls action length. This is for responsive sprites that must move smoothly, like the Mad Mushroom (Turn to face Keen, bounce off floors)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;br /&gt;
{{PatchCategories|Sprite|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Treasure_Eater&amp;diff=18973</id>
		<title>Treasure Eater</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Treasure_Eater&amp;diff=18973"/>
		<updated>2011-07-12T11:20:48Z</updated>

		<summary type="html">&lt;p&gt;Lemm: treasure eater patching info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Creature Infobox&lt;br /&gt;
| Appears = [[Keen 4]]&lt;br /&gt;
| Harmful = No&lt;br /&gt;
| Shots = 1&lt;br /&gt;
}}&lt;br /&gt;
[[Image:Gnosticene_ancient-ingame.png|frame|A Treasure Eater in [[Keen 4]]]]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Treasure Eaters&#039;&#039;&#039; are enemies found in [[Keen 4]], in the [[Shadowlands]] of [[Gnosticus IV]].&lt;br /&gt;
&lt;br /&gt;
Treasure Eaters can only be found in the [[Pyramid of the Gnosticene Ancients]]. They are large, red and quite spherical. They cannot walk and prefer to hop about. When they need to move larger distances they will teleport themselves, often with a shrill giggle. They live mostly off of [[Keen 4 Items|candy]] that they will go to any lengths to steal.&lt;br /&gt;
&lt;br /&gt;
If [[Keen]] does not kill any Treasure Eaters in the Pyramid of the Gnosticene Ancients, they will end up stealing the [[Gems|green gem]] needed to rescue the [[Council Member]], and Keen will have to start the level over again.&lt;br /&gt;
&lt;br /&gt;
As these creatures are not listed in the in-game help, they have also been known as Smirky (for their constant smiling and giggling) and [[Gnosticenes|Gnosticene]] Ancients (for the level name where they can be found), but [[Tom Hall]] has stated: &amp;lt;ref&amp;gt;[http://publiccommanderkeenforum.yuku.com/topic/656/t/Treasure-Eaters-and-Tom-s.html?page=2 PCKF forum post with Tom&#039;s full e-mail (yuku.com)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|I believe they are Treasure Eaters.... I&#039;d have to locate my original drawing... Not my best name in the series, but that&#039;s what they were there for!}}&lt;br /&gt;
&lt;br /&gt;
See also [[Keen 4 Creatures|List of Keen 4 Creatures]].&lt;br /&gt;
&lt;br /&gt;
== Modding info ==&lt;br /&gt;
&lt;br /&gt;
Treasure eaters will only take another hop if they see four consecutive tiles to their immediate right or left that are top blocking.  If they cannot make another hop twice, then they will teleport to the next piece of Candy.  They will only search for candy and lifewater that is spawned in the infoplane, and if that has been collected, then they will disappear.  They always select the first piece of candy that they see in the sprite list, (which is generally the top-left most piece of candy remaining). If Keen is given the power to teleport (by patching with [[CKPatch]]) he too will steal the same candy and will disappear when it is removed.  The type of sprite that Treasure Eaters seek, and the number of unavailable moves they sense before teleporting can be patched.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Keen 4 creatures]]&lt;br /&gt;
[[Category:Creatures]]&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Vorticons_2&amp;diff=18472</id>
		<title>Patch:Vorticons 2</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Vorticons_2&amp;diff=18472"/>
		<updated>2011-03-24T09:40:49Z</updated>

		<summary type="html">&lt;p&gt;Lemm: added link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Vorticons 2 patch is a large and complex patch used to drastically alter the capabilities of the Keen Engine, including such things as sloped tiles and multiple tilesets. There are currently two versions, 320x200 and 640x400. The original patch relied on a number of external binary files to work, but it is possible to run it as a single patch.&lt;br /&gt;
&lt;br /&gt;
The patch as given here is very complex and should not be modified unless you are absolutely sure of what you are doing.&lt;br /&gt;
&lt;br /&gt;
The page is divided into three sections, the 320x200 patch, the 640x400 patch and c section covering compatibility with existing patches and utilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
&lt;br /&gt;
The v2 patch will run only with Dosbox 0.71 and above. The dosbox.conf file must contain the line &#039;machine = svga_paradise&#039; for the graphics to work. Only the latest version of [[CKPatch]] can handle the size of the patch and its format. Only [[Keengraph]] can create graphics compatible with the patch. The patch is for Keen 1 v1.31 only. There is a special utility to produce tilesets for the game; [[Dr. Kylstein&#039;s Tileset Editor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 320x200 Patch ==&lt;br /&gt;
&lt;br /&gt;
This is the &#039;standard&#039; patch, with the same resolution as the unmodified Keen game. This has more graphics memory than the following patch and has no major flaws. It is the version recommended for use.&lt;br /&gt;
&lt;br /&gt;
Due to tile patching, levels cannot be too small or the graphics will look like gibberish. A section of patchable values and effects is at the end of this patch, These can be altered or even deleted if wanted. This patch should be the last in a patch file, ensuring that it will not be overwritten by incompatible patches.&lt;br /&gt;
&lt;br /&gt;
Patches that are related to or a part of this patch include [[Patch:Palette]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1 320x200 Vorticons 2&amp;quot;&amp;gt;&lt;br /&gt;
#================ V2 PATCH  320x200 ======================&lt;br /&gt;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;br /&gt;
#The following stuff id alterable, you can alter it if you want&lt;br /&gt;
#to make the game more to your liking.&lt;br /&gt;
&lt;br /&gt;
#This is the color palette: 16 entries of r, g, b (each 0-63)&lt;br /&gt;
#This is part of several palette patches as well.&lt;br /&gt;
%patch $1DCB0&lt;br /&gt;
       00 00 00 #black &lt;br /&gt;
       00 00 42 #blue &lt;br /&gt;
       00 42 00 #green &lt;br /&gt;
       00 42 42 #cyan &lt;br /&gt;
       42 00 00 #red &lt;br /&gt;
       42 00 42 #magenta &lt;br /&gt;
       42 21 00 #brown &lt;br /&gt;
       42 42 42 #bright gray &lt;br /&gt;
       21 21 21 #gray &lt;br /&gt;
       21 21 63 #bright blue &lt;br /&gt;
       21 63 21 #bright green &lt;br /&gt;
       21 63 63 #bright cyan &lt;br /&gt;
       63 21 21 #bright red &lt;br /&gt;
       63 21 63 #pink &lt;br /&gt;
       63 63 21 #yellow &lt;br /&gt;
       63 63 63 #white &lt;br /&gt;
&lt;br /&gt;
#Reply scrolling Apogee when &#039;restart demo&#039; is selected&lt;br /&gt;
%patch $90D2 $01&lt;br /&gt;
%patch $907C $C7 $06 $58 $56 $00 $00&lt;br /&gt;
%patch $15CE $0003W&lt;br /&gt;
&lt;br /&gt;
#Draw the Main Menu despite graphics changes&lt;br /&gt;
#Only change the menu size if you want to patch this&lt;br /&gt;
%patch $9600 $E8 $01A8W&lt;br /&gt;
             $B8 [$000AW] $50 #menu height&lt;br /&gt;
             $B8 [$0012W] $50 #menu width&lt;br /&gt;
             $E8 $CAB0W $83 $C4 $04 $A1 $8282W $66 $98 $66 $A3 $AAF4W&lt;br /&gt;
             $A1 $82F8W $66 $98 $66 $A3 $AAF8W $90&lt;br /&gt;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;br /&gt;
&lt;br /&gt;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;br /&gt;
#This stuff should NOT be tampered with. It is the main body of the patch&lt;br /&gt;
#and contains vital code. Leave it be.&lt;br /&gt;
&lt;br /&gt;
#Set memory map to mode 00 == 0A0000h to 0BFFFFh&lt;br /&gt;
#only required if using the paradise machine setting&lt;br /&gt;
%patch $6E51 $BA $CE $03 $B0 $06 $EE $42 $EC $24 $F3 $EE $EB $15&lt;br /&gt;
&lt;br /&gt;
#Lots and lots of code:&lt;br /&gt;
%patch $11F80 $66 $C1 $E3 $10 $66 $C1 $EB $10 $66 $33 $C9 $66 $33 $D2 $66 $B8&lt;br /&gt;
              $00 $03 $00 $00 $66 $0F $AF $C1 $66 $05 $04 $06 $00 $00 $66 $8B&lt;br /&gt;
              $F8 $66 $B8 $15 $00 $00 $00 $66 $0F $AF $C1 $66 $03 $C2 $67 $26&lt;br /&gt;
              $8B $34 $43 $D1 $E6 $8B $32 $57 $E8 $1D $00 $5F $47 $47 $66 $42&lt;br /&gt;
              $66 $83 $FA $15 $7C $DB $66 $0F $BF $06 $54 $56 $66 $03 $D8 $66&lt;br /&gt;
              $41 $66 $83 $F9 $0E $7C $B4 $CB $06 $1E $50 $8E $06 $B2 $35 $8E&lt;br /&gt;
              $1E $6A $83 $B8 $2E $00 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4&lt;br /&gt;
              $03 $F8 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4&lt;br /&gt;
              $03 $F8 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4&lt;br /&gt;
              $03 $F8 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4 $03 $F8 $A4 $A4&lt;br /&gt;
              $03 $F8 $A4 $A4 $03 $F8 $58 $1F $07 $C3&lt;br /&gt;
%patch $B7B2  $38C0W&lt;br /&gt;
%patch $B7AA  $38C0W&lt;br /&gt;
%patch $6EED  $A610W&lt;br /&gt;
%patch $6F1B  $A610W&lt;br /&gt;
%patch $6F3C  $A610W&lt;br /&gt;
%patch $6F5D  $A610W&lt;br /&gt;
%patch $B8AB  $A2F0W&lt;br /&gt;
%patch $B8B1  $2F00W&lt;br /&gt;
%patch $0298  $EB $28&lt;br /&gt;
%patch $97E5  $90 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $9861  $90 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $9A51  $90 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $A5B1  $90 $90 $90 $90 $90 $90&lt;br /&gt;
%patch $116C0 $55 $8B $EC $83 $EC $3C $56 $57 $33 $C0 $89 $46 $FE $89 $46 $C8&lt;br /&gt;
              $66 $0F $BF $1E $3E $82 $66 $A1 $30 $82 $66 $89 $46 $FA $66 $8B&lt;br /&gt;
              $C8 $66 $C1 $E9 $0C $89 $4E $F8 $66 $03 $C3 $66 $A3 $30 $82 $66&lt;br /&gt;
              $C1 $E8 $0C $89 $46 $F6 $66 $A1 $38 $82 $66 $89 $46 $F2 $66 $8B&lt;br /&gt;
              $C8 $66 $C1 $E9 $0C $89 $4E $F0 $66 $03 $C3 $66 $A3 $38 $82 $66&lt;br /&gt;
              $C1 $E8 $0C $89 $46 $EE $66 $A1 $2C $82 $66 $8B $C8 $66 $C1 $E8&lt;br /&gt;
              $0C $89 $46 $EC $66 $A1 $34 $82 $66 $03 $C8 $66 $C1 $E8 $0C $89&lt;br /&gt;
              $46 $EA $66 $8B $C1 $66 $D1 $E8 $66 $89 $46 $E6 $66 $C1 $E8 $0C&lt;br /&gt;
              $89 $46 $E4 $83 $FB $00 $0F $84 $CC $01 $0F $8C $E6 $00 $8B $4E&lt;br /&gt;
              $E4 $8B $46 $F0 $BA $00 $00 $E8 $7C $07 $A8 $80 $74 $2C $8B $F0&lt;br /&gt;
              $66 $33 $D2 $8B $56 $F0 $66 $C1 $E2 $0C $66 $8B $46 $E6 $E8 $FF&lt;br /&gt;
              $06 $66 $3B $46 $F2 $7E $13 $66 $3B $06 $38 $82 $7F $0C $66 $2B&lt;br /&gt;
              $06 $38 $82 $66 $48 $FF $46 $C8 $EB $78 $8B $46 $EE $3B $46 $F0&lt;br /&gt;
              $0F $84 $82 $01 $8B $7E $EC $3B $7E $EA $7F $26 $8B $46 $EE $8B&lt;br /&gt;
              $CF $BA $00 $00 $E8 $2F $07 $A8 $80 $75 $14 $A8 $03 $74 $10 $A1&lt;br /&gt;
%patch $117B0 $38 $82 $40 $25 $FF $0F $F7 $D8 $66 $98 $FF $4E $C8 $EB $43 $47&lt;br /&gt;
              $EB $D5 $8B $46 $EE $8B $4E $E4 $BA $00 $00 $E8 $08 $07 $A8 $80&lt;br /&gt;
              $0F $84 $42 $01 $8B $F0 $66 $33 $D2 $8B $56 $EE $66 $C1 $E2 $0C&lt;br /&gt;
              $66 $8B $46 $E6 $E8 $89 $06 $66 $3B $46 $F2 $0F $8E $27 $01 $66&lt;br /&gt;
              $3B $06 $38 $82 $0F $8F $1E $01 $66 $2B $06 $38 $82 $66 $48 $FF&lt;br /&gt;
              $46 $C8 $C7 $06 $42 $82 $00 $00 $01 $06 $3E $82 $66 $01 $06 $30&lt;br /&gt;
              $82 $66 $01 $06 $38 $82 $66 $A1 $30 $82 $66 $C1 $E8 $0C $8B $46&lt;br /&gt;
              $EC $66 $A1 $38 $82 $66 $C1 $E8 $0C $8B $46 $EA $C7 $46 $FE $02&lt;br /&gt;
              $00 $E9 $E2 $00 $8B $4E $E4 $8B $46 $F8 $BA $02 $00 $E8 $96 $06&lt;br /&gt;
              $A8 $80 $74 $2F $8B $F0 $66 $33 $D2 $8B $56 $F8 $66 $C1 $E2 $0C&lt;br /&gt;
              $66 $8B $46 $E6 $E8 $19 $06 $66 $3B $46 $FA $0F $8F $B7 $00 $66&lt;br /&gt;
              $3B $06 $30 $82 $0F $8E $AE $00 $66 $2B $06 $30 $82 $66 $83 $C0&lt;br /&gt;
              $04 $EB $72 $8B $46 $F6 $3B $46 $F8 $0F $84 $99 $00 $8B $7E $EC&lt;br /&gt;
              $3B $7E $EA $7F $27 $8B $46 $F6 $8B $CF $BA $02 $00 $E8 $46 $06&lt;br /&gt;
              $A8 $80 $75 $15 $A8 $03 $74 $11 $66 $33 $C0 $8B $46 $F8 $66 $C1&lt;br /&gt;
%patch $118A0 $E0 $0C $66 $2B $06 $30 $82 $EB $3C $47 $EB $D4 $8B $46 $F6 $8B&lt;br /&gt;
              $4E $E4 $BA $02 $00 $E8 $1E $06 $A8 $80 $74 $5A $8B $F0 $66 $33&lt;br /&gt;
              $D2 $8B $56 $F6 $66 $C1 $E2 $0C $66 $8B $46 $E6 $E8 $A1 $05 $66&lt;br /&gt;
              $3B $46 $FA $7F $41 $66 $3B $06 $30 $82 $7E $3A $66 $2B $06 $30&lt;br /&gt;
              $82 $66 $83 $C0 $04 $C7 $06 $42 $82 $00 $00 $01 $06 $3E $82 $66&lt;br /&gt;
              $01 $06 $30 $82 $66 $01 $06 $38 $82 $66 $A1 $30 $82 $66 $C1 $E8&lt;br /&gt;
              $0C $8B $46 $EC $66 $A1 $38 $82 $66 $C1 $E8 $0C $8B $46 $EA $C7&lt;br /&gt;
              $46 $FE $08 $00 $EB $00 $66 $0F $BF $1E $3C $82 $66 $A1 $2C $82&lt;br /&gt;
              $66 $89 $46 $FA $66 $8B $C8 $66 $C1 $E9 $0C $89 $4E $F8 $66 $03&lt;br /&gt;
              $C3 $66 $A3 $2C $82 $66 $C1 $E8 $0C $89 $46 $F6 $66 $A1 $34 $82&lt;br /&gt;
              $66 $89 $46 $F2 $66 $8B $C8 $66 $C1 $E9 $0C $89 $4E $F0 $66 $03&lt;br /&gt;
              $C3 $66 $A3 $34 $82 $66 $C1 $E8 $0C $89 $46 $EE $66 $8B $46 $E6&lt;br /&gt;
              $66 $03 $C3 $66 $89 $46 $E0 $66 $C1 $E8 $0C $89 $46 $DE $66 $A1&lt;br /&gt;
              $30 $82 $66 $C1 $E8 $0C $89 $46 $EC $66 $A1 $38 $82 $66 $C1 $E8&lt;br /&gt;
              $0C $89 $46 $EA $66 $33 $C0 $66 $89 $46 $DA $66 $89 $46 $D6 $66&lt;br /&gt;
%patch $11990 $89 $46 $D2 $83 $FB $00 $0F $84 $CD $04 $0F $8C $FF $00 $8B $4E&lt;br /&gt;
              $E4 $8B $46 $EC $BA $03 $00 $E8 $2C $05 $A8 $80 $74 $2B $8B $F0&lt;br /&gt;
              $66 $33 $D2 $8B $56 $E4 $66 $C1 $E2 $0C $66 $A1 $30 $82 $E8 $DF&lt;br /&gt;
              $04 $66 $3B $46 $E6 $7C $12 $66 $3B $46 $E0 $7D $0C $66 $2B $46&lt;br /&gt;
              $E0 $66 $83 $E8 $20 $66 $89 $46 $DA $8B $46 $EE $3B $46 $F0 $74&lt;br /&gt;
              $38 $8B $7E $EA $81 $7E $C8 $01 $00 $75 $01 $4F $3B $7E $EC $7C&lt;br /&gt;
              $28 $8B $C7 $8B $4E $EE $BA $03 $00 $E8 $DA $04 $A8 $80 $75 $16&lt;br /&gt;
              $A9 $03 $00 $74 $11 $A1 $34 $82 $40 $25 $FF $0F $F7 $D8 $66 $98&lt;br /&gt;
              $66 $89 $46 $D6 $EB $40 $4F $EB $D3 $8B $4E $DE $8B $46 $EC $BA&lt;br /&gt;
              $03 $00 $E8 $B1 $04 $A8 $80 $74 $2D $8B $F0 $66 $33 $D2 $8B $56&lt;br /&gt;
              $DE $66 $C1 $E2 $0C $66 $A1 $30 $82 $E8 $64 $04 $66 $3B $46 $E6&lt;br /&gt;
              $7C $12 $66 $3B $46 $E0 $7D $0C $66 $2B $46 $E0 $66 $83 $E8 $20&lt;br /&gt;
              $66 $89 $46 $DA $EB $00 $66 $8B $46 $DA $66 $3B $46 $D6 $7C $04&lt;br /&gt;
              $66 $8B $46 $D6 $66 $3B $46 $D2 $7C $04 $66 $8B $46 $D2 $66 $0B&lt;br /&gt;
              $C0 $74 $27 $C7 $06 $40 $82 $00 $00 $01 $06 $3C $82 $66 $01 $06&lt;br /&gt;
%patch $11A80 $2C $82 $66 $01 $06 $34 $82 $66 $01 $46 $E0 $66 $8B $46 $E0 $66&lt;br /&gt;
              $C1 $E8 $0C $8B $46 $DE $83 $4E $FE $04 $E9 $00 $01 $8B $4E $E4&lt;br /&gt;
              $8B $46 $EC $BA $01 $00 $E8 $2D $04 $A8 $80 $74 $2B $8B $F0 $66&lt;br /&gt;
              $33 $D2 $8B $56 $E4 $66 $C1 $E2 $0C $66 $A1 $30 $82 $E8 $E0 $03&lt;br /&gt;
              $66 $3B $46 $E6 $7F $12 $66 $3B $46 $E0 $7C $0C $66 $2B $46 $E0&lt;br /&gt;
              $66 $83 $C0 $20 $66 $89 $46 $DA $8B $46 $F6 $3B $46 $F8 $74 $3C&lt;br /&gt;
              $8B $7E $EA $81 $7E $C8 $01 $00 $75 $01 $4F $3B $7E $EC $7C $2C&lt;br /&gt;
              $8B $C7 $8B $4E $F6 $BA $01 $00 $E8 $DB $03 $A8 $80 $75 $1A $A9&lt;br /&gt;
              $03 $00 $74 $15 $66 $33 $C0 $8B $46 $F8 $66 $C1 $E0 $0C $66 $2B&lt;br /&gt;
              $06 $2C $82 $66 $89 $46 $D6 $EB $40 $4F $EB $CF $8B $4E $DE $8B&lt;br /&gt;
              $46 $EC $BA $01 $00 $E8 $AE $03 $A8 $80 $74 $2D $8B $F0 $66 $33&lt;br /&gt;
              $D2 $8B $56 $DE $66 $C1 $E2 $0C $66 $A1 $30 $82 $E8 $61 $03 $66&lt;br /&gt;
              $3B $46 $E6 $7F $12 $66 $3B $46 $E0 $7C $0C $66 $2B $46 $E0 $66&lt;br /&gt;
              $83 $C0 $20 $66 $89 $46 $DA $EB $00 $66 $8B $46 $DA $66 $3B $46&lt;br /&gt;
              $D6 $7F $04 $66 $8B $46 $D6 $66 $3B $46 $D2 $7F $04 $66 $8B $46&lt;br /&gt;
%patch $11B70 $D2 $66 $0B $C0 $74 $27 $C7 $06 $40 $82 $00 $00 $01 $06 $3C $82&lt;br /&gt;
              $66 $01 $06 $2C $82 $66 $01 $06 $34 $82 $66 $01 $46 $E0 $66 $8B&lt;br /&gt;
              $46 $E0 $66 $C1 $E8 $0C $8B $46 $DE $83 $4E $FE $01 $8B $46 $E4&lt;br /&gt;
              $3B $46 $DE $0F $85 $93 $00 $83 $7E $C8 $00 $0F $8C $B8 $02 $74&lt;br /&gt;
              $0F $33 $D2 $8B $4E $DE $8B $46 $EA $E8 $1A $03 $8B $F0 $EB $4D&lt;br /&gt;
              $8B $4E $DE $8B $46 $EA $33 $D2 $E8 $0B $03 $8B $F0 $A8 $80 $0F&lt;br /&gt;
              $84 $94 $02 $66 $33 $D2 $8B $56 $DE $66 $C1 $E2 $0C $66 $A1 $38&lt;br /&gt;
              $82 $E8 $BC $02 $83 $3E $3C $82 $00 $7C $12 $66 $3B $46 $E6 $0F&lt;br /&gt;
              $8C $74 $02 $66 $3B $46 $E0 $0F $8F $6C $02 $EB $10 $66 $3B $46&lt;br /&gt;
              $E6 $0F $8F $62 $02 $66 $3B $46 $E0 $0F $8C $5A $02 $66 $33 $D2&lt;br /&gt;
              $8B $56 $EA $66 $C1 $E2 $0C $66 $8B $46 $E0 $E8 $52 $02 $66 $2B&lt;br /&gt;
              $06 $38 $82 $66 $48 $01 $06 $3E $82 $66 $01 $06 $30 $82 $66 $01&lt;br /&gt;
              $06 $38 $82 $83 $4E $FE $02 $E9 $2D $02 $83 $7E $C8 $00 $7F $53&lt;br /&gt;
              $0F $8C $F6 $00 $8B $4E $E4 $8B $46 $EA $33 $D2 $E8 $87 $02 $8B&lt;br /&gt;
              $F0 $A8 $80 $0F $84 $69 $FF $66 $33 $D2 $8B $56 $E4 $66 $C1 $E2&lt;br /&gt;
%patch $11C60 $0C $66 $A1 $38 $82 $E8 $38 $02 $83 $3E $3C $82 $00 $7C $12 $66&lt;br /&gt;
              $3B $46 $E6 $0F $8C $49 $FF $66 $3B $46 $E0 $0F $8F $41 $FF $EB&lt;br /&gt;
              $30 $66 $3B $46 $E6 $0F $8F $37 $FF $66 $3B $46 $E0 $0F $8C $2F&lt;br /&gt;
              $FF $EB $1E $8B $46 $EA $8B $4E $E4 $33 $D2 $E8 $38 $02 $8B $1E&lt;br /&gt;
              $3C $82 $0F $BA $E0 $06 $73 $02 $F7 $DB $83 $FB $00 $0F $8F $18&lt;br /&gt;
              $01 $8B $46 $EA $8B $4E $DE $33 $D2 $E8 $1A $02 $A8 $80 $74 $1D&lt;br /&gt;
              $8B $F0 $66 $33 $D2 $8B $56 $EA $66 $C1 $E2 $0C $66 $8B $46 $E0&lt;br /&gt;
              $E8 $9D $01 $66 $2B $06 $38 $82 $66 $48 $E9 $78 $01 $8B $46 $EA&lt;br /&gt;
              $8B $4E $DE $33 $D2 $E8 $EE $01 $A8 $80 $75 $12 $A8 $03 $74 $0E&lt;br /&gt;
              $A1 $38 $82 $40 $25 $FF $0F $F7 $D8 $66 $98 $E9 $57 $01 $8B $46&lt;br /&gt;
              $EA $48 $8B $4E $DE $33 $D2 $E8 $CC $01 $A8 $80 $74 $1E $8B $F0&lt;br /&gt;
              $66 $33 $D2 $8B $56 $EA $4A $66 $C1 $E2 $0C $66 $8B $46 $E0 $E8&lt;br /&gt;
              $4E $01 $66 $2B $06 $38 $82 $66 $48 $E9 $29 $01 $A1 $38 $82 $40&lt;br /&gt;
              $25 $FF $0F $F7 $D8 $66 $98 $E9 $1B $01 $8B $46 $EA $40 $8B $4E&lt;br /&gt;
              $DE $33 $D2 $E8 $90 $01 $A8 $80 $74 $1E $8B $F0 $66 $33 $D2 $8B&lt;br /&gt;
%patch $11D50 $56 $EA $42 $66 $C1 $E2 $0C $66 $8B $46 $E0 $E8 $12 $01 $66 $2B&lt;br /&gt;
              $06 $38 $82 $66 $48 $E9 $ED $00 $8B $46 $EA $40 $8B $4E $DE $33&lt;br /&gt;
              $D2 $E8 $62 $01 $A8 $80 $75 $16 $A8 $03 $74 $12 $66 $A1 $38 $82&lt;br /&gt;
              $66 $0D $FF $0F $00 $00 $66 $2B $06 $38 $82 $E9 $C7 $00 $8B $46&lt;br /&gt;
              $EA $8B $4E $DE $33 $D2 $E8 $3D $01 $A8 $80 $74 $1D $8B $F0 $66&lt;br /&gt;
              $33 $D2 $8B $56 $EA $66 $C1 $E2 $0C $66 $8B $46 $E0 $E8 $C0 $00&lt;br /&gt;
              $66 $2B $06 $38 $82 $66 $48 $E9 $9B $00 $66 $A1 $38 $82 $66 $0D&lt;br /&gt;
              $FF $0F $00 $00 $66 $2B $06 $38 $82 $8B $46 $EA $8B $4E $DE $33&lt;br /&gt;
              $D2 $E8 $02 $01 $A8 $80 $74 $1C $8B $F0 $66 $33 $D2 $8B $56 $EA&lt;br /&gt;
              $66 $C1 $E2 $0C $66 $8B $46 $E0 $E8 $85 $00 $66 $2B $06 $38 $82&lt;br /&gt;
              $66 $48 $EB $61 $8B $46 $EA $40 $8B $4E $DE $33 $D2 $E8 $D6 $00&lt;br /&gt;
              $A8 $80 $75 $15 $A8 $03 $74 $11 $66 $A1 $38 $82 $66 $0D $FF $0F&lt;br /&gt;
              $00 $00 $66 $2B $06 $38 $82 $EB $3C $8B $46 $EA $40 $8B $4E $DE&lt;br /&gt;
              $33 $D2 $E8 $B1 $00 $A8 $80 $74 $1D $8B $F0 $66 $33 $D2 $8B $56&lt;br /&gt;
              $EA $42 $66 $C1 $E2 $0C $66 $8B $46 $E0 $E8 $33 $00 $66 $2B $06&lt;br /&gt;
%patch $11E40 $38 $82 $66 $48 $EB $0F $66 $A1 $38 $82 $66 $0D $FF $0F $00 $00&lt;br /&gt;
              $66 $2B $06 $38 $82 $01 $06 $3E $82 $66 $01 $06 $30 $82 $66 $01&lt;br /&gt;
              $06 $38 $82 $83 $4E $FE $02 $8B $46 $FE $5F $5E $8B $E5 $5D $CB&lt;br /&gt;
              $8B $CE $80 $E1 $30 $C0 $E9 $04 $66 $33 $DB $8B $DE $83 $E3 $0C&lt;br /&gt;
              $66 $25 $FF $0F $00 $00 $0F $BA $E6 $06 $73 $06 $80 $C3 $04 $66&lt;br /&gt;
              $F7 $D8 $66 $D3 $F8 $66 $C1 $E3 $08 $66 $03 $C3 $66 $03 $C2 $C3&lt;br /&gt;
              $8B $CE $80 $E1 $30 $C0 $E9 $04 $66 $33 $DB $8B $DE $83 $E3 $0C&lt;br /&gt;
              $66 $25 $FF $0F $00 $00 $0F $BA $E6 $06 $73 $03 $80 $C3 $04 $66&lt;br /&gt;
              $C1 $E3 $08 $66 $2B $C3 $0F $BA $E6 $06 $73 $03 $66 $F7 $D8 $66&lt;br /&gt;
              $D3 $E0 $66 $03 $C2 $C3 $0F $AF $06 $08 $6C $03 $C1 $D1 $E0 $C4&lt;br /&gt;
              $1E $48 $6C $03 $D8 $26 $8B $07 $69 $D2 $8E $03 $03 $D0 $8B $DA&lt;br /&gt;
              $8A $87 $38 $41 $32 $E4 $C3&lt;br /&gt;
%patch $2C6D  $A1 $40 $82 $F7 $2E $14 $5B $01 $06 $3C $82 $A1 $42 $82 $F7 $2E&lt;br /&gt;
              $14 $5B $01 $06 $3E $82 $2E $FF $1E $E3 $13 $C3&lt;br /&gt;
%patch $0676  $E8 $D9BW&lt;br /&gt;
%patch $182F4 &amp;quot;TILEHEAD.CK1&amp;quot; $00&lt;br /&gt;
%patch $13BF $8C $C8 $05 $6C $0E $2E $A3 $E5 $13 $B8 $12 $10 $B9 $08 $00 $BB&lt;br /&gt;
             $00 $00 $1E $07 $BA $60 $AC $CD $10 $BB $18 $00 $BA $78 $AC $CD&lt;br /&gt;
             $10 $E9 $74 $01 $00 $30 $00 $00 $C7 $06 $52 $82 $54 $40 $C7 $06&lt;br /&gt;
             $4A $82 $00 $00 $A1 $40 $82 $A3 $4C $82 $C7 $06 $40 $82 $00 $00&lt;br /&gt;
             $E9 $C8 $2B $C7 $06 $52 $82 $67 $38 $B8 $07 $00 $50 $E8 $E4 $AA&lt;br /&gt;
             $44 $44 $E9 $ED $29 $56 $57 $A3 $04 $83 $BA $C4 $03 $EC $32 $E4&lt;br /&gt;
             $50 $B0 $02 $EE $42 $EC $50 $B8 $00 $3D $BA $A4 $52 $CD $21 $8B&lt;br /&gt;
             $D8 $B8 $00 $42 $33 $C9 $8B $16 $04 $83 $C1 $E2 $04 $CD $21 $B8&lt;br /&gt;
             $00 $3F $B9 $10 $00 $BA $90 $82 $CD $21 $B4 $3E $CD $21 $B8 $00&lt;br /&gt;
             $3D $BA $90 $82 $CD $21 $8B $D8 $B8 $00 $3F $B9 $40 $00 $BA $90&lt;br /&gt;
             $82 $CD $21 $B8 $00 $42 $8B $16 $96 $82 $8B $0E $98 $82 $CD $21&lt;br /&gt;
             $B8 $00 $3F $B9 $54 $15 $BA $1C $3A $CD $21 $B8 $00 $42 $8B $16&lt;br /&gt;
             $9A $82 $8B $0E $9C $82 $CD $21 $B8 $00 $3F $B9 $70 $1C $BA $A8&lt;br /&gt;
             $00 $CD $21 $B8 $00 $3F $B9 $38 $0E $BA $72 $83 $CD $21 $B8 $00&lt;br /&gt;
             $3F $B9 $38 $0E $BA $40 $97 $CD $21 $B8 $00 $42 $8B $16 $9E $82&lt;br /&gt;
%patch $14AF $8B $0E $A0 $82 $CD $21 $B8 $05 $00 $BA $CE $03 $EF $06 $1E $07&lt;br /&gt;
             $1E $33 $C9 $A1 $6A $83 $8E $D8 $B4 $01 $D2 $E4 $B0 $02 $BA $C4&lt;br /&gt;
             $03 $EF $51 $26 $8B $16 $68 $83 $26 $8B $0E $94 $82 $B4 $3F $CD&lt;br /&gt;
             $21 $59 $41 $80 $F9 $04 $7C $E0 $1F $07 $B4 $3E $CD $21 $B0 $02&lt;br /&gt;
             $BA $C4 $03 $EE $58 $42 $EE $58 $4A $EE $5F $5E $C3&lt;br /&gt;
%patch $3B47 $90 $90 $90&lt;br /&gt;
%patch $3FAC $F7 $C6 $02 $00 $74 $18 $83 $3E $42 $82 $00 $7C $11 $E9 $2B $D4&lt;br /&gt;
%patch $3D68 $F7 $C6 $02 $00 $74 $12 $83 $3E $42 $82 $00 $7C $0B $E9 $8A $D6&lt;br /&gt;
%patch $1804C $00A8W $07C4W $0EE0W $15FCW $00A8W $07C4W $0EE0W $15FCW&lt;br /&gt;
%patch $B799 $0E&lt;br /&gt;
%patch $BB67 $500CW &lt;br /&gt;
%patch $1805C $0000W $BC3BW $BC54W $BC6FW $BC95W&lt;br /&gt;
%patch $45E  $3A1CW&lt;br /&gt;
%patch $2822 $3A1CW&lt;br /&gt;
%patch $2841 $3A1CW&lt;br /&gt;
%patch $4368 $3A1CW&lt;br /&gt;
%patch $A719 $80 $BF $4138W $0 $90 $90&lt;br /&gt;
%patch $38C5 $8A $87 $4138W $24 $03 $98 $3C $01&lt;br /&gt;
%patch $473D $80 $BF $44C6W $0 $90 $90 &lt;br /&gt;
%patch $495A $80 $BF $44C6W $0 $90 $90 &lt;br /&gt;
%patch $AA1E $80 $BF $44C6W $0 $90 $90 &lt;br /&gt;
%patch $A806 $80 $BF $4854W $0 $90 $90&lt;br /&gt;
%patch $382F $80 $BF $4BE2W $0 $90 $90&lt;br /&gt;
%patch $47B1 $80 $BF $4BE2W $0 $90 $90&lt;br /&gt;
%patch $49C9 $80 $BF $4BE2W $0 $90 $90&lt;br /&gt;
%patch $A931 $80 $BF $4BE2W $0 $90 $90&lt;br /&gt;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;br /&gt;
#============= END V2 PATCH 320x200 ====================&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[http://files.commanderkeen.org/users/omp/v2-0.0.2.zip V2 Patch with patches included as files]&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 1|}}&lt;br /&gt;
{{PatchCategories|Gameplay|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Category_talk:Bio_Menace_patches&amp;diff=18386</id>
		<title>Category talk:Bio Menace patches</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Category_talk:Bio_Menace_patches&amp;diff=18386"/>
		<updated>2011-03-18T04:06:10Z</updated>

		<summary type="html">&lt;p&gt;Lemm: how much&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Relevance? ==&lt;br /&gt;
The editing notes for this page said that &amp;quot;In the future it might get relocated to the ModdingWiki&amp;quot; but really, do Bio Menace patches have any business being on the KeenWiki?  Why wasn&#039;t this just posted on the ModdingWiki in the first place? -- Flaose&lt;br /&gt;
: See [http://www.keenmodding.org/viewtopic.php?t=900&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=30 discussion on Keen:Modding] (half way down the page) - never really went anywhere but feel free to join in.  The main reason being Bio Menace uses the same engine as Keen so many of the patches will be similar.  I&#039;d prefer the ModdingWiki but since the engine is the same I can see the point of putting them here too. -- [[User:Malvineous|Malvineous]] 23:04, 17 March 2011 (GMT)&lt;br /&gt;
:: Just how much of the commander keen source code was reused for Bio Menace?  The &amp;quot;engine&amp;quot; proper (i.e., C files prefixed with ID_ in wolf3D), would have been reused, but what about the keen physics code / actor structures?  Were those the same or completely new?  Also, was the text screen (end of game menus, etc) parsing code reused for Bio Menace as well (this was not in any ID_ file either). [[User:Lemm|Lemm]] 04:06, 18 March 2011 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Music&amp;diff=17668</id>
		<title>Patch:Music</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Music&amp;diff=17668"/>
		<updated>2010-12-29T17:55:40Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Added extra song info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers music related patches. As such, it relates mostly to Keen Galaxy. At present, about the only patches available are those that will change what song plays in a level.&lt;br /&gt;
&lt;br /&gt;
There is a patch and program created by [[User:Lemm]] to allow IMF files of up to 32 KB in Keen Vorticons.&lt;br /&gt;
&lt;br /&gt;
== Keen Vorticons music ==&lt;br /&gt;
&lt;br /&gt;
The TSR [[TSMusic]] created by [[User:Lemm]] allows a modder to include as many IMF music files as they wish, one per level. To be used TSMusic requires the Keen engine to coomunicate with it, and thus a patch. The patches for Keen 1–3 (v1.31) are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 1&amp;quot;&amp;gt;&lt;br /&gt;
#Play music with TSMusic:&lt;br /&gt;
%patch $BE97 $65&lt;br /&gt;
%patch $BEE2 $65&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 2&amp;quot;&amp;gt;&lt;br /&gt;
#Play music with TSMusic:&lt;br /&gt;
%patch $B5AF $65&lt;br /&gt;
%patch $B5FA $65&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;patch title=&amp;quot;Keen 3&amp;quot;&amp;gt;&lt;br /&gt;
#Play music with TSMusic:&lt;br /&gt;
%patch $C90D $65&lt;br /&gt;
%patch $C958 $65&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Keen Galaxy Level songs ==&lt;br /&gt;
&lt;br /&gt;
These patches change what song is played in a given level. You are limited only to songs in the &amp;lt;tt&amp;gt;AUDIO.CKx&amp;lt;/tt&amp;gt; file. For other music, the values used are not the song number, but the &#039;&#039;level&#039;&#039; number that plays the song you want, with some complications. (It is best to experiment with these later values, to see how things work.)&lt;br /&gt;
&lt;br /&gt;
Additional songs can be added to the game by using a chunk designated for sound to hold an extra songs.  In the executable, the audio chunk pointers are ordered so that the music chunk pointers are immediately after the sound chunk pointers.  Thus, if you shift the boundary between sound and music backwards, you create more space for music chunk pointers at the expense of sound chunk pointers.  This also shifts the existing song numbers correspondingly (e.g. if you shift by two chunks, a song that was originally song 3 becomes song 5, since the first music chunk is now two chunks earlier).  To use the extra songs patch, lower the existing start index of the song chunks by however many new songs you are adding.  Then lower the corresponding start of audio segment pointer by 2x however many songs you imported.  For example, in keen 5, if you were to add two songs, %patch $8C61 $00C0W would be lowered to $00BE, and %patch $8BF1 $BF45W would be lowered to $BF41W (along with the two subeequent patches).&lt;br /&gt;
&lt;br /&gt;
Keen 4:&lt;br /&gt;
&amp;lt;patch&amp;gt;&lt;br /&gt;
#Where music list is read from:&lt;br /&gt;
%patch $8CCD $96 $03 #$2F206&lt;br /&gt;
&lt;br /&gt;
#Song values:&lt;br /&gt;
#0: Shadowlands       1: Eat your Veggies&lt;br /&gt;
#2: Too hot           3: Slug village&lt;br /&gt;
#4: Kick in the pants 5: Ancients&lt;br /&gt;
&lt;br /&gt;
#This is the music played in each level:&lt;br /&gt;
#             VALUE   LEVEL                 MUSIC PLAYED         LEVEL No&lt;br /&gt;
%patch $2F206 $00 $00 #Map                  (Shadowlands)          0&lt;br /&gt;
              $04 $00 #Border Village       (Kick in the Pants)    1&lt;br /&gt;
              $03 $00 #Slug Village         (Slug Village)         2&lt;br /&gt;
              $03 $00 #Perilous Pit         (Slug Village)         3&lt;br /&gt;
              $02 $00 #Cave of Descendants  (Too Hot)              4&lt;br /&gt;
              $02 $00 #Chasm of Chills      (Too Hot)              5&lt;br /&gt;
              $04 $00 #Crystalus            (Kick in the Pants)    6&lt;br /&gt;
              $03 $00 #Hiliville            (Slug Village)         7&lt;br /&gt;
              $01 $00 #Sand Yego            (Eat your Veggies)     8&lt;br /&gt;
              $01 $00 #Miragia              (Eat your Veggies)     9&lt;br /&gt;
              $01 $00 #Lifwater Oasis       (Eat your Veggies)    10&lt;br /&gt;
              $02 $00 #Pyramid of Moons     (Too Hot)             11&lt;br /&gt;
              $02 $00 #Pyramid of Shadows   (Too Hot)             12&lt;br /&gt;
              $02 $00 #Pyramid of Ancients  (Too Hot)             13&lt;br /&gt;
              $02 $00 #Pyramid of Forbidden (Too Hot)             14&lt;br /&gt;
              $02 $00 #Isle of Tar          (Too Hot)             15&lt;br /&gt;
              $02 $00 #Isle of Fire         (Too Hot)             16&lt;br /&gt;
              $01 $00 #Well of Wishes       (Eat your Veggies)    17&lt;br /&gt;
              $03 $00 #Bwb Megarocket       (Slug Village)        18&lt;br /&gt;
              $FF $FF #High scores          (No music, &amp;quot;Fanfare&amp;quot;) 19&lt;br /&gt;
&lt;br /&gt;
#Other music played: (Values here is number of LEVEL who&#039;s music is used)&lt;br /&gt;
%patch $5836 $0C $00 #Story demo (Too hot)&lt;br /&gt;
%patch $9CD7 $07 $00 #Ending Sequence (Slug Village)&lt;br /&gt;
%patch $F107 $FF $FF #Talking to Lindsey (Ancient)&lt;br /&gt;
%patch $F4CA $FF $FF #Talking to Ancient (Ancient)&lt;br /&gt;
&lt;br /&gt;
#Add new music&lt;br /&gt;
#Index of first music chunk within audio chunks:&lt;br /&gt;
%patch $8CEF $009CW&lt;br /&gt;
&lt;br /&gt;
#Start address of music chunks&lt;br /&gt;
#reduce start address by 2x that of &amp;quot;First Audio Entry&amp;quot;&lt;br /&gt;
%patch $8C75 $C895W # clear_music()&lt;br /&gt;
%patch $8C83 $C895W # clear_music()&lt;br /&gt;
%patch $8D83 $C895W # StartMusic()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keen 5:&lt;br /&gt;
&amp;lt;patch&amp;gt;&lt;br /&gt;
#Song values:&lt;br /&gt;
#00 = Came In           01 = Armageddon Machine&lt;br /&gt;
#02 = High Scores       03 = Snooping&lt;br /&gt;
#04 = Bagpipes          05 = Wednesday on the Beach&lt;br /&gt;
#06 = Unknown           07 = Security Center&lt;br /&gt;
#08 = Help              09 = Be Sphereful With My Diamonds&lt;br /&gt;
#0A = Make it Tighter   0B = Omegamatic&lt;br /&gt;
#0C = Fanfare           0D = Quantum Explosion Dynamo&lt;br /&gt;
&lt;br /&gt;
#This is the music played in each level:&lt;br /&gt;
#             VALUE   LEVEL                      MUSIC PLAYED            LEVEL No&lt;br /&gt;
%patch $3067A $0B $00 #Map                       (Omegamatic)              0&lt;br /&gt;
              $05 $00 #Ion Ventilation System    (Wednesday on the Beach)  1&lt;br /&gt;
              $07 $00 #Security Center           (Security Center)         2&lt;br /&gt;
              $09 $00 #Defense Tunnel Vlook      (Be Sphereful)            3&lt;br /&gt;
              $0A $00 #Energy Flow Systems       (Make it Tighter)         4&lt;br /&gt;
              $09 $00 #Defense Tunnel Burrh      (Be Sphereful)            5&lt;br /&gt;
              $0A $00 #Regulation Control Center (Make it Tighter)         6&lt;br /&gt;
              $09 $00 #Defense Tunnel Sorra      (Be Sphereful)            7&lt;br /&gt;
              $0A $00 #Neutrino Burst Injector   (Make it Tighter)         8&lt;br /&gt;
              $09 $00 #Defense Tunnel Teln       (Be Sphereful)            9&lt;br /&gt;
              $0A $00 #Brownian Motion Inducer   (Make it Tighter)         10&lt;br /&gt;
              $03 $00 #Gravitational Damping Hub (Snooping)                11&lt;br /&gt;
              $0D $00 #Quantum Explosion Dynamo  (QED)                     12&lt;br /&gt;
              $04 $00 #Korath III Base           (Bagpipes)                13&lt;br /&gt;
              $0C $00 #Ending                    (Fanfare)&lt;br /&gt;
              $02 $00 #High Scores               (High Scores)             15&lt;br /&gt;
%patch $3069C $01 $00 #Scrolling Story           (Armageddon Machine)&lt;br /&gt;
              $00 $00 #Game Over                 (Came In)&lt;br /&gt;
              $08 $00 #Help                      (Help)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Add new music&lt;br /&gt;
#Index of first music chunk within audio chunks:&lt;br /&gt;
%patch $8C61 $00C0W&lt;br /&gt;
&lt;br /&gt;
#Start address of music chunks&lt;br /&gt;
#reduce start address by 2x that of &amp;quot;First Audio Entry&amp;quot;&lt;br /&gt;
%patch $8BF1 $BF45W # clear_music()&lt;br /&gt;
%patch $8BFF $BF45W # clear_music()&lt;br /&gt;
%patch $8CF5 $BF45W # StartMusic()  &lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keen 6:&lt;br /&gt;
&amp;lt;patch&amp;gt;&lt;br /&gt;
#Song values:&lt;br /&gt;
#00 = A World of Wonderment  01 = Brer Tar&lt;br /&gt;
#02 = To the Future          03 = Faster&lt;br /&gt;
#04 = Space Funk             05 = Aliens Ate My Babysitter&lt;br /&gt;
#06 = Ominous                07 = Metal&lt;br /&gt;
#08 = Mamba Snake&lt;br /&gt;
&lt;br /&gt;
#This is the music played in each level:&lt;br /&gt;
#             VALUE   LEVEL                           MUSIC PLAYED              LEVEL No&lt;br /&gt;
%patch $3103E $05 $00 #Map                            (Aliens Ate My Babysitter)  0&lt;br /&gt;
              $03 $00 #Bloogwaters Crossing           (Faster)                    1&lt;br /&gt;
              $01 $00 #Guard Post One                 (Brer Tar)                  2&lt;br /&gt;
              $08 $00 #First Dome of Darkness         (Mamba Snake)               3&lt;br /&gt;
              $08 $00 #Second Dome of Darkness        (Mamba Snake)               4&lt;br /&gt;
              $08 $00 #Bloogdome                      (Mamba Snake)               5&lt;br /&gt;
              $07 $00 #Bloogton Manufacturing         (Metal)                     6&lt;br /&gt;
              $02 $00 #Bloogton Tower                 (To the Future)             7&lt;br /&gt;
              $07 $00 #Bloogfoods, Inc.               (Metal)                     8&lt;br /&gt;
              $01 $00 #Guard Post 2                   (Brer Tar)                  9&lt;br /&gt;
              $03 $00 #Bloogville                     (Faster)                    10&lt;br /&gt;
              $02 $00 #BASA                           (To the Future)             11&lt;br /&gt;
              $01 $00 #Guard Post 3                   (Brer Tar)                  12&lt;br /&gt;
              $04 $00 #Bloogbase Recreational District(Space Funk)                13&lt;br /&gt;
              $04 $00 #Bloogbase Management District  (Space Funk)                14&lt;br /&gt;
              $06 $00 #Bloog Control Center           (Ominous)                   15&lt;br /&gt;
              $02 $00 #Blooglab Space Station         (To the Future)             16&lt;br /&gt;
              $00 $00 #Bean-with-Bacon Megarocket     (A World of Wonderment)     17&lt;br /&gt;
              $00 $00 #High Scores                    (A World of Wonderment)     18&lt;br /&gt;
&lt;br /&gt;
#Other music played:&lt;br /&gt;
%patch $563F $0D $00 #Star wars text (Space funk)&lt;br /&gt;
%patch $E33C $01 $00 #Molly ending (Faster)&lt;br /&gt;
&lt;br /&gt;
#Index of first music chunk within audio chunks:&lt;br /&gt;
%patch $8AC0 $00B4W&lt;br /&gt;
&lt;br /&gt;
#Add new music&lt;br /&gt;
#Start address of music chunks&lt;br /&gt;
#reduce start address by 2x that of &amp;quot;First Audio Entry&amp;quot;&lt;br /&gt;
%patch $8A59 $CA53W # clear_music()&lt;br /&gt;
%patch $8A67 $CA53W # clear_music()&lt;br /&gt;
%patch $8B5D $CA53W # StartMusic() &lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
Keen 4:&lt;br /&gt;
&amp;lt;patch&amp;gt;&lt;br /&gt;
#Insuff mem message:&lt;br /&gt;
%patch $8D30  $EC $06 #Read from&lt;br /&gt;
%patch $2F55C &amp;quot;Insufficient memory&amp;quot; $0A&lt;br /&gt;
              &amp;quot;for background music!&amp;quot; $00&lt;br /&gt;
&amp;lt;/patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Vorticon_Mods&amp;diff=16007</id>
		<title>Vorticon Mods</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Vorticon_Mods&amp;diff=16007"/>
		<updated>2010-09-01T01:25:41Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Added Keen1 640x480 redux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an alphabetical list of all Keen: Vorticons mods, one-level mods and level packs ever made for Keen. It also includes some in-progress mods.&lt;br /&gt;
&lt;br /&gt;
*Dates format: year-month-day (the release date can be determined by looking at the latest date on the game files)&lt;br /&gt;
&lt;br /&gt;
*Please click on the triangles to sort by different categories. i.e. if you click first on &amp;quot;Modder(s)&amp;quot; then on &amp;quot;Mod of&amp;quot;, you will get a list that is sorted by which game was modded, and further sorted by modder name. Refresh the page to reset all sort settings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;ATTENTION:&#039;&#039;&#039; The downloads for Keen 2 and 3 mods will not include the Keen2 or Keen3 executable (It&#039;s still not free to distribute), you will need to put your own executable in the mod directory and unpack it with [http://www.shikadi.net/wiki/files/Mods/UNLZEXE.zip Unlzexe]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Title&lt;br /&gt;
! Download(s)&lt;br /&gt;
! Release date&lt;br /&gt;
! Modder(s)&lt;br /&gt;
! Mod of&lt;br /&gt;
! # of levels&lt;br /&gt;
! Protagonist&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[A Christmas Mod]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/christmas1.zip full]&lt;br /&gt;
|2007-12-22&lt;br /&gt;
|[[User:Levellass|Levellass]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Tzen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A Christmas Mod Mk II: [[Merry Keenmas]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/christmas2.rar full]&lt;br /&gt;
|2006-01-06&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|graphical remake of Keen 2&lt;br /&gt;
|-&lt;br /&gt;
|[[A New Dope]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/NewDope.zip full]&lt;br /&gt;
|2007-03-14&lt;br /&gt;
|[[User:KeenRush|KeenRush]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[A Sham on Inishmort]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Inishmort.zip full]&lt;br /&gt;
|2005-08-17&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|10&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[A Very Keen Christmas]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KeenChristmas.zip full]&lt;br /&gt;
|2005-02-08&lt;br /&gt;
|[[User:Allstories|Allstories]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|graphical remake of Keen 1&lt;br /&gt;
|-&lt;br /&gt;
|[[Aliens vs. Keen]]&lt;br /&gt;
|[http://levellord.toxicsheep.com/AliensvsKeen.zip full]&amp;lt;br/&amp;gt;[http://www.tl-dr.org/downloads/keen/mods/AvKDemo2.rar demo 2]&amp;lt;br/&amp;gt;[http://dosclassics.com/download/341 demo 1]&lt;br /&gt;
|2006-06-07&amp;lt;br/&amp;gt;2005-12-18&amp;lt;br/&amp;gt;2005&lt;br /&gt;
|DivoKeen&amp;lt;br/&amp;gt;[[Levellord]]&amp;lt;br/&amp;gt;et al.&lt;br /&gt;
|Keen 1&lt;br /&gt;
|12&lt;br /&gt;
|Keen&lt;br /&gt;
|first 2 demos by DivoKeen, finished by Levellord&lt;br /&gt;
|-&lt;br /&gt;
|[[Ally&#039;s Mod]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Ally1.zip full]&lt;br /&gt;
|2009-07-24&lt;br /&gt;
|[[User:Fleexy|Fleexy]]&amp;lt;br/&amp;gt;Ally&lt;br /&gt;
|Keen 1&lt;br /&gt;
|4&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Ally&#039;s Mod II]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/Ally2.zip full]&lt;br /&gt;
|2009-08-01&lt;br /&gt;
|[[User:Fleexy|Fleexy]]&amp;lt;br/&amp;gt;Ally&lt;br /&gt;
|Keen 2&lt;br /&gt;
|2&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Ally&#039;s Mod III]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Ally3.zip full]&lt;br /&gt;
|2009-08-12&lt;br /&gt;
|[[User:Fleexy|Fleexy]]&amp;lt;br/&amp;gt;Ally&lt;br /&gt;
|Keen 3&lt;br /&gt;
|3&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Armageddon 2: Pluto Burns]]&lt;br /&gt;
|[http://levellord.toxicsheep.com/A-II-PB.zip demo]&lt;br /&gt;
|2005-08-29&lt;br /&gt;
|[[User:Najawa|Najawa]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|8&lt;br /&gt;
|Keen&lt;br /&gt;
|abandoned&lt;br /&gt;
|-&lt;br /&gt;
|[[Bad Dreams]]&lt;br /&gt;
|[http://dosclassics.com/download/128 full]&lt;br /&gt;
|2004&amp;lt;br/&amp;gt;&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|14&lt;br /&gt;
|Keen&lt;br /&gt;
|There is also a &amp;quot;[http://www.tl-dr.org/downloads/keen/mods/Bad%20Dreams%204%20Spleen.zip Spleen&#039;s Birthday Edition]&amp;quot; of this&lt;br /&gt;
|-&lt;br /&gt;
|[[Bazooka Wowbagger]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Wowbagger.zip full]&lt;br /&gt;
|2003-05-18&lt;br /&gt;
|Paperface&lt;br /&gt;
|Keen 1&lt;br /&gt;
|12&lt;br /&gt;
|Bazooka Wowbagger&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Benvolio&#039;s Puzzle Level]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/PuzzleLevel.zip full]&lt;br /&gt;
|2005-09-01&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Adventures of Bunny Basher|Bunny Basher 1]]&lt;br /&gt;
|[http://dosclassics.com/download/313 full]&lt;br /&gt;
|2004-11-21&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Bunny Basher&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Bunny Basher 2]]&lt;br /&gt;
|[http://www.maguidhir.com/benvolio/ full]&lt;br /&gt;
|2006-01-22&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Bunny Basher&lt;br /&gt;
|in Irish language&lt;br /&gt;
|-&lt;br /&gt;
|[[CGA Keen Episode 1]]&lt;br /&gt;
|[http://www.dosclassics.com/download/324 demo]&lt;br /&gt;
|2005-01-29&lt;br /&gt;
|Quirky Moron&lt;br /&gt;
|Keen 1&lt;br /&gt;
|2&lt;br /&gt;
|Keen&lt;br /&gt;
|abandoned&lt;br /&gt;
|-&lt;br /&gt;
|[[Christmas Special 2004]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Christmas2004.zip full]&lt;br /&gt;
|2005-01-02&lt;br /&gt;
|[[Levellord]]&amp;lt;br/&amp;gt;[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Comrade Keen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/ComradeKeen.zip demo]&lt;br /&gt;
|2005-07-07&lt;br /&gt;
|[[User:StupidBunny|Stupid Bunny]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|8&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The_Clones_of_Evil_1|Clones of Evil 1: The Galaxy of M]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Clones1.zip full]&lt;br /&gt;
|2005-07-19&lt;br /&gt;
|[[User:Genius314|Genius314]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The_Clones_of_Evil_2|Clones of Evil 2: Mort Times a Million]]&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|[[User:Genius314|Genius314]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|n/a&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Clouds Unseen|Clouds Unseen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/CloudsUnseen.zip normal]&amp;lt;br&amp;gt;[http://www.shikadi.net/wiki/files/Mods/Keen1/CloudsUnseenGreen.zip verdant]&lt;br /&gt;
|2010-05-20&lt;br /&gt;
|Stupid Bunny&lt;br /&gt;
|Keen 1&lt;br /&gt;
|11&lt;br /&gt;
|Character&lt;br /&gt;
|First mod in B/W; Easy and normal version available&lt;br /&gt;
|-&lt;br /&gt;
|[[Dangerous Dave in Copyright Infringement]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Infringement.zip full]&lt;br /&gt;
|2003-08&lt;br /&gt;
|[[User:Flaose|Flaose]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Dangerous Dave&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Dangerous Keen in The Haunted Mansion]]&lt;br /&gt;
|[http://dosclassics.com/download/107 full]&lt;br /&gt;
|&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Daniel&#039;s Keen Mod]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/Daniel%27s_Keen_MOD.zip beta]&lt;br /&gt;
|2003-10-22&lt;br /&gt;
|Dagneilius&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|abandoned&lt;br /&gt;
|-&lt;br /&gt;
|[[Death to the Vorticons]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/dttv1.zip full]&lt;br /&gt;
|2008-08-26&lt;br /&gt;
|[[User:Shikadi|shikadi]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|half mod, half levelpack&lt;br /&gt;
|-&lt;br /&gt;
|[[Death to the Vorticons 2]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/dttv2.rar full]&lt;br /&gt;
|2009-02-07&lt;br /&gt;
|[[User:Shikadi|shikadi]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Death to the Vorticons 3]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Dttv3.zip full]&lt;br /&gt;
|2009-03-27&lt;br /&gt;
|[[User:Shikadi|shikadi]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Kidnapped Keen|Decree of the Skree 1: Kidnapped Keen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KidnappedKeen.zip full]&lt;br /&gt;
|2004-08-25&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen &amp;amp; Norp&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Zapping the Zot|Decree of the Skree 2: Zapping the Zot]] &lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/Skree2.zip full]&lt;br /&gt;
|2004-11-26&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Return of the Guardians|Decree of the Skree 3: Return of the Guardians]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Skree3.zip full]&lt;br /&gt;
|2005-03-08&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Four Golden Crystals]]&lt;br /&gt;
|[http://dosclassics.com/download/4 full]&lt;br /&gt;
|2003-01&lt;br /&gt;
|Unfleexable&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Generic Mod I]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/Generic1.zip full]&lt;br /&gt;
|2005-03-14&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Generic Mod II]] (Jetboy)&lt;br /&gt;
|[http://www.keeniverse.net/m.php?id=54 full]&lt;br /&gt;
|2005-03-15&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|1&lt;br /&gt;
|Jetboy&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Generic Mod III]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/Generic3.zip full]&lt;br /&gt;
|2005-03-28&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|1&lt;br /&gt;
|Xky Rauh&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Grand Intellect: Doomship Dilemma]]&lt;br /&gt;
|[http://levellord.toxicsheep.com/MORT.zip full]&amp;lt;br/&amp;gt;[http://dosclassics.com/download/117 beta 2]&amp;lt;br/&amp;gt;[http://dosclassics.com/download/116 beta 1]&lt;br /&gt;
|2009-07-15&lt;br /&gt;
|Dr. Villain&amp;lt;br/&amp;gt;[[User:Levellass|Levellass]]&amp;lt;br/&amp;gt;et al.&lt;br /&gt;
|Keen 1&lt;br /&gt;
|13&lt;br /&gt;
|Mortimer McMire&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Halloween Horrors]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/Halloween.zip full]&lt;br /&gt;
|2006-11-26&lt;br /&gt;
|[[Levellord]]&amp;lt;br/&amp;gt;[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|14&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Harvey&#039;s Mod]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Harvey1.zip full]&lt;br /&gt;
|2005-09-04&lt;br /&gt;
|Harvey&amp;lt;br/&amp;gt;[[Levellord]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Harvey&#039;s Mod 2]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Harvey2.zip full]&lt;br /&gt;
|2007-12-03&lt;br /&gt;
|Harvey&amp;lt;br/&amp;gt;[[Levellord]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|13&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Hiding from the Sky]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KeenK.zip full]&lt;br /&gt;
|2005-01-23&lt;br /&gt;
|Karz&lt;br /&gt;
|Keen 1&lt;br /&gt;
|17&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[How the Vorticon Stole Christmas]] (Gorti Vrinch)&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/gortivrinch-se.zip full (special edition)]&lt;br /&gt;
|2008-12-20&lt;br /&gt;
|[[User:Stealthy71088|Stealthy71088]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|4&lt;br /&gt;
|Gorti Vrinch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Ian Burton Adventure]]&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|[[User:Zero X. Diamond|Zero X. Diamond]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Ian Burton&lt;br /&gt;
|abandoned&lt;br /&gt;
|-&lt;br /&gt;
|[[Crash on Gobo III|Invasion of the Yorps 1: Crash on Gobo III]]&lt;br /&gt;
|[http://dosclassics.com/download/5 full]&lt;br /&gt;
|2002-09-24&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|10&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Crash on Gobo III#Remastered Version|Invasion of the Yorps 1: Crash on Gobo III Remastered]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Gobo3se.zip full]&lt;br /&gt;
|2003-03-15&lt;br /&gt;
|Unfleexable&lt;br /&gt;
|Keen 1&lt;br /&gt;
|10&lt;br /&gt;
|Keen&lt;br /&gt;
|slightly modified version of [[Crash on Gobo III]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Planet Destruction|Invasion of the Yorps 2: Planet Destruction]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/PD.zip full]&lt;br /&gt;
|2003-01&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Tribulation of the Yorps|Invasion of the Yorps 3: Tribulation of the Yorps]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Tribulation.zip full]&lt;br /&gt;
|2009-08-30&lt;br /&gt;
|[[User:Tulip|Tulip]]&amp;lt;br/&amp;gt;et al.&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Jetboy Remake]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/Jetboy.zip full]&lt;br /&gt;
|2005-02-13&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Jetboy&lt;br /&gt;
|original keen 2 levels, changed physics for player&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen -6]]&lt;br /&gt;
|[http://home.mchsi.com/~bootsisbig/keen-6.zip full]&lt;br /&gt;
|2009-08-08&lt;br /&gt;
|[[User:Fleexy|Fleexy]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen 0]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Keen0.zip full]&amp;lt;br/&amp;gt;[http://www.shikadi.net/wiki/files/Mods/Keen1/Keen0Fools.zip weird edition]&lt;br /&gt;
|2004-02-26&lt;br /&gt;
|[[User:EricMushroomWilson|ElecDude33]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen 1 640x480 Redux]]&lt;br /&gt;
|[http://files.commanderkeen.org/users/omp/keen12h.zip full]&lt;br /&gt;
|2010-08-17&lt;br /&gt;
|[[User:Lemm]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|Graphics unchanged; Game runs at 640x480 in Dosbox emulating Paradise PVGA1A SVGA&lt;br /&gt;
|-&lt;br /&gt;
|[[Keenbot]]&lt;br /&gt;
|[http://dosclassics.com/download/120 beta]&lt;br /&gt;
|&lt;br /&gt;
|Victor4k&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keenbot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[XkyKeen3|Keen Dash]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/KeenDash.zip full]&lt;br /&gt;
|2004-10-22&lt;br /&gt;
|[[User:Xky Rauh|Xky Rauh]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen in Mineepleo]]&lt;br /&gt;
|[http://www.mediafire.com/?tnuuwaoscmv demo]&lt;br /&gt;
|2009-03-14&lt;br /&gt;
|Harvey&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[XkyKeen2|Keen Null]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/KeenNull.zip full]&lt;br /&gt;
|2004-03-11&lt;br /&gt;
|[[User:Xky Rauh|Xky Rauh]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen S]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KeenS.zip full]&lt;br /&gt;
|2010-03-13&lt;br /&gt;
|[[User:Shikadi|Shikadi]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen Smile]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/Smile.zip full]&lt;br /&gt;
|2005-01-07&lt;br /&gt;
|[[User:KeenRush|KeenRush]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen Universe: Aliens Ate my Homework]]&lt;br /&gt;
|[http://www.freewebs.com/yahooseliteleague/Universe1.zip full]&lt;br /&gt;
|&lt;br /&gt;
|[[User:Stealthy71088|Stealthy71088]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[KeenWarp Part One]]&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|[[User:Freeyorp101|Freeyorp101]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|abandoned&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen Q]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/KeenQ.zip full]&lt;br /&gt;
|2007-11-09&lt;br /&gt;
|Joriz::&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[XkyKeen1|Keen X]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KeenX.zip full]&lt;br /&gt;
|2002-06-30&lt;br /&gt;
|[[User:Xky Rauh|Xky Rauh]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|18&lt;br /&gt;
|Keen&lt;br /&gt;
|2nd-ever Keen mod&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen Y]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KeenY.zip full]&amp;lt;br/&amp;gt;[http://www.tl-dr.org/downloads/keen/mods/keenybeta.zip beta]&lt;br /&gt;
|2003-06-19&lt;br /&gt;
|Grelphy&lt;br /&gt;
|Keen 1&lt;br /&gt;
|21&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen Z]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/KeenZ.zip full]&lt;br /&gt;
|2009-01-30&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&amp;lt;br/&amp;gt;[[User:KeenRush|KeenRush]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Last Moon]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Lastmoon.zip full]&lt;br /&gt;
|2004-07-25&lt;br /&gt;
|[[User:Allstories|Allstories]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|12&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Lego Keen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Legokeen.zip full]&lt;br /&gt;
|2003-12-12&lt;br /&gt;
|Ilsoap&lt;br /&gt;
|Keen 1&lt;br /&gt;
|17&lt;br /&gt;
|Lego Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Lord of the Rings: The Shard of Narsil]]&lt;br /&gt;
|n/a&lt;br /&gt;
|2005-11-24&lt;br /&gt;
|[[User:Najawa|Najawa]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Marooned on Mars Part II]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/keen-1a.zip full]&lt;br /&gt;
|2003-09-02&lt;br /&gt;
|Matze&lt;br /&gt;
|Keen 1&lt;br /&gt;
|17&lt;br /&gt;
|Keen&lt;br /&gt;
|Matze considers it a levelpack with modified graphics&lt;br /&gt;
|-&lt;br /&gt;
|[[OrbKeen1|Monky Business: An Essence of Mayhem]]&lt;br /&gt;
|[http://dosclassics.com/download/121 beta]&lt;br /&gt;
|2004-08&lt;br /&gt;
|[[User:Commander Spleen|Commander Spleen]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Musical Keen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/MusicalKeen.zip full]&lt;br /&gt;
|2005-07-26&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|17&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Norp the Yorp 1|Norp the Yorp 1: Inside Mortimer&#039;s Computer]]&lt;br /&gt;
|[http://dosclassics.com/download/7 full]&lt;br /&gt;
|2002-08-31&lt;br /&gt;
|[[Xtraverse]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Norp&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Norp the Yorp 2|Norp the Yorp 2: Diffusion]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/n2.zip full]&lt;br /&gt;
|2002&lt;br /&gt;
|[[Xtraverse]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Norp&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Norp the Yorp 3|Norp the Yorp 3: Brain Damage]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/norp3.zip full]&lt;br /&gt;
|&lt;br /&gt;
|[[Xtraverse]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Norp&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Norp the Yorp 3.5|Norp the Yorp 3.5: The Maze of Doom]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/norpmaze.zip full]&lt;br /&gt;
|2005-03-23&lt;br /&gt;
|[[Xtraverse]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Norp&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Onward: Silcar 1: Nightmare Before Teatime]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Silcar1.zip full]&lt;br /&gt;
|2008-06-22&lt;br /&gt;
|[[User:Tulip|Tulip]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Onward: Silcar 2: Flee from Fleet]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/Silcar2.zip full]&lt;br /&gt;
|2008-08-03&lt;br /&gt;
|[[User:Tulip|Tulip]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Onward: Silcar 3: The Evil that Meets the Eye]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Silcar3.zip full]&lt;br /&gt;
|2008-09-15&lt;br /&gt;
|[[User:Tulip|Tulip]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Onward: Silcar 4: The Civilization Inside]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Silcar4.zip full]&lt;br /&gt;
|2009-03-14&lt;br /&gt;
|[[User:Tulip|Tulip]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Adventures of The Oracle Janitor|Oracle Janitor 1]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Oj1.zip full]&lt;br /&gt;
|2005-01-27&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Oracle Janitor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Oracle Janitor 2|Oracle Janitor 2: Mystery of the Monastery]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen2/Oj2.zip full]&lt;br /&gt;
|2005-03-13&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|1&lt;br /&gt;
|Oracle Janitor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Oracle Janitor 3|Oracle Janitor 3: Space Pirate Trouble]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Oj3.zip full]&lt;br /&gt;
|2005-08-03&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|1&lt;br /&gt;
|Oracle Janitor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Patchwork Mod I]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Patchwork1.zip full]&lt;br /&gt;
|2004-06-14&lt;br /&gt;
|Keen community&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Patchwork Mod II]]&lt;br /&gt;
|[http://www.keeniverse.net/m.php?id=57 full]&lt;br /&gt;
|2005-06-29&lt;br /&gt;
|Keen community&lt;br /&gt;
|Keen 2&lt;br /&gt;
|22&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Patchwork Mod III]]&lt;br /&gt;
|[http://levellord.toxicsheep.com/PM3.zip full]&lt;br /&gt;
|2008-10-29&lt;br /&gt;
|Keen community&lt;br /&gt;
|Keen 3&lt;br /&gt;
|17&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Perilous Pursuit]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Pursuit.zip full]&lt;br /&gt;
|2005-01-24&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&amp;lt;br/&amp;gt;[[User:Commander Spleen|Commander Spleen]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Retrosis]]&lt;br /&gt;
|[http://www.jimage.org/keen/Retrosis00.zip Demo]&lt;br /&gt;
|2010-03-14&lt;br /&gt;
|[[User:Commander Spleen|Commander Spleen]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|9&lt;br /&gt;
|Pogo with an Eye&lt;br /&gt;
|Work in progress&lt;br /&gt;
|-&lt;br /&gt;
|[[Return of the Shikadi: Lost in the Shadows]]&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|[[User:Shadow Master|Shadow Master]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Return of the Shikadi: The Destructor]]&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|[[User:Shadow Master|Shadow Master]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Vanished To Venus|Revenge of the Shikadi 1: Vanished to Venus]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Venus.zip full]&lt;br /&gt;
|2004-08-30&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|17&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Stopping the Skypest|Revenge of the Shikadi 2: Stopping the Skypest]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/benvolio_skypest.zip full]&lt;br /&gt;
|2004-08-30&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|17&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Exiting Epsilon|Revenge of the Shikadi 3: Exiting Epsilon]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/benvolio_epsilon.zip full]&lt;br /&gt;
|2004-08-30&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|23&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Ripped Mod]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Ripped.zip full]&lt;br /&gt;
|2005-03-26&lt;br /&gt;
|[[Levellord]]&amp;lt;br/&amp;gt;et al.&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Xky Rauh&lt;br /&gt;
|slightly edited Keen 1 levels&lt;br /&gt;
|-&lt;br /&gt;
|[[Robot Rebellion]]&lt;br /&gt;
|[http://dosclassics.com/download/108 full]&lt;br /&gt;
|2004-03-13&lt;br /&gt;
|[[User:Multimania|Multimania]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Rorie&#039;s Birthday Mod]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Rorie.zip full]&lt;br /&gt;
|2004-10-20&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|George W. Bush&lt;br /&gt;
|slightly edited Keen 1 levels&lt;br /&gt;
|-&lt;br /&gt;
|[[The Search for the Sentinel]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Sentinel.zip full]&lt;br /&gt;
|2004-08-08&lt;br /&gt;
|Kohntarkosz&lt;br /&gt;
|Keen 1&lt;br /&gt;
|12&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ShadowKeen1|Shadow Keen 1]]&lt;br /&gt;
|[http://www.keeniverse.net/m.php?id=16 full v2]&amp;lt;br/&amp;gt;[http://www.dosclassics.com/download/106 full v1]&lt;br /&gt;
|2004-02-06&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|32&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ShadowKeen2|Shadow Keen 2]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/Shadow%20Keen%202.zip full]&lt;br /&gt;
|2004-07-17&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 2&lt;br /&gt;
|39&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[ShadowKeen3|Shadow Keen 3]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/Shadowkeen3.zip full]&lt;br /&gt;
|2004-10-07&lt;br /&gt;
|[[Levellord]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Story Land]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Storyland.zip full]&lt;br /&gt;
|2005-09-03&lt;br /&gt;
|[[User:Ceilick|Ceilick]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Commander Keen +: Printed to Pluto]]&lt;br /&gt;
|In progress&lt;br /&gt;
|No release data&lt;br /&gt;
|[[User:Szemigi|Szemigi]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Thwarting Mort]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/ThwartingMort.zip full]&lt;br /&gt;
|2005-01-08&lt;br /&gt;
|[[User:Benvolio|Benvolio]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|9&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Tower Trouble]]&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|[[User:Stealthy71088|Stealthy71088]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Trapped Keen|Trapped Keen (inside his Gameboy)]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen3/TrappedKeen.zip full]&lt;br /&gt;
|2010-08-25&lt;br /&gt;
|[[User:Shikadi|shikadi]]&lt;br /&gt;
|Keen 3&lt;br /&gt;
|&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Vox 1]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/vox1.zip beta]&lt;br /&gt;
|2008-07-15&lt;br /&gt;
|Grelphy&lt;br /&gt;
|Keen 1&lt;br /&gt;
|20&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Vox 2]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/vox2.zip beta]&lt;br /&gt;
|2008-07-15&lt;br /&gt;
|Grelphy&lt;br /&gt;
|Keen 3&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Vox 3]]&lt;br /&gt;
|[http://www.tl-dr.org/downloads/keen/mods/vox3.zip beta]&lt;br /&gt;
|2008-07-15&lt;br /&gt;
|Grelphy&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Xky&#039;s One Level Mod]]&lt;br /&gt;
|[http://www.keeniverse.net/m.php?id=48 full]&lt;br /&gt;
|2005-03-13&lt;br /&gt;
|[[User:Xky Rauh|Xky Rauh]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|Keen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Yorphius II]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Mods/Keen1/Yorphius.zip full]&amp;lt;br/&amp;gt;[http://www.tl-dr.org/downloads/keen/mods/beta.zip beta]&lt;br /&gt;
|2002-06-25&lt;br /&gt;
|[[User:KeenRush|KeenRush]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|Keen&lt;br /&gt;
|the first-ever mod&lt;br /&gt;
|-&lt;br /&gt;
|[[Zelda II]]&lt;br /&gt;
|[http://dosclassics.com/download/111 full]&lt;br /&gt;
|2004-01-22&lt;br /&gt;
|CheesyDave&lt;br /&gt;
|Keen 1&lt;br /&gt;
|&lt;br /&gt;
|Link&lt;br /&gt;
|remake of the classic NES Zelda game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Level Packs ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Title&lt;br /&gt;
! Download(s)&lt;br /&gt;
! Release date&lt;br /&gt;
! Builder(s)&lt;br /&gt;
! Pack of&lt;br /&gt;
! # of levels&lt;br /&gt;
! Notes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[Airefresco&#039;s Keen 1 Levelpack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/Airefresco1.zip full]&lt;br /&gt;
|1999-06-18&lt;br /&gt;
|Airefresco&lt;br /&gt;
|Keen 1&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[A.R.&#039;s Keen 1 Levelpack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/ARpack.zip full]&lt;br /&gt;
|1999-03-07&lt;br /&gt;
|A.R.&lt;br /&gt;
|Keen 1&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[XkyKeen1#Level pack|Community Keen X Levelpack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/ModPacks/Xpackr2.zip release 2]&lt;br /&gt;
|2010-03-14&lt;br /&gt;
|Keen Community&lt;br /&gt;
|Keen X&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Community Smile Levelpack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/ModPacks/PCKFSmilePack.zip full]&lt;br /&gt;
|2009-08-30&lt;br /&gt;
|Keen Community&lt;br /&gt;
|Episode Smile&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Dark Side of Mars]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/DarkSideofMars.zip full]&lt;br /&gt;
|1999-11-22&lt;br /&gt;
|MRC Marky&lt;br /&gt;
|Keen 1&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Dungeon of Mystery]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/DungeonofMystery.zip full]&lt;br /&gt;
|2003-12-15&lt;br /&gt;
|Perry Scanlon&lt;br /&gt;
|Keen 1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Extreme Keen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/ExtremeKeen.zip full]&lt;br /&gt;
|2003-03-01&lt;br /&gt;
|Perry Scanlon&lt;br /&gt;
|Keen 1&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[I Am Frozen]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/IAmFrozen.zip full]&lt;br /&gt;
|2002-05-08&lt;br /&gt;
|Valerio&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[The Ice Factory]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/Icefactory.zip full]&lt;br /&gt;
|1998-01-14&lt;br /&gt;
|[[User:Xky Rauh|Xky Rauh]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Ice Level]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/Icelevel.zip full]&lt;br /&gt;
|1999-04-18&lt;br /&gt;
|Neil McRae&lt;br /&gt;
|Keen 1&lt;br /&gt;
|15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Ilsoap&#039;s Keen 1 Levelpack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/Ilsoappack.zip full v3]&lt;br /&gt;
|2002-06-18&lt;br /&gt;
|Ilsoap&lt;br /&gt;
|Keen 1&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen 1 BwB Level]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/FlaoseBWBLevel.zip full]&lt;br /&gt;
|1999-01-20&lt;br /&gt;
|[[User:Flaose|Flaose]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen 1 Level Competition Level Pack (January 2007)|Keen 1 Competition Level Pack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/K1Competition.zip full]&lt;br /&gt;
|2007-01-01&lt;br /&gt;
|Keen Community&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen 2 Competition Level Pack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen2/K2Competition.zip full]&lt;br /&gt;
|2007-03-17&lt;br /&gt;
|Keen Community&lt;br /&gt;
|Keen 2&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Keen Armageddon]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/KeenArmageddon.zip full]&lt;br /&gt;
|1999-04-21&lt;br /&gt;
|Adam&lt;br /&gt;
|Keen 1&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[KMO Default Levels]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/KMOLevels.zip full]&lt;br /&gt;
|1999-02-13&lt;br /&gt;
|Peder Johnson&lt;br /&gt;
|Keen 1&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Martian Building and Skyscraper]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/Grelphy1.zip full]&lt;br /&gt;
|2003-06-04&lt;br /&gt;
|Grelphy&lt;br /&gt;
|Keen 1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Return on Mars]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/ReturnonMars.zip full]&lt;br /&gt;
|1997-01-01&lt;br /&gt;
|Benoit Rouleau&lt;br /&gt;
|Keen 1&lt;br /&gt;
|14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Twin Towers]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/TwinTowers.zip full]&lt;br /&gt;
|2000-06-27&lt;br /&gt;
|AlienKillerXX&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[XkyKeen1#Level pack|Xky1tuned]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/ModPacks/Xky1tuned.zip full]&lt;br /&gt;
|2005-08-08&lt;br /&gt;
|[[User:KeenRush|KeenRush]]&lt;br /&gt;
|Keen X&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Xky&#039;s Mega Level]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/Keen1/XkyMegalevel.zip full]&lt;br /&gt;
|1999-01-24&lt;br /&gt;
|[[User:Xky Rauh|Xky Rauh]]&lt;br /&gt;
|Keen 1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[XkyKeen2#Level Pack|XkyKeen 2 Competition Level Pack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/ModPacks/Xky2Community.zip full]&lt;br /&gt;
|2008-04&lt;br /&gt;
|Keen Community&lt;br /&gt;
|Keen Null&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Yorphius II#Level pack|Yorphius II Level Pack]]&lt;br /&gt;
|[http://www.shikadi.net/wiki/files/Packs/ModPacks/YorphiusIIPack.zip full]&lt;br /&gt;
|2007-03-19&lt;br /&gt;
|[[User:Stealthy71088|Stealthy71088]]&amp;lt;br/&amp;gt;[[User:Xky Rauh|Xky Rauh]]&amp;lt;br/&amp;gt;[[User:Levellass|Levellass]]&lt;br /&gt;
|Yorphius II&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Skin mods ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Title&lt;br /&gt;
! Download(s)&lt;br /&gt;
! Release date&lt;br /&gt;
! Skin&#039;s creator(s)&lt;br /&gt;
! Mod&lt;br /&gt;
! Note(s)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[Cybernetic Dream]]&lt;br /&gt;
|[http://dosclassics.com/download/207/dl full]&lt;br /&gt;
|2004-10-04&lt;br /&gt;
|Cybernetic Dream&lt;br /&gt;
|Keen 3&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*[http://www.keeniverse.net/m.php The Garg&#039;s Mod Maze]&lt;br /&gt;
*Beyond the Pogo: [http://www.dosclassics.com/downloads.php?cat=0&amp;amp;subcat=4 Mods], [http://www.dosclassics.com/downloads.php?cat=0&amp;amp;subcat=5 Levelpacks]&lt;br /&gt;
*the bipship: [http://www.bipship.com/mods Mods], [http://www.bipship.com/levelpacks Levelpacks]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods| ]]&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=User_talk:Lemm&amp;diff=15790</id>
		<title>User talk:Lemm</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=User_talk:Lemm&amp;diff=15790"/>
		<updated>2010-08-02T21:10:07Z</updated>

		<summary type="html">&lt;p&gt;Lemm: ..&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi Lemm, and welcome to the KeenWiki. I&#039;m Xterra, a veteran user here. I hop eyou enjoy and contribute to this wiki, and also- that&#039;s quite a job you have there- patching plant DNA? Wow....-[[User:Xterra1|&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Xt&amp;lt;/font&amp;gt;]][[User talk:Xterra1|&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;er&amp;lt;/font&amp;gt;]][[Special:Contributions/Xterra1|&amp;lt;font color=&amp;quot;gold&amp;quot;&amp;gt;r&amp;lt;/font&amp;gt;]][[Special:Random|&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;a1&amp;lt;/font&amp;gt;]] 21:24, 1 August 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
PS- here&#039;s how to sign and time comments (not trying to be condescending). Simply put four tildes, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you edit this page to reply, you&#039;ll notice the four tildes are surounded by &amp;quot;nowiki&amp;quot; code. That tells the wiki to not format that text automatically. [[User:Xterra1|&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Xt&amp;lt;/font&amp;gt;]][[User talk:Xterra1|&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;er&amp;lt;/font&amp;gt;]][[Special:Contributions/Xterra1|&amp;lt;font color=&amp;quot;gold&amp;quot;&amp;gt;r&amp;lt;/font&amp;gt;]][[Special:Random|&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;a1&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
:: Okay.  I knew how to sign comments, but I forget to do so often enough that it would appear otherwise.  I Should probably go look at the mediawiki doc one of these days...&lt;br /&gt;
&lt;br /&gt;
[[User:Lemm|Lemm]] 21:10, 2 August 2010 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=User:Lemm&amp;diff=15767</id>
		<title>User:Lemm</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=User:Lemm&amp;diff=15767"/>
		<updated>2010-07-29T14:25:07Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Made User Page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am Lemm, patcher of Keen.&lt;br /&gt;
&lt;br /&gt;
In real life, I patch plant DNA for the purposes of protein production.  Hopefully I will retire on a pile of cash when I am 40.&lt;br /&gt;
&lt;br /&gt;
Started doing this in July 2009 because I wanted to learn x86 assembly (for whatever reason) and make games.  Since I&#039;ve played Keen on and off since I was 3, I figured Keen modding would be a good start.  I&#039;ve done my fair share of reversing the vorticons code.  This has led to some pretty nifty patches (check &#039;em on Keen:Modding)!&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Game_stats&amp;diff=15716</id>
		<title>Patch talk:Game stats</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Game_stats&amp;diff=15716"/>
		<updated>2010-07-15T04:57:20Z</updated>

		<summary type="html">&lt;p&gt;Lemm: reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In vorticons, these &amp;quot;item bytes&amp;quot; are the save file (this portion of the game&#039;s memory gets written to the disk).&lt;br /&gt;
[[User:Lemm|Lemm]] 01:17, 14 July 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
--Indeed they are, should we add that to the page? There&#039;s even a direct correlation between the &#039;value&#039; and where it ends up in the saved game file. (As you&#039;d expect.) --[[User:Levellass|Levellass]] 02:44, 14 July 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
--Yes, I think it would be a good idea to rename the topic from &amp;quot;item bytes&amp;quot; into something more general like &amp;quot;game profile&amp;quot; or &amp;quot;game status&amp;quot; or whatever.  Then you could have the vorticons save game format at the top of the page and copy the save game format notes page from levellord.rewound.net.  (There&#039;s also a couple of corrections that I should make to those notes) [[User:Lemm|Lemm]] 03:14, 15 July 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
--Ok, so what kind of name are we considering for the page here? &#039;Game stats&#039; sounds good to me. We know roughly both the Galaxy and Vorticons savegame format, so I guess you&#039;d want those in the page too, though I&#039;m not sure they should be at the top of the page, mostly this page will be linked to relating to patches for the tables of values, perhaps the format would be better at the bottom of the page, with a note about how the tables map onto them? --[[User:Levellass|Levellass]] 04:02, 15 July 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
--Game stats sounds good, there could be a short intro as you have now.  I would say divide the rest of the page in half and put all vorticons stuff at the top and all galaxy stuff at the bottom, and then you can have the save game file description at the bottom of each half. [[User:Lemm|Lemm]] 04:57, 15 July 2010 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Jump_conditions&amp;diff=15714</id>
		<title>Patch:Jump conditions</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Jump_conditions&amp;diff=15714"/>
		<updated>2010-07-15T03:18:35Z</updated>

		<summary type="html">&lt;p&gt;Lemm: added link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jump conditions are conditions required in a patch for a &#039;choice&#039; to be made, such as whether or not to display a graphic or to exit a level or add points. They are very important in the Keen executable, but rarely patched. The general format is a value, followed by a &#039;condition&#039; followed by the number of bytes to jump. Any or all of these may be in a patch. They are the equivalent of the BASIC &#039;IF... THEN&#039; command. As an example, the following patch changes the BWB level in Keen 4. (The level that can be played infinitely many times, unlike other levels which get marked as done.):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#BwB level:&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $60FD &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;$11&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;$77&amp;lt;/font&amp;gt; $5B &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Level &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;$xx&amp;lt;/font&amp;gt; and above&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The various kinds of jump are as follows. They will be explained gradually.&lt;br /&gt;
&lt;br /&gt;
 $xx $72 $yy      JB:  Jump if below&lt;br /&gt;
 $xx $73 $yy      JAE: Jump if above or equal&lt;br /&gt;
 $xx $74 $yy      JE:  Jump if equal&lt;br /&gt;
 $xx $76 $yy      JBE: Jump if below or equal&lt;br /&gt;
 $xx $77 $yy      JA:  Jump if above&lt;br /&gt;
&lt;br /&gt;
 $xx $7C $yy      JL:  Jump if less&lt;br /&gt;
 $xx $7D $yy      JGE: Jump if greater or equal&lt;br /&gt;
 $xx $7E $yy      JLE: Jump if less or equal&lt;br /&gt;
 $xx $7F $yy      JG:  Jump if greater&lt;br /&gt;
 $xx $75 $yy      JNE: Jump if not equal&lt;br /&gt;
&lt;br /&gt;
     $EB $yy      JMP: Jump short&lt;br /&gt;
     $E9 $yy $yy  JMP: Jump near&lt;br /&gt;
&lt;br /&gt;
     $E8 $yy $yy       CALL: Call near&lt;br /&gt;
     $9A $yyyyyyyyRL   CALL FAR: Call far; address is absolute&lt;br /&gt;
&lt;br /&gt;
Our example patch checks the number of the level Keen has just exited. IF the number is above ($77) 17 ($11) THEN it jumps 91 ($5B) bytes ahead in the code. These 91 bytes mark a level as done, so in this case, any level above 17 Keen enters will not be marked done when he exits, and can be played again as many times as he likes.&lt;br /&gt;
&lt;br /&gt;
The &#039;distance&#039; jumped is measured from the byte AFTER the amount jumped. So our example patch jumps to $615B. ($6100 + $5B) The jump is thus &#039;relative&#039;, though &#039;call far&#039; is &#039;absolute&#039; (See below.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Above\below vs more\less ==&lt;br /&gt;
&lt;br /&gt;
Notice there are two sets of jumps that seem to do the same thing. This is because Keen uses two types of values (integers); signed and unsigned. Signed integers can be negative ($FF = -1, $F0 = -16...) whereas unsigned integers can&#039;t. ($FF = 255 $F0 = 240). This doesn&#039;t usually have too much of an effect on patches, as most use small positive values, which are the same in both systems, but it can affect more complex patches. (Specifically a 1-byte value of $80 or a 2-byte value of $8000 or more becomes negative if it is signed, causing problems if you&#039;re not careful.)&lt;br /&gt;
&lt;br /&gt;
The two sets of jumps thus treat certain values differently, depending on which is used. ($FF is smaller than 0 if signed (-1), but bigger than 0 if unsigned (255)) The greater/less jumps are for signed integers (-32768 to 32767 in the case of a 16-bit integer), while the above/below jumps are for unsigned integers (0 to 65535)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
&lt;br /&gt;
Most jumps have conditions, that is, they check something before jumping. Some do not. Specifically the &#039;jump short&#039;, &#039;jump near&#039; and both the &#039;calls&#039; don&#039;t check anything. When they are encountered something ALWAYS happens. This can be seen in some patches. As an example, if we wanted ALL levels to be infinitely replayable we would simply change our example patch to:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#ALL levels are BWB-type levels:&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $60FD $11 &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;$EB&amp;lt;/font&amp;gt; $5B&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice that some of the &#039;jumps&#039; have a TWO-byte jump distance, whereas most have just one. You may also wonder why a program needs mandatory jumps, if some code is always going to be skipped, why have it in there in the first place?&lt;br /&gt;
&lt;br /&gt;
There are a number of reasons, based on the slightly odd way the jumps work. You will notice that ALL of the &#039;conditional jumps&#039; have only one-byte jump distances. This means they longest they can jump is 255 bytes ($FF) But what if you want to skip more code than that? In general a conditional jump AND a mandatory jump are used. Consider the hypothetical patch below:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;%patch $ABCD $04 $74 $03 $E9 $80 $02&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here if some value is equal to four, a jump itself is jumped. Another way to look at this is &#039;If a value is NOT equal to four, jump $0208&#039; This lets a programmer make &#039;big conditional jumps&#039;, with the annoying side-effect of the jump being &#039;reversed&#039; A lot of these tend to turn up, meaning that an unwary patcher may be dealing with a patch that does the opposite of what he thinks it does. It thus pays to pay special attention to what an example patch does before changing it.&lt;br /&gt;
&lt;br /&gt;
Another trick that can be used is to remove an existing jump entirely; this is usually done by replacing the jump and jump distance by $90. In our example patch, if we wanted to make all levels completable we would use this patch:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#NO levels are BWB-type levels:&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $60FD $11 $90 $90&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here the jump has been eliminated, no matter what level Keen exits, no code will be skipped. This too will often be seen in patches and can be done with any jump. For &#039;call near&#039; and &#039;jump near&#039; we would need three bytes of $90 to properly remove the jump and for &#039;call far&#039;, FIVE bytes. (It is also worth noting that a one-byte value of say $06 is a two-byte value of $06 $00 or $0006W when patching.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calls ==&lt;br /&gt;
&lt;br /&gt;
The last two &#039;jumps&#039; in the list are not jumps at all, but &#039;calls&#039;; they are always executed when encountered and are the equivalent of GOSUB and SUB in BASIC. (That is the program will go to where it is directed, do something, then return.) The &#039;call near&#039; is similar to &#039;jump near&#039;, but is much more common and is often used to jump backwards in the code. (The jump distance is signed,.) The &#039;call far&#039; is more complex.&lt;br /&gt;
&lt;br /&gt;
Call far goes to an absolute address in the UNPATCHED, UNLZEXE&#039;d code. Its&#039; address is considered to have two parts, a &#039;segment&#039; and an &#039;offset&#039;, each two bytes long. The actual location in the code is [segment * 256] + [offset] This is done because executables require addresses of more than 2 bytes and, for simplicity, they are divided into segments of varying lengths.&lt;br /&gt;
&lt;br /&gt;
Because of the way CKPatch works, call far patches can be done in a number of ways. The first thing to note is that because the code is patched into memory, all the addresses in it are addresses in memory, and thus change. CKPatch automatically alters unpatched call far values to work with this, by adding another value, z, to the segment locations. However it doesn&#039;t do this to normal patches, meaning that for some time it was impossible to patch call far, as z is different each time CKPatch is run. However it is now possible for the Galaxy series to use &#039;relative word&#039; and &#039;relative long&#039; patches, RW and RL. The patch $12 $34 $56 $78 can thus be presented as $3412W $7856RW or $78563412RL, indicating to CKPatch that the patch is &#039;relative&#039; and should be adjusted when patching into memory.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_6/CH06-5.html] - More information on x86 assembly program control flow instructions.&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Game_stats&amp;diff=15713</id>
		<title>Patch talk:Game stats</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Game_stats&amp;diff=15713"/>
		<updated>2010-07-15T03:14:11Z</updated>

		<summary type="html">&lt;p&gt;Lemm: reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In vorticons, these &amp;quot;item bytes&amp;quot; are the save file (this portion of the game&#039;s memory gets written to the disk).&lt;br /&gt;
[[User:Lemm|Lemm]] 01:17, 14 July 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
--Indeed they are, should we add that to the page? There&#039;s even a direct correlation between the &#039;value&#039; and where it ends up in the saved game file. (As you&#039;d expect.) --[[User:Levellass|Levellass]] 02:44, 14 July 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
--Yes, I think it would be a good idea to rename the topic from &amp;quot;item bytes&amp;quot; into something more general like &amp;quot;game profile&amp;quot; or &amp;quot;game status&amp;quot; or whatever.  Then you could have the vorticons save game format at the top of the page and copy the save game format notes page from levellord.rewound.net.  (There&#039;s also a couple of corrections that I should make to those notes) [[User:Lemm|Lemm]] 03:14, 15 July 2010 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Game_stats&amp;diff=15689</id>
		<title>Patch talk:Game stats</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch_talk:Game_stats&amp;diff=15689"/>
		<updated>2010-07-14T01:17:24Z</updated>

		<summary type="html">&lt;p&gt;Lemm: save file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In vorticons, these &amp;quot;item bytes&amp;quot; are the save file (this portion of the game&#039;s memory gets written to the disk).&lt;br /&gt;
[[User:Lemm|Lemm]] 01:17, 14 July 2010 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Text_patches&amp;diff=15527</id>
		<title>Patch:Text patches</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Text_patches&amp;diff=15527"/>
		<updated>2010-06-25T16:41:09Z</updated>

		<summary type="html">&lt;p&gt;Lemm: ..&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a page explaining how text patches work. For more specific patches, such as the About Id text, see the relevant patch page (E.g [[Patch:About Id]]. Specific examples include [[Patch:End text]], [[Patch:Help text]], [[Patch:Story text]]and [[Patch:Ordering info]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A text patch is a patch that involves changing a string of text in the Keen executable. They differ from other patches in that machine instructions are not being altered, but textual data instead. A text patch has two patchable parts, the text itself, and the reference (or pointer) to the text. Text strings are stored in a region of the keen executable known as the &amp;quot;data segment.&amp;quot; The reference to the text, or &amp;quot;pointer,&amp;quot; is part of the actual game code, located in a separate segment.  The location of the data segment for each Keen game is listed below:&lt;br /&gt;
&lt;br /&gt;
 Keen 1: $13050&lt;br /&gt;
 Keen 2: $17780&lt;br /&gt;
 Keen 3: $19820&lt;br /&gt;
 Keen 4: $2EE70&lt;br /&gt;
 Keen 5: $30340&lt;br /&gt;
 Keen 6: $30D30&lt;br /&gt;
 Keen D: $23A70&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An example text patch is given below. It patches the name of the saved game files in Keen 3. (The &#039;?&#039; is replaced by the game number, e.g SAVED3.CK3) The first pair of patches changes the actual text in the executable.  The second pair changes the values of the pointers. Notice that the two pointers are NOT the absolute location of the text from the beginning of the executable, but that location minus the data segment start (e.g. second patch: $1CA35 - $19820 = $3215).  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Patch the text&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $1CA28 &amp;quot;SAVED?.&amp;quot; $00      &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#load game from this filename&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $1CA35 &amp;quot;SAVED?.&amp;quot; $00      &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#save game to this filename&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Patch Keen 3 saved game filename&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $A2BD $08 $32 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Save game to&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $A44D $15 $32 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Load game from&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that the string is null-terminated ($00), that is, the byte $00 denotes the end of a string.  Also note that a string patched to be longer than the original may overwrite other data in the executible.  What this means for our example patch is that we can have some text shorter or the same length as the original.   Thus &#039;SAVE?.&#039; or &#039;GAME?.&#039; are both ok, but &#039;SAVEGAME?.&#039; is not. (In fact you will notice that these two pieces of text are almost right after each other.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;newline&#039; character, $0A, means &#039;go down a line&#039; and is used in longer text patches. While some patches (Simple patches like the above or the [[Patch:Story text]] patch) don&#039;t need these, many do. As an example, this is some cheat text from Keen 4, as it is stored in the executable:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Keen 4 cheat text:&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $2F435 &amp;quot;Cheat Option!&amp;quot; $0A $0A&lt;br /&gt;
               &amp;quot;You just got all&amp;quot; $0A&lt;br /&gt;
               &amp;quot;the keys, 99 shots,&amp;quot; $0A&lt;br /&gt;
               &amp;quot;and an extra keen!&amp;quot; $00&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here each line ends with $0A, so that the next line starts one line lower. Finally the text is ended with $00. The text has been arranged so this can be seen.&lt;br /&gt;
&lt;br /&gt;
The restrictions on space and format can be annoying and at present there is only two programs that can partially automate some text patches. ([[Startext]] and [[Patchatron]]) It is possible, with some skill, to rearrange text patches to allow yourself more space when patching. (By overwriting useless text or spare space for example.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 1|}}&lt;br /&gt;
{{PatchCategories|Keen 2|}}&lt;br /&gt;
{{PatchCategories|Keen 3|}}&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Patch:Text_patches&amp;diff=15526</id>
		<title>Patch:Text patches</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Patch:Text_patches&amp;diff=15526"/>
		<updated>2010-06-25T16:39:44Z</updated>

		<summary type="html">&lt;p&gt;Lemm: rewrote some stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a page explaining how text patches work. For more specific patches, such as the About Id text, see the relevant patch page (E.g [[Patch:About Id]]. Specific examples include [[Patch:End text]], [[Patch:Help text]], [[Patch:Story text]]and [[Patch:Ordering info]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A text patch is a patch that involves changing a string of text in the Keen executable. They differ from other patches in that machine instructions are not being altered, but textual data instead. A text patch has two patchable parts, the text itself, and the reference (or pointer) to the text. Text strings are stored in a region of the keen executable known as the &amp;quot;data segment.&amp;quot; The reference to the text, or &amp;quot;pointer,&amp;quot; is part of the actual game code, located in a separate segment.  The location of the data segment for each Keen game is listed below:&lt;br /&gt;
&lt;br /&gt;
 Keen 1: $13050&lt;br /&gt;
 Keen 2: $17780&lt;br /&gt;
 Keen 3: $19820&lt;br /&gt;
 Keen 4: $2EE70&lt;br /&gt;
 Keen 5: $30340&lt;br /&gt;
 Keen 6: $30D30&lt;br /&gt;
 Keen D: $23A70&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An example text patch is given below. It patches the name of the saved game files in Keen 3. (The &#039;?&#039; is replaced by the game number, e.g SAVED3.CK3) The first pair of patches changes the actual text in the executable.  The second pair changes the values of the pointers. Notice that the two pointers are NOT the location of the text, but the location minus the data segment start (e.g. second patch: $1CA35 - $19820 = $3215).  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Patch the text&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $1CA28 &amp;quot;SAVED?.&amp;quot; $00      &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#load game from this filename&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $1CA35 &amp;quot;SAVED?.&amp;quot; $00      &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#save game to this filename&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Patch Keen 3 saved game filename&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $A2BD $08 $32 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Save game to&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $A44D $15 $32 &amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Load game from&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that the string is null-terminated ($00), that is, the byte $00 denotes the end of a string.  Also note that a string patched to be longer than the original may overwrite other data in the executible.  What this means for our example patch is that we can have some text shorter or the same length as the original.   Thus &#039;SAVE?.&#039; or &#039;GAME?.&#039; are both ok, but &#039;SAVEGAME?.&#039; is not. (In fact you will notice that these two pieces of text are almost right after each other.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;newline&#039; character, $0A, means &#039;go down a line&#039; and is used in longer text patches. While some patches (Simple patches like the above or the [[Patch:Story text]] patch) don&#039;t need these, many do. As an example, this is some cheat text from Keen 4, as it is stored in the executable:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;#Keen 4 cheat text:&amp;lt;/font&amp;gt;&lt;br /&gt;
 %patch $2F435 &amp;quot;Cheat Option!&amp;quot; $0A $0A&lt;br /&gt;
               &amp;quot;You just got all&amp;quot; $0A&lt;br /&gt;
               &amp;quot;the keys, 99 shots,&amp;quot; $0A&lt;br /&gt;
               &amp;quot;and an extra keen!&amp;quot; $00&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here each line ends with $0A, so that the next line starts one line lower. Finally the text is ended with $00. The text has been arranged so this can be seen.&lt;br /&gt;
&lt;br /&gt;
The restrictions on space and format can be annoying and at present there is only two programs that can partially automate some text patches. ([[Startext]] and [[Patchatron]]) It is possible, with some skill, to rearrange text patches to allow yourself more space when patching. (By overwriting useless text or spare space for example.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PatchCategories|Keen 1|}}&lt;br /&gt;
{{PatchCategories|Keen 2|}}&lt;br /&gt;
{{PatchCategories|Keen 3|}}&lt;br /&gt;
{{PatchCategories|Keen 4|}}&lt;br /&gt;
{{PatchCategories|Keen 5|}}&lt;br /&gt;
{{PatchCategories|Keen 6|}}&lt;br /&gt;
{{PatchCategories|Keen Dreams|}}&lt;br /&gt;
{{PatchCategories|Tutorial|}}&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
	<entry>
		<id>https://keenwiki.shikadi.net/w/index.php?title=Talk:Das_Viva&amp;diff=14721</id>
		<title>Talk:Das Viva</title>
		<link rel="alternate" type="text/html" href="https://keenwiki.shikadi.net/w/index.php?title=Talk:Das_Viva&amp;diff=14721"/>
		<updated>2010-05-11T01:19:41Z</updated>

		<summary type="html">&lt;p&gt;Lemm: Created page with &amp;#039;Download link broken ~~~~&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download link broken&lt;br /&gt;
[[User:Lemm|Lemm]] 01:19, 11 May 2010 (GMT)&lt;/div&gt;</summary>
		<author><name>Lemm</name></author>
	</entry>
</feed>