Patch:Yorp Messages
Yorp messages are the text boxes that appear when Keen touches a Yorp statue in Keen 1. They provide Keen with hints or just random banter throughout the game. This page also deals with the Garg statue, which is a special case.
The window appears when Keen touches a specific tile type and vanishes when a key is pressed, along with the tile being transformed into another, inert tile.
%level.hint and CKPatch
CKPatch has a special command for dealing with Keen 1 level hints. it is %level.hint <n> [text] For example:
Keen 1
%level.hint 2
This is a hint
message that spans
multiple lines.
To quote the CKPatch readme: Changes the text that the Yorp or Garg statue for level <n> gives you. It does not include the 'Press ENTER' footer at the bottom. <n> may only be 2,6,9,10,11,12 or 15. Lines of text are separated by putting carriage returns in the text. The limit on the message is 20 characters per line, and a maximum of 7 lines for all levels except for level 11 (4 lines) and level 15 (6 lines). The message is automatically padded with spaces/blank lines.
This somewhat inelegant approach is quite simple and easy to use, as it does not require much knowledge of text patches, but also quite limited, keeping the patcher to a strict formula for messages.
Statue tiles
The tile property 'Yorp message' causes the Yorp messages to appear and the tile to transform. If the 'starting tile' is larger than a certain value (in the tileset) then another tile, the Garg replacement tile will replace it. If the replacing tile also has the Yorp message property then it too will bring up the Yorp message and so on, causing annoying loops.
Keen 1
#Tile Yorp message head becomes
%patch $455E [$013BW]
#Tile Garg message head becomes
%patch $4547 [$01B2W]
Tile Garg level number
In the game, all levels use the Yorp statue tile. However, level 11 is a special case, because it uses the Garg statue tile. The following patch deals with it and can be altered to any other desired level number.
#Tile Garg level number
%patch $4531 $0B $75 #Level 11
Level 1 can have a message
By default any level above and including 2 can have a message. This patch alters things so that level 1 can also have a message. As a side effect it 'drops' all messages down one level. (So level 2's message will appear in level 1, level 6's in level 5 and so on.) This is compatible with all other patches on this page.
Keen 1
#Messages start at level 1
%patch $2519 $90
Message completes level
This patch wins the level when the message is played. Note that this patch is potentially unstable and may cause unforeseen problems if used.
Keen 1
#Garg message completes level
%patch $454A $90
#Yorp message completes level
%patch $4561 $90
Message window
This is the window that displays all he messages, including the text.
What messages appear in each level
This patch shows the default layout of messages in the game. Like several things in Keen it is a 'pointer list'; that is the game reads a value then goes to that place in the code where there is a list. It then reads the value off that list corresponding to the level Keen is currently in then runs the code at that location.
As things are set up here it not possible to make new messages, but it is possible to rearrange what replies are shown on what levels. The value $26ABW is 'blank' meaning no text (Except the press any key line.) will appear in the message window. It can immediately be seen that there are 7 unique messages.
Note that by default entries exist only for the first 15 levels which can be a problem if the 32 levels patch is used. Swapping one value with another will swap what level a given message is shown in, and one message can be used in multiple levels. It is also possible to extend the list, but in order to do this more space for the list will have to be found.
Keen 1
#Location of pointer list:
%patch $2528 [$26E2W]
#Length of pointer list:
%patch $251D [$0D]
#Pointers to messages:
%patch $26E2 $252AW #Level 2
$26ABW
$26ABW
$26ABW
$2566W #Level 6
$26ABW
$26ABW
$25A2W #Level 9
$25DEW #Level 10
$261AW #Level 11
$263AW #Level 12
$26ABW
$26ABW
$2675W #Level 15
Message window size and text
These patches alter the size of the message window and what text is displayed in it. patch:Text patches may be valuable when using these. Notice that each line in the window has its own text call, this is inefficient and annoying. (See section below.)
Keen 1
#Yorp message window size
%patch $2508 [$000AW] #Yorp message window height in lines of text
%patch $250C [$0015W] #Yorp message window width in letters
#Level 2 hint window
%patch $252B [$2030W] #First line
%patch $2534 [$2046W] #Second line
%patch $253D [$205CW] #Third
%patch $2546 [$2072W] #4th
%patch $254F [$2088W] #5th
%patch $2558 [$209EW] #6th
%patch $2561 [$20B4W] #7th
#First Yorp message: (Level 2) -7 lines
%patch $15080 "You hear in your " $0A $00
%patch $15096 "mind: " $0A $00
%patch $150AC " " $0A $00
%patch $150C2 "It is too bad that " $0A $00
%patch $150D8 "you cannot read the " $0A $00
%patch $150EE "Standard Galactic " $0A $00
%patch $15104 "Alphabet, Human. " $0A $00
#Level 6 window
%patch $2567 [$20CAW] #1st
%patch $2570 [$20E0W] #2nd
%patch $2579 [$20F6W] #3rd
%patch $2582 [$210CW] #4th
%patch $258B [$2121W] #5th
%patch $2594 [$2138W] #6th
%patch $259D [$214EW] #7th
#Second Yorp message (Level 6) -7 lines
%patch $1511A "A message echoes in " $0A $00
%patch $15130 "your head: " $0A $00
%patch $15146 " " $0A $00
%patch $1515C "The Teleporter in " $0A $00
%patch $15172 "the ice will send " $0A $00
%patch $15188 "you to the dark side" $0A $00
%patch $1519E "of Mars " $0A $00
#Level 9 window
%patch $25A3 [$2164W] #1st
%patch $25AC [$217AW] #2nd
%patch $25B5 [$2190W] #3rd
%patch $25BE [$21A6W] #4th
%patch $25C7 [$21BCW] #5th
%patch $25D0 [$21D2W] #6th
%patch $25D9 [$21E8W] #7th
#Third Yorp message: (Level 9) -7 lines
%patch $151B4 "A voice buzzes in " $0A $00
%patch $151CA "your mind: " $0A $00
%patch $151E0 " " $0A $00
%patch $151F6 "There is a hidden " $0A $00
%patch $1520C "city. Look in the " $0A $00
%patch $15222 "dark area of the " $0A $00
%patch $15238 "city to the south " $0A $00
#Level 10 window
%patch $25DF [$21FEW] #1st
%patch $25E8 [$2214W] #2nd
%patch $25F1 [$222AW] #3rd
%patch $25FA [$2240W] #4th
%patch $2603 [$2256W] #5th
%patch $260C [$226CW] #6th
%patch $2615 [$2282W] #7th
#Fourth Yorp message: (Level 10) -7 lines
%patch $1524E "You see these words " $0A $00
%patch $15264 "in your head: " $0A $00
%patch $1527A " " $0A $00
%patch $15290 "You will need a " $0A $00
%patch $152A6 "raygun in the end, " $0A $00
%patch $152BC "but not to kill the " $0A $00
%patch $152D2 "Vorticon... " $0A $00
#Level 11 window (GAAAARG!)
%patch $261B [$2298W] #1st
%patch $2624 [$22AEW] #2nd
%patch $262D [$22C4W] #3rd
%patch $2636 [$22DAW] #4th
#Garg message: (Level 11) -4 lines
%patch $152E8 "You hear in your " $0A $00
%patch $152FE "mind: " $0A $00
%patch $15314 " " $0A $00
%patch $1532A " GAAARRRRRGG! " $0A $00
#Level 12 window
%patch $263B [$22F0W] #1st
%patch $2644 [$2306W] #2nd
%patch $264D [$231CW] #3rd
%patch $2656 [$2332W] #4th
%patch $265F [$2349W] #5th
%patch $2668 [$235FW] #6th
%patch $2671 [$2375W] #7th
#Fifth Yorp Message: (Level 12) -7 lines
%patch $15340 "A Yorpish whisper " $0A $00
%patch $15356 "says: " $0A $00
%patch $1536C " " $0A $00
%patch $15382 "Look for dark, hidden" $0A $00
%patch $15399 "bricks. You can see " $0A $00
%patch $153AF "naught but their " $0A $00
%patch $153C5 "upper left corner. " $0A $00
#Level 15 window
%patch $2676 [$238BW] #1st
%patch $267F [$23A1W] #2nd
%patch $2688 [$23B7W] #3rd
%patch $2691 [$23CDW] #4th
%patch $269A [$23E3W] #5th
%patch $26A3 [$23F9W] #6th
#Sixth Yorp message: (Level 15) -6 lines
%patch $153DB "A Yorpy mind-thought" $0A $00
%patch $153F1 "bellows: " $0A $00
%patch $15407 " " $0A $00
%patch $1541D "You cannot kill the " $0A $00
%patch $15433 "Vorticon Commander " $0A $00
%patch $15449 "directly. " $0A $00
#End of Yorp messages
%patch $26B5 [$240FW]
%patch $1545F "Press ENTER:"
Message text appears letter-by-letter
This patch changes the messages so that the text appears not line-by-line but letter-by-letter, as it does in the ending sequence text boxes. These patches are incompatible with CKPatch's default %level.hint commands, the message must be patched and parsed directly.
The following patches use the maximum line length, extra spaces at the end of lines can be deleted with no ill effect.
Keen 1
#Level 2 message scrolls
%patch $252F $5C1FW $E9 $0175W
#Message
%patch $15080 "You hear in your " $0A
"mind: " $0A
" " $0A
"It is too bad that " $0A
"you cannot read the " $0A
"Standard Galactic " $0A
"Alphabet, Human. " $0A $00
Dismiss window with any key
This patch allows the player to dismiss the message window by pressing any key instead of having to press enter.
Keen 1
#Dismiss window with any key
%patch $26C9 $90 $90
Simplifying text patching
If a patcher wishes to make text patching simpler, but not as simple as the %level.hint patch above, an easy way is to set the text calls for all but the first line of a window to $202FW, thus blanking them.
This has a number of advantages; firstly, if the patcher wishes to change the text in a window they need only change the text itself instead of having to recalculate the locations of every line of text in the window. (Notice how in our above example the several separate lines of text in the window are joined together into a single message.) It also frees up some text space since the text doesn't have to be so padded. (This can double the length of some messages.)
Keen 1
#Level 2 hint window - simplified
%patch $252B [$2030W] #First line
%patch $2534 [$202FW] #Second line
%patch $253D [$202FW] #Third
%patch $2546 [$202FW] #4th
%patch $254F [$202FW] #5th
%patch $2558 [$202FW] #6th
%patch $2561 [$202FW] #7th
#First Yorp message: (Level 2) -7 lines
%patch $15080 "You hear in your" $0A
"mind:" $0A $0A
"It is too bad that" $0A
"you cannot read the" $0A
"Standard Galactic" $0A
"Alphabet, Human." $0A $00