From: Alan Cox Date: Sat, 19 Mar 2016 18:53:49 +0000 (+0000) Subject: games: Add the Scott Adams and Brian Howarth games X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=fba17e81ca08b1e61c095250dbbce766221dcf1a;p=FUZIX.git games: Add the Scott Adams and Brian Howarth games --- diff --git a/Applications/games/Makefile b/Applications/games/Makefile index e3e1c2be..5f2b2365 100644 --- a/Applications/games/Makefile +++ b/Applications/games/Makefile @@ -16,10 +16,12 @@ BINMAN = ../../Library/tools/binman .SUFFIXES: .c .rel -SRCSNS = \ - qrun.c +SRCSNS = qrun.c -SRCS = +SRCS = adv01.c adv02.c adv03.c adv04.c adv05.c adv06.c adv07.c \ + adv08.c adv09.c adv10.c adv11.c adv12.c adv13.c adv14a.c adv14b.c \ + myst01.c myst02.c myst03.c myst04.c myst05.c myst06.c myst07.c \ + myst08.c myst09.c myst10.c myst11.c SRCSBAD = diff --git a/Applications/games/README.adv b/Applications/games/README.adv new file mode 100644 index 00000000..6b65a911 --- /dev/null +++ b/Applications/games/README.adv @@ -0,0 +1,149 @@ +See below for the game copyright. The adv*.c and myst*c files were generated by +ScottFree6800 + +https://github.com/EtchedPixels/ScottAdams6800 + +The game engine can also play Gremlins, Robin Of Sherwood, Seas of Blood, +Supergran and a few other games. You will need a legitimately obtained database +for these games as they unlike the earlier games have not been re-released +for free public consumption. + +-------------- + +adv*c: + +These Scott Adams original text Adventure games are still copyrighted by +Scott Adams and are not Public Domain. They may be freely downloaded and +enjoyed though. They are shareware but the contribution is strictly +voluntary and the amount left to your own discretion. + +Please note that international checks (in small amounts) are usually more +expensive to cash than their face value is worth so please do not send same. + +If you are unable or unwilling to pay for these games you may still freely +enjoy them. + +Please send any payments to + +Scott Adams +845 Badland Road +Platteville WI USA 53818-9760 + +Homepage: http://www.msadams.com/ +Email: msadams@msadams.com +November 24, 1997 + + +myst*c: + +THE BRIAN HOWARTH COLLECTION 2.0 +-------------------------------- +(c) Brian Howarth, 1981-83 + +Brian Howarth wrote his "Mysterious Adventures" in 1981-83, originally +as text-only games (the way they are presented here). Later versions +(Spectrum, C-64) had line-drawing graphics. + +All datafiles are conversions from Spectrum/C-64 versions of the games +(but minus the graphics, as "ScottAdams6800" does not support graphics at +the moment). Brian Howarth gave his permission to upload the 11 +Mysterious Adventures to the IF Archive. + +Have fun, and happy nostalgia! + +---------------------------------------------------------------------- + +The 11 Mysterious Adventures + +01 The Golden Baton +02 The Time Machine +03 Arrow of Death Part 1 +04 Arrow of Death Part 2 +05 Escape from Pulsar 7 +06 Circus +07 Feasibility Experiment +08 The Wizard of Akyrz +09 Perseus and Andromeda +10 Ten Little Indians +11 Waxworks + +#1: The Golden Baton + +Your mission is to recover the Golden Baton, a priceless artefact that +holds within it a kind of life force that maintains the equilibrium +between good and evil. Stolen from the Palace of King Ferrenuil, the +kingdom is already beginning to feel the effects of drought and +pestilence. + +#2: The Time Machine + +Trapped in a thick fog on the moors whilst searching for the house of +Dr Potter, you begin to wonder just what sort of a story will unfold +for your newspaper about the strange goings on that have been +witnessed at this home... that's if you ever find it. + +#3: Arrow of Death Part 1 + +Although restored to its rightful place in the throne room over 5 +years ago the Golden Baton which usually shines brighter than normal +gold has suddenly become tarnished, at the same time gloom and despair +settles over the whole kingdom. Find the source of this evil +influence before it is too late. + +#4: Arrow of Death Part 2 + +Having successfully completed Arrow of Death Part 1, you now have the +components to make a magical arrow with which you will be able to +destroy Zerdon, the evil accomplice of the Wizard Akyrz, the real +mastermind behind the evil that has befallen the Golden Baton. + +#5: Escape from Pulsar 7 + +As last surviving crew member of this ill-fated space freighter you +must somehow manage to make your escape in the frail shuttle craft +without being eaten by the mutant monster now roaming free. + +#6: Circus + +What appears to be a circus in full swing from the distance suddenly +becomes as silent as the grave as you open the gate into the field. +Never the less you must find some petrol for your car, so here goes... + +#7: Feasibility Experiment + +A human guinea-pig for a race of super intelligent beings that have no +bodily form. Plucked from your bed in order to satisfy their craving +for life force that will sustain them. A warrior that can live up to +the image of Alexander the Great. + +#8: The Wizard of Akyrz + +Twice defeated by a mere mortal it has taken the evil wizard some time +to recover his powers. Now he forms a new plan to trap and utterly +destroy the earthly being that dares to thwart him. + +#9: Perseus and Andromeda + +Take on the role of Perseus, son of Zeus and Danae. Bring back the +head of Medusa the gorgon, whose very glance can turn a man to stone. +Otherwise King Polydectes will have his wicked way. + +#10: Ten Little Indians + +A train journey begins your quest for the golden idol left by Major +Johnston-Smythe when he died. Other treasure hunters have tried +before you, most of them have never been seen again... + +#11: Waxworks + +A nightmare comes true, you must find your way out of the wax works +factory in which all the exhibits mysteriously come alive. + +(c) 1981,1982,1983 + +All games written by Brian Howarth. #5-7 were co-written by Wherner +Barnes. #8 and #11 were co-written by Cliff J. Ogden. + +Database extraction and this README file by Paul David Doherty. + but revised by Alan Cox to reflect the Fuzix +packaged versions. diff --git a/Applications/games/adv01.c b/Applications/games/adv01.c new file mode 100644 index 00000000..35d9087b --- /dev/null +++ b/Applications/games/adv01.c @@ -0,0 +1,2839 @@ +#define NUM_OBJ 65 +#define WORDSIZE 3 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 125; +const uint8_t lightfill = 125; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 3; +const uint8_t treasures = 13; +const uint8_t lastloc = 33; +const uint8_t startloc = 11; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +100, 105, 115, 109, 97, 108, 32, 115, 119, 97, 109, 112, 0 }; +const uint8_t loctxt_2[] = { +116, 111, 112, 32, 111, 102, 32, 97, 32, 116, 97, 108, 108, 32, 99, 121, 112, 114, 101, 115, 115, 32, 116, 114, 101, 101, 0 }; +const uint8_t loctxt_3[] = { +100, 97, 109, 112, 32, 104, 111, 108, 108, 111, 119, 32, 115, 116, 117, 109, 112, 32, 105, 110, 32, 116, 104, 101, 32, 115, 119, 97, 109, 112, 0 }; +const uint8_t loctxt_4[] = { +114, 111, 111, 116, 32, 99, 104, 97, 109, 98, 101, 114, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 115, 116, 117, 109, 112, 0 }; +const uint8_t loctxt_5[] = { +115, 101, 109, 105, 45, 100, 97, 114, 107, 32, 104, 111, 108, 101, 32, 98, 121, 32, 116, 104, 101, 32, 114, 111, 111, 116, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_6[] = { +108, 111, 110, 103, 32, 100, 111, 119, 110, 32, 115, 108, 111, 112, 105, 110, 103, 32, 104, 97, 108, 108, 0 }; +const uint8_t loctxt_7[] = { +108, 97, 114, 103, 101, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_8[] = { +108, 97, 114, 103, 101, 32, 56, 32, 115, 105, 100, 101, 100, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_9[] = { +114, 111, 121, 97, 108, 32, 97, 110, 116, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 115, 104, 111, 114, 101, 32, 111, 102, 32, 97, 32, 108, 97, 107, 101, 0 }; +const uint8_t loctxt_11[] = { +102, 111, 114, 101, 115, 116, 0 }; +const uint8_t loctxt_12[] = { +109, 97, 122, 101, 32, 111, 102, 32, 112, 105, 116, 115, 0 }; +const uint8_t loctxt_13[] = { +109, 97, 122, 101, 32, 111, 102, 32, 112, 105, 116, 115, 0 }; +const uint8_t loctxt_14[] = { +109, 97, 122, 101, 32, 111, 102, 32, 112, 105, 116, 115, 0 }; +const uint8_t loctxt_15[] = { +109, 97, 122, 101, 32, 111, 102, 32, 112, 105, 116, 115, 0 }; +const uint8_t loctxt_16[] = { +109, 97, 122, 101, 32, 111, 102, 32, 112, 105, 116, 115, 0 }; +const uint8_t loctxt_17[] = { +109, 97, 122, 101, 32, 111, 102, 32, 112, 105, 116, 115, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 97, 32, 118, 101, 114, 121, 32, 100, 101, 101, 112, 32, 99, 104, 97, 115, 109, 46, 32, 72, 105, 103, 104, 32, 97, 98, 111, 118, 101, 32, 109, 101, 32, 105, 115, 10, 97, 32, 112, 97, 105, 114, 32, 111, 102, 32, 108, 101, 100, 103, 101, 115, 46, 32, 79, 110, 101, 32, 104, 97, 115, 32, 97, 32, 98, 114, 105, 99, 107, 101, 100, 32, 117, 112, 32, 119, 105, 110, 100, 111, 119, 32, 97, 99, 114, 111, 115, 115, 32, 105, 116, 115, 32, 102, 97, 99, 101, 10, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 102, 97, 99, 101, 115, 32, 97, 32, 84, 104, 114, 111, 110, 101, 45, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_19[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 108, 101, 100, 103, 101, 32, 98, 121, 32, 97, 32, 99, 104, 97, 115, 109, 46, 32, 65, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 32, 105, 115, 10, 116, 104, 101, 32, 84, 104, 114, 111, 110, 101, 45, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_20[] = { +114, 111, 121, 97, 108, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_21[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 108, 101, 100, 103, 101, 32, 98, 121, 32, 97, 32, 84, 104, 114, 111, 110, 101, 45, 114, 111, 111, 109, 10, 65, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 32, 105, 115, 32, 97, 110, 111, 116, 104, 101, 114, 32, 108, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_22[] = { +116, 104, 114, 111, 110, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_23[] = { +115, 117, 110, 110, 121, 32, 109, 101, 97, 100, 111, 119, 0 }; +const uint8_t loctxt_24[] = { +42, 73, 32, 116, 104, 105, 110, 107, 32, 73, 39, 109, 32, 105, 110, 32, 114, 101, 97, 108, 32, 116, 114, 111, 117, 98, 108, 101, 32, 110, 111, 119, 46, 32, 84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 102, 101, 108, 108, 111, 119, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 10, 97, 32, 112, 105, 116, 99, 104, 102, 111, 114, 107, 32, 97, 110, 100, 32, 112, 111, 105, 110, 116, 101, 100, 32, 116, 97, 105, 108, 46, 32, 46, 46, 46, 79, 104, 32, 72, 101, 108, 108, 33, 0 }; +const uint8_t loctxt_25[] = { +104, 105, 100, 100, 101, 110, 32, 103, 114, 111, 118, 101, 0 }; +const uint8_t loctxt_26[] = { +113, 117, 105, 99, 107, 45, 115, 97, 110, 100, 32, 98, 111, 103, 0 }; +const uint8_t loctxt_27[] = { +77, 101, 109, 111, 114, 121, 32, 99, 104, 105, 112, 32, 111, 102, 32, 97, 32, 67, 79, 77, 80, 85, 84, 69, 82, 33, 10, 73, 32, 116, 111, 111, 107, 32, 97, 32, 119, 114, 111, 110, 103, 32, 116, 117, 114, 110, 33, 0 }; +const uint8_t loctxt_28[] = { +116, 111, 112, 32, 111, 102, 32, 97, 110, 32, 111, 97, 107, 46, 10, 84, 111, 32, 116, 104, 101, 32, 69, 97, 115, 116, 32, 73, 32, 115, 101, 101, 32, 97, 32, 109, 101, 97, 100, 111, 119, 44, 32, 98, 101, 121, 111, 110, 100, 32, 116, 104, 97, 116, 32, 97, 32, 108, 97, 107, 101, 46, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 66, 79, 84, 84, 79, 77, 76, 69, 83, 83, 32, 104, 111, 108, 101, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 101, 100, 103, 101, 32, 106, 117, 115, 116, 32, 98, 101, 108, 111, 119, 32, 116, 104, 101, 32, 114, 105, 109, 32, 111, 102, 32, 116, 104, 101, 32, 66, 79, 84, 84, 79, 77, 76, 69, 83, 83, 32, 104, 111, 108, 101, 46, 32, 73, 10, 100, 111, 110, 39, 116, 32, 116, 104, 105, 110, 107, 32, 73, 32, 119, 97, 110, 116, 32, 116, 111, 32, 103, 111, 32, 100, 111, 119, 110, 0 }; +const uint8_t loctxt_31[] = { +108, 111, 110, 103, 32, 116, 117, 110, 110, 101, 108, 46, 32, 73, 32, 104, 101, 97, 114, 32, 98, 117, 122, 122, 105, 110, 103, 32, 97, 104, 101, 97, 100, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 101, 110, 100, 108, 101, 115, 115, 32, 99, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_33[] = { +108, 97, 114, 103, 101, 32, 109, 105, 115, 116, 121, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 115, 116, 114, 97, 110, 103, 101, 10, 117, 110, 114, 101, 97, 100, 97, 98, 108, 101, 32, 108, 101, 116, 116, 101, 114, 115, 32, 111, 118, 101, 114, 32, 97, 108, 108, 32, 116, 104, 101, 32, 101, 120, 105, 116, 115, 46, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 7, 10, 1, 0, 24 } }, + { loctxt_1, { 23, 0, 29, 25, 0, 0 } }, + { loctxt_2, { 0, 0, 0, 0, 0, 1 } }, + { loctxt_3, { 0, 0, 0, 0, 1, 4 } }, + { loctxt_4, { 0, 0, 0, 0, 3, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 4, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 5, 7 } }, + { loctxt_7, { 31, 9, 0, 27, 6, 12 } }, + { loctxt_8, { 0, 31, 0, 0, 0, 0 } }, + { loctxt_9, { 7, 0, 0, 0, 20, 0 } }, + { loctxt_10, { 26, 29, 0, 23, 0, 0 } }, + { loctxt_11, { 11, 11, 23, 11, 0, 0 } }, + { loctxt_12, { 13, 15, 15, 0, 0, 13 } }, + { loctxt_13, { 0, 0, 0, 14, 12, 0 } }, + { loctxt_14, { 17, 12, 13, 16, 16, 17 } }, + { loctxt_15, { 12, 0, 13, 12, 13, 0 } }, + { loctxt_16, { 0, 17, 0, 0, 14, 17 } }, + { loctxt_17, { 17, 12, 12, 15, 14, 18 } }, + { loctxt_18, { 0, 0, 0, 0, 17, 0 } }, + { loctxt_19, { 0, 0, 0, 20, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 9 } }, + { loctxt_21, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_22, { 0, 0, 0, 21, 0, 0 } }, + { loctxt_23, { 0, 1, 10, 11, 0, 0 } }, + { loctxt_24, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 11, 0, 1, 0, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 0, 7, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 0, 0, 11 } }, + { loctxt_29, { 10, 0, 0, 1, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 29, 24 } }, + { loctxt_31, { 8, 7, 0, 0, 0, 0 } }, + { loctxt_32, { 32, 33, 32, 32, 32, 32 } }, + { loctxt_33, { 32, 24, 11, 24, 28, 24 } }, +}; +const uint8_t objinit[] = { + 0, + 4, + 4, + 2, + 0, + 1, + 10, + 1, + 10, + 0, + 3, + 10, + 3, + 0, + 2, + 3, + 5, + 0, + 1, + 18, + 0, + 0, + 1, + 8, + 8, + 21, + 0, + 23, + 30, + 17, + 18, + 0, + 20, + 23, + 18, + 0, + 0, + 22, + 21, + 0, + 9, + 0, + 1, + 0, + 0, + 0, + 25, + 26, + 0, + 0, + 14, + 33, + 0, + 10, + 17, + 0, + 0, + 25, + 11, + 12, + 0, + 0, + 29, + 29, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +71, 108, 111, 119, 105, 110, 103, 32, 42, 70, 73, 82, 69, 83, 84, 79, 78, 69, 42, 0 }; +const uint8_t objtxt_1[] = { +68, 97, 114, 107, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_2[] = { +42, 80, 111, 116, 32, 111, 102, 32, 82, 85, 66, 73, 69, 83, 42, 0 }; +const uint8_t objtxt_3[] = { +83, 112, 105, 100, 101, 114, 32, 119, 101, 98, 32, 119, 105, 116, 104, 32, 119, 114, 105, 116, 105, 110, 103, 32, 111, 110, 32, 105, 116, 0 }; +const uint8_t objtxt_4[] = { +45, 72, 79, 76, 76, 79, 87, 45, 32, 115, 116, 117, 109, 112, 32, 97, 110, 100, 32, 114, 101, 109, 97, 105, 110, 115, 32, 111, 102, 32, 97, 32, 102, 101, 108, 108, 101, 100, 32, 116, 114, 101, 101, 0 }; +const uint8_t objtxt_5[] = { +67, 121, 112, 114, 101, 115, 115, 32, 116, 114, 101, 101, 0 }; +const uint8_t objtxt_6[] = { +87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_7[] = { +69, 118, 105, 108, 32, 115, 109, 101, 108, 108, 105, 110, 103, 32, 109, 117, 100, 0 }; +const uint8_t objtxt_8[] = { +42, 71, 79, 76, 68, 69, 78, 32, 70, 73, 83, 72, 42, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 98, 114, 97, 115, 115, 32, 108, 97, 109, 112, 0 }; +const uint8_t objtxt_10[] = { +79, 108, 100, 32, 102, 97, 115, 104, 105, 111, 110, 101, 100, 32, 98, 114, 97, 115, 115, 32, 108, 97, 109, 112, 0 }; +const uint8_t objtxt_11[] = { +82, 117, 115, 116, 121, 32, 97, 120, 101, 32, 40, 77, 97, 103, 105, 99, 32, 119, 111, 114, 100, 32, 34, 66, 85, 78, 89, 79, 78, 34, 32, 111, 110, 32, 105, 116, 41, 0 }; +const uint8_t objtxt_12[] = { +87, 97, 116, 101, 114, 32, 105, 110, 32, 98, 111, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_13[] = { +69, 109, 112, 116, 121, 32, 98, 111, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_14[] = { +82, 105, 110, 103, 32, 111, 102, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 107, 101, 121, 115, 0 }; +const uint8_t objtxt_15[] = { +83, 105, 103, 110, 32, 34, 76, 101, 97, 118, 101, 32, 42, 84, 82, 69, 65, 83, 85, 82, 69, 83, 42, 32, 104, 101, 114, 101, 44, 32, 116, 104, 101, 110, 32, 115, 97, 121, 58, 32, 83, 67, 79, 82, 69, 34, 0 }; +const uint8_t objtxt_16[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_17[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 97, 32, 104, 97, 108, 108, 119, 97, 121, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_18[] = { +83, 119, 97, 109, 112, 32, 103, 97, 115, 0 }; +const uint8_t objtxt_19[] = { +42, 71, 79, 76, 68, 69, 78, 32, 78, 69, 84, 42, 0 }; +const uint8_t objtxt_20[] = { +67, 104, 105, 103, 103, 101, 114, 32, 98, 105, 116, 101, 115, 0 }; +const uint8_t objtxt_21[] = { +73, 110, 102, 101, 99, 116, 101, 100, 32, 99, 104, 105, 103, 103, 101, 114, 32, 98, 105, 116, 101, 115, 0 }; +const uint8_t objtxt_22[] = { +80, 97, 116, 99, 104, 101, 115, 32, 111, 102, 32, 34, 79, 73, 76, 89, 34, 32, 115, 108, 105, 109, 101, 0 }; +const uint8_t objtxt_23[] = { +42, 82, 79, 89, 65, 76, 32, 72, 79, 78, 69, 89, 42, 0 }; +const uint8_t objtxt_24[] = { +76, 97, 114, 103, 101, 32, 97, 102, 114, 105, 99, 97, 110, 32, 98, 101, 101, 115, 0 }; +const uint8_t objtxt_25[] = { +86, 101, 114, 121, 32, 116, 104, 105, 110, 32, 98, 108, 97, 99, 107, 32, 98, 101, 97, 114, 0 }; +const uint8_t objtxt_26[] = { +66, 101, 101, 115, 32, 105, 110, 32, 97, 32, 98, 111, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_27[] = { +76, 97, 114, 103, 101, 32, 115, 108, 101, 101, 112, 105, 110, 103, 32, 100, 114, 97, 103, 111, 110, 0 }; +const uint8_t objtxt_28[] = { +70, 108, 105, 110, 116, 32, 38, 32, 115, 116, 101, 101, 108, 0 }; +const uint8_t objtxt_29[] = { +42, 84, 104, 105, 99, 107, 32, 80, 69, 82, 83, 73, 65, 78, 32, 82, 85, 71, 42, 0 }; +const uint8_t objtxt_30[] = { +83, 105, 103, 110, 58, 32, 34, 109, 97, 103, 105, 99, 32, 119, 111, 114, 100, 39, 115, 32, 65, 87, 65, 89, 33, 32, 76, 111, 111, 107, 32, 108, 97, 46, 46, 46, 34, 10, 40, 82, 101, 115, 116, 32, 111, 102, 32, 115, 105, 103, 110, 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 41, 0 }; +const uint8_t objtxt_31[] = { +68, 105, 115, 116, 101, 110, 100, 101, 100, 32, 103, 97, 115, 32, 98, 108, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_32[] = { +66, 114, 105, 99, 107, 101, 100, 32, 117, 112, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_33[] = { +83, 105, 103, 110, 32, 104, 101, 114, 101, 32, 115, 97, 121, 115, 32, 34, 73, 110, 32, 109, 97, 110, 121, 32, 99, 97, 115, 101, 115, 32, 109, 117, 100, 32, 105, 115, 32, 103, 111, 111, 100, 46, 32, 73, 110, 32, 111, 116, 104, 101, 114, 115, 46, 46, 46, 34, 0 }; +const uint8_t objtxt_34[] = { +83, 116, 114, 101, 97, 109, 32, 111, 102, 32, 108, 97, 118, 97, 0 }; +const uint8_t objtxt_35[] = { +66, 114, 105, 99, 107, 101, 100, 32, 117, 112, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, 116, 104, 32, 97, 32, 104, 111, 108, 101, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t objtxt_36[] = { +76, 111, 111, 115, 101, 32, 102, 105, 114, 101, 32, 98, 114, 105, 99, 107, 115, 0 }; +const uint8_t objtxt_37[] = { +42, 71, 79, 76, 68, 32, 67, 82, 79, 87, 78, 42, 0 }; +const uint8_t objtxt_38[] = { +42, 77, 65, 71, 73, 67, 32, 77, 73, 82, 82, 79, 82, 42, 0 }; +const uint8_t objtxt_39[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 98, 101, 97, 114, 0 }; +const uint8_t objtxt_40[] = { +69, 109, 112, 116, 121, 32, 119, 105, 110, 101, 32, 98, 108, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_41[] = { +66, 114, 111, 107, 101, 110, 32, 103, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_42[] = { +67, 104, 105, 103, 103, 101, 114, 115, 0 }; +const uint8_t objtxt_43[] = { +83, 108, 105, 103, 104, 116, 108, 121, 32, 119, 111, 111, 122, 121, 32, 98, 101, 97, 114, 0 }; +const uint8_t objtxt_44[] = { +42, 68, 82, 65, 71, 79, 78, 32, 69, 71, 71, 83, 42, 32, 40, 118, 101, 114, 121, 32, 114, 97, 114, 101, 41, 0 }; +const uint8_t objtxt_45[] = { +76, 97, 118, 97, 32, 115, 116, 114, 101, 97, 109, 32, 119, 105, 116, 104, 32, 98, 114, 105, 99, 107, 32, 100, 97, 109, 0 }; +const uint8_t objtxt_46[] = { +42, 74, 69, 87, 69, 76, 69, 68, 32, 70, 82, 85, 73, 84, 42, 0 }; +const uint8_t objtxt_47[] = { +42, 83, 109, 97, 108, 108, 32, 115, 116, 97, 116, 117, 101, 32, 111, 102, 32, 97, 32, 66, 76, 85, 69, 32, 79, 88, 42, 0 }; +const uint8_t objtxt_48[] = { +42, 68, 73, 65, 77, 79, 78, 68, 32, 82, 73, 78, 71, 42, 0 }; +const uint8_t objtxt_49[] = { +42, 68, 73, 65, 77, 79, 78, 68, 32, 66, 82, 65, 67, 69, 76, 69, 84, 42, 0 }; +const uint8_t objtxt_50[] = { +83, 116, 114, 97, 110, 103, 101, 32, 115, 99, 114, 97, 116, 99, 104, 105, 110, 103, 115, 32, 111, 110, 32, 114, 111, 99, 107, 32, 115, 97, 121, 115, 58, 32, 34, 65, 76, 65, 68, 73, 78, 32, 119, 97, 115, 32, 104, 101, 114, 101, 34, 0 }; +const uint8_t objtxt_51[] = { +83, 105, 103, 110, 32, 115, 97, 121, 115, 32, 34, 76, 73, 77, 66, 79, 46, 32, 70, 105, 110, 100, 32, 114, 105, 103, 104, 116, 32, 101, 120, 105, 116, 32, 97, 110, 100, 32, 108, 105, 118, 101, 32, 97, 103, 97, 105, 110, 33, 34, 0 }; +const uint8_t objtxt_52[] = { +83, 109, 111, 107, 105, 110, 103, 32, 104, 111, 108, 101, 46, 32, 112, 105, 101, 99, 101, 115, 32, 111, 102, 32, 100, 114, 97, 103, 111, 110, 32, 97, 110, 100, 32, 103, 111, 114, 101, 46, 0 }; +const uint8_t objtxt_53[] = { +83, 105, 103, 110, 32, 115, 97, 121, 115, 32, 34, 78, 111, 32, 115, 119, 105, 109, 109, 105, 110, 103, 32, 97, 108, 108, 111, 119, 101, 100, 32, 104, 101, 114, 101, 34, 0 }; +const uint8_t objtxt_54[] = { +65, 114, 114, 111, 119, 32, 112, 111, 105, 110, 116, 105, 110, 103, 32, 100, 111, 119, 110, 0 }; +const uint8_t objtxt_55[] = { +68, 101, 97, 100, 32, 102, 105, 115, 104, 0 }; +const uint8_t objtxt_56[] = { +42, 70, 73, 82, 69, 83, 84, 79, 78, 69, 42, 32, 40, 99, 111, 108, 100, 32, 110, 111, 119, 41, 0 }; +const uint8_t objtxt_57[] = { +83, 105, 103, 110, 32, 115, 97, 121, 115, 32, 34, 80, 97, 117, 108, 39, 115, 32, 112, 108, 97, 99, 101, 34, 0 }; +const uint8_t objtxt_58[] = { +84, 114, 101, 101, 115, 0 }; +const uint8_t objtxt_59[] = { +83, 105, 103, 110, 32, 104, 101, 114, 101, 32, 115, 97, 121, 115, 32, 34, 79, 112, 112, 111, 115, 105, 116, 101, 32, 111, 102, 32, 76, 73, 71, 72, 84, 32, 105, 115, 32, 85, 78, 76, 73, 71, 72, 84, 34, 0 }; +const uint8_t objtxt_60[] = { +69, 109, 112, 116, 121, 32, 108, 97, 109, 112, 0 }; +const uint8_t objtxt_61[] = { +77, 117, 100, 100, 121, 32, 119, 111, 114, 116, 104, 108, 101, 115, 115, 32, 111, 108, 100, 32, 114, 117, 103, 0 }; +const uint8_t objtxt_62[] = { +76, 97, 114, 103, 101, 32, 111, 117, 116, 100, 111, 111, 114, 32, 65, 100, 118, 101, 114, 116, 105, 115, 101, 109, 101, 110, 116, 0 }; +const uint8_t objtxt_63[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_64[] = { +0 }; +const uint8_t objtxt_65[] = { +0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_2[] = { +67, 104, 111, 112, 32, 39, 101, 114, 32, 100, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_3[] = { +66, 79, 89, 32, 116, 104, 97, 116, 32, 114, 101, 97, 108, 108, 121, 32, 104, 105, 116, 32, 116, 104, 101, 32, 115, 112, 111, 116, 33, 0 }; +const uint8_t msgtxt_4[] = { +68, 114, 97, 103, 111, 110, 32, 115, 109, 101, 108, 108, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 46, 32, 65, 119, 97, 107, 101, 110, 115, 32, 38, 32, 97, 116, 116, 97, 99, 107, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_5[] = { +76, 111, 99, 107, 32, 115, 104, 97, 116, 116, 101, 114, 115, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 99, 97, 110, 39, 116, 32, 105, 116, 115, 32, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_7[] = { +84, 73, 77, 66, 69, 82, 46, 32, 83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 101, 108, 108, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 116, 114, 101, 101, 32, 116, 111, 112, 32, 38, 32, 118, 97, 110, 105, 115, 104, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 115, 119, 97, 109, 112, 0 }; +const uint8_t msgtxt_8[] = { +84, 73, 77, 66, 69, 82, 33, 0 }; +const uint8_t msgtxt_9[] = { +76, 97, 109, 112, 32, 105, 115, 32, 111, 102, 102, 0 }; +const uint8_t msgtxt_10[] = { +76, 97, 109, 112, 32, 98, 117, 114, 110, 115, 32, 119, 105, 116, 104, 32, 97, 32, 99, 111, 108, 100, 32, 102, 108, 97, 109, 101, 108, 101, 115, 115, 32, 98, 108, 117, 101, 32, 103, 108, 111, 119, 46, 0 }; +const uint8_t msgtxt_11[] = { +73, 39, 109, 32, 98, 105, 116, 32, 98, 121, 32, 97, 32, 115, 112, 105, 100, 101, 114, 0 }; +const uint8_t msgtxt_12[] = { +10, 77, 121, 32, 99, 104, 105, 103, 103, 101, 114, 32, 98, 105, 116, 101, 115, 32, 97, 114, 101, 32, 110, 111, 119, 32, 73, 78, 70, 69, 67, 84, 69, 68, 33, 10, 0 }; +const uint8_t msgtxt_13[] = { +77, 121, 32, 98, 105, 116, 101, 115, 32, 104, 97, 118, 101, 32, 114, 111, 116, 116, 101, 100, 32, 109, 121, 32, 119, 104, 111, 108, 101, 32, 98, 111, 100, 121, 33, 0 }; +const uint8_t msgtxt_14[] = { +66, 101, 97, 114, 32, 101, 97, 116, 115, 32, 116, 104, 101, 32, 104, 111, 110, 101, 121, 32, 97, 110, 100, 32, 102, 97, 108, 108, 115, 32, 97, 115, 108, 101, 101, 112, 46, 0 }; +const uint8_t msgtxt_15[] = { +66, 101, 101, 115, 32, 115, 116, 105, 110, 103, 32, 109, 101, 0 }; +const uint8_t msgtxt_16[] = { +70, 105, 114, 115, 116, 32, 73, 32, 110, 101, 101, 100, 32, 97, 110, 32, 101, 109, 112, 116, 121, 32, 99, 111, 110, 116, 97, 105, 110, 101, 114, 46, 0 }; +const uint8_t msgtxt_17[] = { +84, 104, 101, 32, 98, 101, 101, 115, 32, 97, 108, 108, 32, 115, 117, 102, 102, 111, 99, 97, 116, 101, 100, 32, 97, 110, 100, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 101, 100, 0 }; +const uint8_t msgtxt_18[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 73, 39, 109, 32, 104, 111, 108, 100, 105, 110, 103, 32, 118, 105, 98, 114, 97, 116, 101, 115, 32, 97, 110, 100, 46, 46, 46, 0 }; +const uint8_t msgtxt_19[] = { +110, 111, 116, 104, 105, 110, 103, 32, 116, 111, 32, 108, 105, 103, 104, 116, 32, 105, 116, 32, 119, 105, 116, 104, 0 }; +const uint8_t msgtxt_20[] = { +71, 97, 115, 32, 98, 108, 97, 100, 100, 101, 114, 32, 98, 108, 101, 119, 32, 117, 112, 0 }; +const uint8_t msgtxt_21[] = { +105, 110, 32, 109, 121, 32, 104, 97, 110, 100, 115, 33, 0 }; +const uint8_t msgtxt_22[] = { +103, 97, 115, 32, 110, 101, 101, 100, 115, 32, 116, 111, 32, 98, 101, 32, 99, 111, 110, 116, 97, 105, 110, 101, 100, 32, 98, 101, 102, 111, 114, 101, 32, 105, 116, 32, 119, 105, 108, 108, 32, 98, 117, 114, 110, 0 }; +const uint8_t msgtxt_23[] = { +71, 97, 115, 32, 100, 105, 115, 115, 105, 112, 97, 116, 101, 115, 46, 32, 40, 73, 32, 116, 104, 105, 110, 107, 32, 121, 111, 117, 32, 98, 108, 101, 119, 32, 105, 116, 41, 0 }; +const uint8_t msgtxt_24[] = { +84, 104, 97, 116, 32, 119, 111, 110, 39, 116, 32, 105, 103, 110, 105, 116, 101, 0 }; +const uint8_t msgtxt_25[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_26[] = { +66, 101, 97, 114, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_27[] = { +34, 68, 111, 110, 39, 116, 32, 119, 97, 115, 116, 101, 32, 104, 111, 110, 101, 121, 44, 32, 103, 101, 116, 32, 109, 97, 100, 32, 105, 110, 115, 116, 101, 97, 100, 33, 32, 68, 97, 109, 32, 108, 97, 118, 97, 33, 63, 34, 0 }; +const uint8_t msgtxt_28[] = { +66, 101, 101, 115, 32, 109, 97, 100, 100, 101, 110, 32, 98, 101, 97, 114, 44, 32, 98, 101, 97, 114, 32, 116, 104, 101, 110, 32, 97, 116, 116, 97, 99, 107, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_29[] = { +73, 116, 32, 115, 111, 97, 107, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_30[] = { +73, 110, 32, 50, 32, 119, 111, 114, 100, 115, 32, 116, 101, 108, 108, 32, 109, 101, 32, 97, 116, 32, 119, 104, 97, 116, 46, 46, 46, 108, 105, 107, 101, 58, 32, 65, 84, 32, 84, 82, 69, 69, 0 }; +const uint8_t msgtxt_31[] = { +79, 72, 32, 78, 79, 46, 46, 46, 32, 66, 101, 97, 114, 32, 100, 111, 100, 103, 101, 115, 46, 46, 46, 32, 67, 82, 65, 83, 72, 33, 0 }; +const uint8_t msgtxt_32[] = { +73, 116, 115, 32, 104, 101, 97, 118, 121, 33, 0 }; +const uint8_t msgtxt_33[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 115, 32, 116, 111, 111, 32, 104, 101, 97, 118, 121, 46, 32, 73, 32, 102, 97, 108, 108, 46, 0 }; +const uint8_t msgtxt_34[] = { +84, 111, 32, 115, 116, 111, 112, 32, 103, 97, 109, 101, 32, 115, 97, 121, 32, 81, 85, 73, 84, 0 }; +const uint8_t msgtxt_35[] = { +77, 105, 114, 114, 111, 114, 32, 104, 105, 116, 115, 32, 102, 108, 111, 111, 114, 32, 97, 110, 100, 32, 115, 104, 97, 116, 116, 101, 114, 115, 32, 105, 110, 116, 111, 32, 97, 32, 77, 73, 76, 76, 73, 79, 78, 32, 112, 105, 101, 99, 101, 115, 0 }; +const uint8_t msgtxt_36[] = { +77, 105, 114, 114, 111, 114, 32, 108, 97, 110, 100, 115, 32, 115, 111, 102, 116, 108, 121, 32, 111, 110, 32, 114, 117, 103, 44, 32, 108, 105, 103, 104, 116, 115, 32, 117, 112, 32, 97, 110, 100, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_37[] = { +89, 111, 117, 32, 108, 111, 115, 116, 32, 42, 65, 76, 76, 42, 32, 116, 114, 101, 97, 115, 117, 114, 101, 115, 46, 0 }; +const uint8_t msgtxt_38[] = { +73, 39, 109, 32, 110, 111, 116, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 97, 120, 44, 32, 116, 97, 107, 101, 32, 105, 110, 118, 101, 110, 116, 111, 114, 121, 33, 0 }; +const uint8_t msgtxt_39[] = { +73, 116, 32, 100, 111, 101, 115, 110, 39, 116, 32, 115, 101, 101, 109, 32, 116, 111, 32, 98, 111, 116, 104, 101, 114, 32, 104, 105, 109, 32, 97, 116, 32, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_40[] = { +84, 104, 101, 32, 109, 117, 100, 32, 100, 114, 105, 101, 100, 32, 117, 112, 32, 97, 110, 100, 32, 102, 101, 108, 108, 32, 111, 102, 102, 46, 0 }; +const uint8_t msgtxt_41[] = { +66, 101, 97, 114, 32, 105, 115, 32, 115, 111, 32, 115, 116, 97, 114, 116, 108, 101, 100, 32, 116, 104, 97, 116, 32, 104, 101, 32, 70, 69, 76, 76, 32, 111, 102, 102, 32, 116, 104, 101, 32, 108, 101, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_42[] = { +34, 32, 68, 82, 65, 71, 79, 78, 32, 83, 84, 73, 78, 71, 32, 34, 32, 97, 110, 100, 32, 102, 97, 100, 101, 115, 46, 32, 73, 32, 100, 111, 110, 39, 116, 32, 103, 101, 116, 32, 105, 116, 44, 32, 73, 32, 104, 111, 112, 101, 32, 121, 111, 117, 32, 100, 111, 46, 0 }; +const uint8_t msgtxt_43[] = { +84, 104, 101, 32, 98, 101, 101, 115, 32, 97, 116, 116, 97, 99, 107, 32, 116, 104, 101, 32, 100, 114, 97, 103, 111, 110, 32, 119, 104, 105, 99, 104, 32, 103, 101, 116, 115, 32, 115, 111, 32, 97, 110, 110, 111, 121, 101, 100, 32, 105, 116, 32, 103, 101, 116, 115, 32, 117, 112, 10, 97, 110, 100, 32, 102, 108, 121, 115, 32, 97, 119, 97, 121, 46, 46, 46, 0 }; +const uint8_t msgtxt_44[] = { +76, 97, 109, 112, 32, 105, 115, 32, 110, 111, 119, 32, 102, 117, 108, 108, 32, 38, 32, 108, 105, 116, 0 }; +const uint8_t msgtxt_45[] = { +10, 73, 39, 109, 32, 98, 105, 116, 116, 101, 110, 32, 98, 121, 32, 99, 104, 105, 103, 103, 101, 114, 115, 46, 10, 0 }; +const uint8_t msgtxt_46[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 116, 104, 101, 114, 101, 32, 97, 108, 108, 32, 114, 105, 103, 104, 116, 33, 32, 77, 97, 121, 98, 101, 32, 73, 32, 115, 104, 111, 117, 108, 100, 32, 103, 111, 32, 116, 104, 101, 114, 101, 63, 0 }; +const uint8_t msgtxt_47[] = { +77, 97, 121, 98, 101, 32, 105, 102, 32, 73, 32, 116, 104, 114, 101, 119, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 63, 46, 46, 46, 0 }; +const uint8_t msgtxt_48[] = { +84, 111, 111, 32, 100, 114, 121, 44, 32, 116, 104, 101, 32, 102, 105, 115, 104, 32, 100, 105, 101, 100, 46, 0 }; +const uint8_t msgtxt_49[] = { +65, 32, 103, 108, 111, 119, 105, 110, 103, 32, 71, 101, 110, 105, 101, 32, 97, 112, 112, 101, 97, 114, 115, 44, 32, 100, 114, 111, 112, 115, 32, 115, 111, 109, 101, 104, 116, 105, 110, 103, 44, 32, 116, 104, 101, 110, 32, 118, 97, 110, 105, 115, 104, 101, 115, 46, 0 }; +const uint8_t msgtxt_50[] = { +65, 32, 103, 108, 111, 119, 105, 110, 103, 32, 71, 101, 110, 105, 101, 32, 97, 112, 112, 101, 97, 114, 115, 44, 32, 115, 97, 121, 115, 32, 34, 66, 111, 121, 32, 121, 111, 117, 39, 114, 101, 32, 115, 101, 108, 102, 105, 115, 104, 34, 44, 32, 116, 97, 107, 101, 115, 10, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 97, 110, 100, 32, 116, 104, 101, 110, 32, 109, 97, 107, 101, 115, 32, 34, 77, 69, 34, 32, 118, 97, 110, 105, 115, 104, 33, 0 }; +const uint8_t msgtxt_51[] = { +78, 111, 44, 32, 105, 116, 115, 32, 116, 111, 111, 32, 104, 111, 116, 46, 0 }; +const uint8_t msgtxt_52[] = { +78, 111, 116, 32, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_53[] = { +84, 114, 121, 32, 116, 104, 101, 32, 115, 119, 97, 109, 112, 0 }; +const uint8_t msgtxt_54[] = { +83, 105, 122, 122, 108, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_55[] = { +84, 114, 121, 32, 45, 45, 62, 32, 34, 76, 79, 79, 75, 44, 32, 74, 85, 77, 80, 44, 32, 83, 87, 73, 77, 44, 32, 67, 76, 73, 77, 66, 44, 32, 70, 73, 78, 68, 44, 32, 84, 65, 75, 69, 44, 32, 83, 67, 79, 82, 69, 44, 32, 68, 82, 79, 80, 34, 10, 97, 110, 100, 32, 97, 110, 121, 32, 111, 116, 104, 101, 114, 32, 118, 101, 114, 98, 115, 32, 121, 111, 117, 32, 99, 97, 110, 32, 116, 104, 105, 110, 107, 32, 111, 102, 46, 46, 46, 0 }; +const uint8_t msgtxt_56[] = { +84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 111, 110, 108, 121, 32, 51, 32, 119, 97, 121, 115, 32, 116, 111, 32, 119, 97, 107, 101, 32, 116, 104, 101, 32, 68, 114, 97, 103, 111, 110, 33, 0 }; +const uint8_t msgtxt_57[] = { +82, 101, 109, 101, 109, 98, 101, 114, 32, 121, 111, 117, 32, 99, 97, 110, 32, 97, 108, 119, 97, 121, 115, 32, 115, 97, 121, 32, 34, 72, 69, 76, 80, 34, 0 }; +const uint8_t msgtxt_58[] = { +82, 101, 97, 100, 32, 116, 104, 101, 32, 115, 105, 103, 110, 32, 105, 110, 32, 116, 104, 101, 32, 109, 101, 97, 100, 111, 119, 33, 0 }; +const uint8_t msgtxt_59[] = { +89, 111, 117, 32, 109, 97, 121, 32, 110, 101, 101, 100, 32, 116, 111, 32, 115, 97, 121, 32, 109, 97, 103, 105, 99, 32, 119, 111, 114, 100, 115, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_60[] = { +65, 32, 118, 111, 105, 99, 101, 32, 66, 79, 79, 79, 79, 77, 83, 32, 111, 117, 116, 58, 0 }; +const uint8_t msgtxt_61[] = { +112, 108, 101, 97, 115, 101, 32, 108, 101, 97, 118, 101, 32, 105, 116, 32, 97, 108, 111, 110, 101, 0 }; +const uint8_t msgtxt_62[] = { +83, 111, 114, 114, 121, 44, 32, 73, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 116, 104, 114, 111, 119, 32, 116, 104, 101, 32, 97, 120, 46, 0 }; +const uint8_t msgtxt_63[] = { +77, 101, 100, 105, 99, 105, 110, 101, 32, 105, 115, 32, 103, 111, 111, 100, 32, 102, 111, 114, 32, 98, 105, 116, 101, 115, 46, 0 }; +const uint8_t msgtxt_64[] = { +73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 105, 116, 32, 105, 115, 0 }; +const uint8_t msgtxt_65[] = { +10, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 110, 117, 109, 98, 101, 114, 58, 32, 49, 32, 34, 65, 68, 86, 69, 78, 84, 85, 82, 69, 76, 65, 78, 68, 34, 46, 10, 73, 110, 32, 116, 104, 105, 115, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 121, 111, 117, 39, 114, 101, 32, 116, 111, 32, 102, 105, 110, 100, 32, 42, 84, 82, 69, 65, 83, 85, 82, 69, 83, 42, 32, 38, 32, 115, 116, 111, 114, 101, 32, 116, 104, 101, 109, 32, 97, 119, 97, 121, 46, 10, 10, 84, 111, 32, 115, 101, 101, 32, 104, 111, 119, 32, 119, 101, 108, 108, 32, 121, 111, 117, 39, 114, 101, 32, 100, 111, 105, 110, 103, 32, 115, 97, 121, 58, 32, 34, 83, 67, 79, 82, 69, 34, 0 }; +const uint8_t msgtxt_66[] = { +66, 108, 111, 119, 32, 105, 116, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_67[] = { +70, 105, 115, 104, 32, 104, 97, 118, 101, 32, 101, 115, 99, 97, 112, 101, 100, 32, 98, 97, 99, 107, 32, 116, 111, 32, 116, 104, 101, 32, 108, 97, 107, 101, 46, 0 }; +const uint8_t msgtxt_68[] = { +79, 75, 0 }; +const uint8_t msgtxt_69[] = { +72, 117, 104, 63, 32, 73, 32, 100, 111, 110, 39, 116, 32, 116, 104, 105, 110, 107, 32, 115, 111, 33, 0 }; +const uint8_t msgtxt_70[] = { +89, 111, 117, 32, 109, 105, 103, 104, 116, 32, 116, 114, 121, 32, 101, 120, 97, 109, 105, 110, 105, 110, 103, 32, 116, 104, 105, 110, 103, 115, 46, 46, 46, 0 }; +const uint8_t msgtxt_71[] = { +87, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_72[] = { +79, 75, 44, 32, 73, 32, 116, 104, 114, 101, 119, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_73[] = { +10, 67, 104, 101, 99, 107, 32, 119, 105, 116, 104, 32, 121, 111, 117, 114, 32, 102, 97, 118, 111, 114, 105, 116, 101, 32, 99, 111, 109, 112, 117, 116, 101, 114, 32, 100, 101, 97, 108, 101, 114, 32, 102, 111, 114, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 10, 112, 114, 111, 103, 114, 97, 109, 58, 32, 80, 73, 82, 65, 84, 69, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 46, 32, 73, 102, 32, 116, 104, 101, 121, 32, 100, 111, 110, 39, 116, 32, 99, 97, 114, 114, 121, 32, 34, 65, 68, 86, 69, 78, 84, 85, 82, 69, 34, 32, 104, 97, 118, 101, 10, 116, 104, 101, 109, 32, 99, 97, 108, 108, 58, 32, 49, 45, 51, 48, 53, 45, 56, 54, 50, 45, 54, 57, 49, 55, 32, 116, 111, 100, 97, 121, 33, 10, 0 }; +const uint8_t msgtxt_74[] = { +84, 104, 101, 32, 97, 120, 32, 118, 105, 98, 114, 97, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_75[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, +}; + + +const uint8_t status[] = { +/* AUTO 75 FISH ESCAPE*/ + 145, 75, + 1, 8, 6, 19, 0, 8, 0, 10, + 117, 62, +/* AUTO 10 DIE BITES*/ + 137, 10, + 1, 21, 7, 33, + 13, 61, +/* AUTO 10 BITE INFECT*/ + 146, 10, + 1, 20, 0, 21, 0, 20, 6, 7, + 12, 74, 59, +/* AUTO 8 BEES DIE*/ + 145, 8, + 3, 26, 0, 26, 0, 13, 9, 17, + 17, 72, +/* AUTO 100 HIT MIRROR*/ + 183, + 8, 5, 0, 38, 0, 41, 0, 21, 0, 5, + 55, 62, 60, 64, +/* AUTO 100 IN HADES*/ + 165, + 4, 24, + 37, 63, +/* AUTO 5 MUD OFF*/ + 145, 5, + 1, 7, 0, 7, 0, 1, 6, 12, + 40, 62, +/* AUTO 8 BIT CHIG*/ + 149, 8, + 6, 20, 6, 21, 0, 20, 2, 42, 6, 7, + 74, 45, +/* AUTO 8 BEE STING*/ + 137, 8, + 2, 24, 12, 7, + 15, 61, +/* AUTO 100 LITE*/ + 169, + 4, 5, 8, 15, + 57, 76, +/* AUTO 50 FISH DIE*/ + 146, 50, + 1, 8, 6, 12, 0, 8, 0, 55, + 48, 59, 52, +/* AUTO 100 MOVE OX*/ + 178, + 8, 7, 0, 7, 0, 47, 0, 25, + 60, 62, 66, +/* AUTO 30 GET CHIG*/ + 149, 30, + 1, 42, 6, 21, 6, 20, 0, 20, 6, 7, + 74, 45, +/* AUTO 50 MUD DRAGON*/ + 138, 50, + 2, 27, 3, 7, + 70, 4, 61, +/* AUTO 100 BLAST WALL*/ + 182, + 8, 12, 2, 32, 0, 36, 0, 32, 0, 35, + 53, 55, 53, +/* AUTO 100 BLAS DRAGON*/ + 177, + 8, 12, 2, 27, 0, 52, 0, 27, + 53, 55, +/* AUTO 100 1ST MIRROR CLUE*/ + 178, + 8, 1, 9, 2, 0, 1, 0, 2, + 42, 60, 58, +/* AUTO 100 BEAR MAD*/ + 174, + 8, 14, 0, 13, 0, 14, + 74, 60, 61, +/* AUTO 100 RESET BLAST*/ + 169, + 8, 12, 0, 12, + 64, 60, +/* AUTO 100 INTRO*/ + 171, + 9, 13, 0, 13, + 110, 58, 115, 107, +/* AUTO 100 2ND MIRROR CLUE*/ + 178, + 8, 1, 8, 2, 0, 1, 0, 2, + 27, 60, 60, +/* AUTO 100 DEAD LAMP*/ + 178, + 0, 16, 8, 16, 0, 60, 0, 9, + 60, 72, 76, +/* AUTO 100 MUDDY RUG*/ + 176, + 4, 26, 3, 29, 0, 29, 0, 61, + 72, +}; +const uint8_t actions[] = { +/* LOO LAV */ + 4, 29, 54, + 2, 34, + 46, +/* LOO TRE */ + 4, 29, 57, + 2, 4, + 46, +/* GET MUD */ + 19, 10, 21, + 2, 7, 1, 21, 0, 21, 0, 7, + 59, 52, 118, 3, +/* GET HON */ + 13, 10, 42, + 2, 23, 6, 7, 2, 24, + 15, 61, +/* GET MUD */ + 19, 10, 21, + 2, 7, 1, 20, 0, 20, 0, 7, + 59, 52, 118, 3, +/* DRO HON */ + 23, 18, 42, + 1, 23, 0, 23, 2, 25, 0, 39, 0, 25, + 59, 14, 53, 55, +/* DRO HON */ + 8, 18, 42, + 1, 23, 0, 23, + 53, +/* GET BEE */ + 9, 10, 23, + 2, 24, 6, 7, + 15, 61, +/* GET BEE */ + 12, 10, 23, + 2, 24, 1, 7, 6, 13, + 16, +/* GET BEE */ + 21, 10, 23, + 2, 24, 1, 7, 1, 13, 0, 13, 0, 26, + 72, 118, +/* GET INV */ + 0, 10, 33, + 66, +/* CRO LAV */ + 4, 56, 54, + 4, 18, + 51, +/* INV ANY */ + 0, 34, 0, + 66, +/* SAY AWA */ + 15, 48, 9, + 1, 29, 4, 17, 0, 23, + 54, 18, 57, 64, +/* LIG ANY */ + 4, 14, 0, + 6, 28, + 19, +/* LIG GAS */ + 15, 14, 25, + 1, 31, 1, 28, 0, 31, + 20, 21, 61, 59, +/* MAK HOL */ + 9, 58, 16, + 3, 26, 0, 17, + 58, 118, +/* LIG GAS */ + 19, 14, 25, + 2, 31, 1, 28, 0, 31, 0, 12, + 70, 55, 58, 20, +/* GO LED */ + 14, 1, 34, + 4, 20, 2, 35, 0, 19, + 54, 70, 64, +/* GET GAS */ + 8, 10, 25, + 4, 1, 6, 40, + 16, +/* GET GAS */ + 17, 10, 25, + 4, 1, 1, 40, 0, 40, 0, 31, + 72, 118, +/* DRO GAS */ + 14, 18, 25, + 1, 31, 0, 31, 0, 40, + 72, 118, 23, +/* LIG GAS */ + 8, 14, 25, + 2, 18, 1, 28, + 22, +/* FIN SWA */ + 0, 45, 53, + 114, +/* GO THR */ + 4, 1, 35, + 4, 19, + 25, +/* GET MIR */ + 13, 10, 10, + 2, 38, 0, 38, 5, 25, + 52, 118, +/* DRO MIR */ + 18, 18, 10, + 1, 38, 0, 38, 2, 29, 0, 1, + 53, 36, 58, +/* DRI FRU */ + 9, 42, 43, + 1, 46, 0, 46, + 3, 59, +/* GET WAT */ + 18, 10, 13, + 2, 6, 1, 13, 0, 13, 0, 12, + 59, 52, 118, +/* JUM ANY */ + 13, 6, 0, + 4, 19, 0, 21, 6, 36, + 54, 64, +/* JUM ANY */ + 9, 6, 0, + 4, 21, 0, 19, + 54, 64, +/* GO THR */ + 8, 1, 35, + 4, 21, 2, 25, + 26, +/* GO THR */ + 14, 1, 35, + 4, 21, 5, 25, 0, 22, + 54, 70, 64, +/* MAK LAV BUILD DAM*/ + 22, 58, 54, + 3, 36, 0, 0, 0, 34, 0, 45, 2, 34, + 72, 53, 76, +/* GO LAV */ + 4, 1, 54, + 4, 18, + 51, +/* DRO BEE */ + 23, 18, 23, + 1, 26, 2, 25, 0, 26, 0, 24, 0, 14, + 28, 59, 53, 58, +/* GET WAT */ + 8, 10, 13, + 2, 6, 6, 13, + 16, +/* REA WEB */ + 4, 38, 51, + 2, 3, + 2, +/* GO TRE */ + 10, 1, 57, + 0, 2, 2, 5, + 54, 70, 64, +/* DRO WAT */ + 18, 18, 13, + 1, 12, 0, 12, 0, 13, 7, 18, + 72, 118, 29, +/* FIL LAM */ + 19, 55, 17, + 3, 22, 1, 60, 0, 22, 0, 60, + 59, 59, 44, 69, +/* CHO TRE */ + 22, 8, 57, + 0, 5, 2, 5, 12, 14, 0, 4, 1, 11, + 55, 53, 7, +/* OPE DOO */ + 12, 69, 20, + 4, 5, 2, 16, 6, 14, + 6, +/* UNL DOO */ + 12, 37, 20, + 4, 5, 2, 16, 6, 14, + 6, +/* THR AXE */ + 14, 24, 11, + 1, 11, 0, 3, 0, 11, + 30, 58, 53, +/* OPE DOO */ + 18, 69, 20, + 2, 16, 1, 14, 0, 16, 0, 17, + 55, 53, 76, +/* CRO ANY */ + 0, 56, 0, + 25, +/* JUM ANY */ + 9, 6, 0, + 4, 19, 1, 36, + 33, 61, +/* DAM LAV */ + 22, 57, 54, + 3, 36, 0, 0, 0, 34, 0, 45, 2, 34, + 72, 53, 76, +/* GET BRI */ + 10, 10, 37, + 2, 36, 0, 36, + 52, 118, 32, +/* STO ANY */ + 0, 32, 0, + 34, +/* QUI ANY */ + 1, 26, 0, + 65, 63, +/* GET MIR */ + 8, 10, 10, + 2, 38, 2, 25, + 26, +/* DRO MIR */ + 18, 18, 10, + 1, 38, 5, 29, 0, 41, 0, 38, + 35, 53, 59, +/* AT BEA */ + 15, 7, 38, + 8, 3, 5, 38, 0, 3, + 122, 110, 111, 60, +/* AT DRA */ + 14, 7, 39, + 8, 3, 0, 3, 2, 27, + 122, 39, 60, +/* SCO ANY */ + 0, 33, 0, + 65, +/* HEL ANY */ + 7, 47, 0, + 1, 20, + 70, 110, 113, 105, +/* HEL ANY */ + 7, 47, 0, + 1, 21, + 70, 110, 113, 105, +/* GO LED */ + 4, 1, 34, + 4, 18, + 102, +/* GET LAV */ + 4, 10, 54, + 2, 34, + 51, +/* SCR ANY */ + 18, 51, 0, + 2, 25, 0, 43, 0, 18, 0, 25, + 41, 62, 55, +/* DRO BEE */ + 23, 18, 23, + 1, 26, 2, 27, 0, 24, 0, 44, 0, 27, + 53, 53, 55, 43, +/* AT WIN */ + 11, 7, 19, + 8, 3, 0, 3, + 60, 1, 110, 107, +/* OPE DOO */ + 4, 69, 20, + 2, 17, + 64, +/* GO HOL */ + 10, 1, 16, + 2, 35, 0, 19, + 70, 54, 64, +/* AT BEA */ + 23, 7, 38, + 8, 3, 0, 38, 0, 5, 0, 4, 2, 38, + 55, 58, 31, 60, +/* FIN AXE */ + 1, 45, 11, + 110, 114, +/* WAK ANY */ + 1, 36, 0, + 1, 47, +/* GO TRE */ + 10, 1, 57, + 2, 4, 0, 3, + 54, 70, 64, +/* CHO TRE */ + 22, 8, 57, + 2, 5, 1, 11, 0, 5, 0, 4, 1, 14, + 55, 53, 8, +/* ATT BEA */ + 5, 39, 38, + 2, 25, + 26, 47, +/* ATT DRA */ + 5, 39, 39, + 2, 27, + 39, 47, +/* DRI WAT */ + 14, 42, 13, + 1, 12, 0, 12, 0, 13, + 3, 59, 52, +/* DRI WAT */ + 4, 42, 13, + 2, 6, + 3, +/* DRI HON */ + 9, 42, 42, + 3, 23, 0, 23, + 3, 59, +/* AT DOO */ + 23, 7, 20, + 2, 16, 8, 3, 0, 16, 0, 17, 0, 3, + 55, 53, 5, 60, +/* SWI ANY */ + 8, 27, 0, + 4, 26, 10, 0, + 33, +/* SWI ANY */ + 14, 27, 0, + 4, 26, 11, 0, 0, 10, + 54, 70, 64, +/* CHO ANY */ + 4, 8, 0, + 6, 11, + 38, +/* SAY BUN */ + 23, 48, 32, + 3, 47, 1, 11, 0, 11, 0, 25, 0, 7, + 85, 18, 62, 58, +/* SAY BUN */ + 19, 48, 32, + 1, 11, 7, 26, 0, 11, 0, 25, + 85, 18, 62, 66, +/* RUB LAM */ + 4, 28, 17, + 3, 9, + 51, +/* GET MUD */ + 9, 10, 21, + 2, 7, 0, 7, + 52, 118, +/* RUB LAM */ + 18, 28, 17, + 3, 10, 9, 8, 0, 48, 0, 8, + 49, 53, 58, +/* RUB LAM */ + 8, 28, 17, + 3, 10, 8, 11, + 1, +/* RUB LAM */ + 19, 28, 17, + 3, 10, 8, 10, 0, 11, 0, 48, + 50, 58, 61, 59, +/* RUB LAM */ + 19, 28, 17, + 3, 10, 8, 9, 0, 10, 0, 49, + 50, 58, 61, 59, +/* RUB LAM */ + 18, 28, 17, + 3, 10, 8, 8, 0, 49, 0, 9, + 49, 53, 58, +/* SCR ANY */ + 14, 51, 0, + 1, 20, 0, 20, 0, 21, + 3, 12, 72, +/* SCR ANY */ + 6, 51, 0, + 1, 21, + 3, 13, 61, +/* SWI ANY */ + 4, 27, 0, + 7, 26, + 102, +/* WAV ANY */ + 0, 60, 0, + 1, +/* SAY BUN */ + 6, 48, 32, + 2, 11, + 118, 85, 124, +/* LIG LAM */ + 4, 14, 17, + 3, 9, + 10, +/* FIN TRE */ + 0, 45, 57, + 103, +/* DRO BEE */ + 18, 18, 23, + 1, 26, 0, 24, 0, 26, 0, 13, + 53, 72, 118, +/* FIN KEY */ + 0, 45, 30, + 103, +/* FIN MUD */ + 0, 45, 21, + 103, +/* AT SHO */ + 22, 7, 60, + 8, 3, 0, 3, 4, 26, 0, 11, 0, 10, + 60, 62, 118, +/* GO TRE */ + 10, 1, 57, + 4, 11, 0, 28, + 54, 70, 64, +/* HEL ANY */ + 6, 47, 0, + 4, 26, + 110, 105, 109, +/* HEL ANY */ + 5, 47, 0, + 4, 11, + 110, 105, +/* HEL ANY */ + 5, 47, 0, + 4, 19, + 110, 105, +/* HEL ANY */ + 5, 47, 0, + 4, 23, + 110, 106, +/* HEL ANY */ + 5, 47, 0, + 4, 13, + 110, 109, +/* HEL ANY */ + 5, 47, 0, + 4, 17, + 110, 109, +/* HEL ANY */ + 5, 47, 0, + 4, 15, + 110, 109, +/* HEL ANY */ + 5, 47, 0, + 4, 21, + 110, 105, +/* HEL ANY */ + 5, 47, 0, + 4, 8, + 110, 108, +/* UNL DOO */ + 17, 37, 20, + 1, 14, 2, 16, 0, 17, 0, 16, + 53, 55, +/* GO HAL */ + 11, 1, 56, + 2, 17, 0, 6, + 54, 56, 70, 64, +/* LIG LAM */ + 14, 14, 17, + 3, 10, 0, 10, 0, 9, + 72, 10, 76, +/* UNL LAM */ + 15, 37, 17, + 3, 9, 0, 9, 0, 10, + 72, 118, 9, 76, +/* GET WEB */ + 5, 10, 51, + 2, 3, + 11, 61, +/* GO HOL */ + 10, 1, 16, + 2, 52, 0, 24, + 54, 70, 64, +/* GET SIG */ + 1, 10, 49, + 110, 111, +/* LIG ANY */ + 8, 14, 0, + 1, 28, 5, 18, + 24, +/* SCR ANY */ + 0, 51, 0, + 1, +/* SAY AWA */ + 23, 48, 9, + 1, 29, 7, 17, 0, 17, 7, 33, 7, 26, + 54, 18, 56, 64, +/* HEL ANY */ + 5, 47, 0, + 4, 1, + 110, 105, +/* THR AXE */ + 4, 24, 11, + 6, 11, + 38, +/* HEL ANY */ + 6, 47, 0, + 4, 20, + 110, 116, 103, +/* SAY BUN */ + 2, 48, 32, + 118, 85, 1, +/* GO HOL */ + 10, 1, 16, + 4, 4, 0, 5, + 54, 70, 64, +/* GET HON */ + 9, 10, 42, + 2, 23, 0, 23, + 52, 118, +/* HEL ANY */ + 1, 47, 0, + 1, 120, +/* CHO ANY */ + 1, 8, 0, + 1, 47, +/* THR ANY */ + 0, 24, 0, + 112, +/* AT ANY */ + 10, 7, 0, + 8, 3, 0, 3, + 60, 122, 1, +/* SAV GAM */ + 1, 35, 65, + 118, 71, +/* RUB ANY */ + 0, 28, 0, + 1, +/* SAY ANY */ + 2, 48, 0, + 118, 85, 1, +/* DRI ANY */ + 0, 42, 0, + 119, +/* DRO WAT */ + 18, 18, 13, + 1, 12, 4, 18, 0, 12, 0, 13, + 104, 73, 72, +/* AUTO 0 */ + 200, + 2, 0, 0, 56, + 72, +/* GET FIR */ + 4, 10, 59, + 2, 0, + 51, +/* GET FIR */ + 9, 10, 59, + 2, 56, 0, 56, + 118, 52, +/* FIN ANY */ + 0, 45, 0, + 114, +/* REA ADV */ + 5, 38, 62, + 3, 62, + 70, 123, +/* LOO HOL */ + 0, 29, 16, + 46, +/* JUM ANY */ + 0, 6, 0, + 102, +/* ATT SPI */ + 0, 39, 18, + 114, +/* ATT ANY */ + 0, 39, 0, + 25, +/* LOO ANY */ + 2, 29, 0, + 118, 125, 76, +/* AT ANY */ + 0, 7, 0, + 121, +/* GO HOL */ + 9, 1, 16, + 4, 29, 0, 30, + 54, 76, + 255, +}; + + +const uint8_t verbs[] = { + /* AUT */ + 65, 85, 84, + /* GO */ + 71, 79, 32, + /* *ENT */ + 197, 78, 84, + /* *RUN */ + 210, 85, 78, + /* *WAL */ + 215, 65, 76, + /* *CLI */ + 195, 76, 73, + /* JUM */ + 74, 85, 77, + /* AT */ + 65, 84, 32, + /* CHO */ + 67, 72, 79, + /* *CUT */ + 195, 85, 84, + /* GET */ + 71, 69, 84, + /* *TAK */ + 212, 65, 75, + /* *PIC */ + 208, 73, 67, + /* *CAT */ + 195, 65, 84, + /* LIG */ + 76, 73, 71, + /* *. */ + 174, 32, 32, + /* *IGN */ + 201, 71, 78, + /* *BUR */ + 194, 85, 82, + /* DRO */ + 68, 82, 79, + /* *REL */ + 210, 69, 76, + /* *SPI */ + 211, 80, 73, + /* *LEA */ + 204, 69, 65, + /* *GIV */ + 199, 73, 86, + /* *POU */ + 208, 79, 85, + /* THR */ + 84, 72, 82, + /* *TOS */ + 212, 79, 83, + /* QUI */ + 81, 85, 73, + /* SWI */ + 83, 87, 73, + /* RUB */ + 82, 85, 66, + /* LOO */ + 76, 79, 79, + /* *EXA */ + 197, 88, 65, + /* *DES */ + 196, 69, 83, + /* STO */ + 83, 84, 79, + /* SCO */ + 83, 67, 79, + /* INV */ + 73, 78, 86, + /* SAV */ + 83, 65, 86, + /* WAK */ + 87, 65, 75, + /* UNL */ + 85, 78, 76, + /* REA */ + 82, 69, 65, + /* ATT */ + 65, 84, 84, + /* *SLA */ + 211, 76, 65, + /* *KIL */ + 203, 73, 76, + /* DRI */ + 68, 82, 73, + /* *EAT */ + 197, 65, 84, + /* . */ + 46, 32, 32, + /* FIN */ + 70, 73, 78, + /* *LOC */ + 204, 79, 67, + /* HEL */ + 72, 69, 76, + /* SAY */ + 83, 65, 89, + /* *SPE */ + 211, 80, 69, + /* *CAL */ + 195, 65, 76, + /* SCR */ + 83, 67, 82, + /* *YEL */ + 217, 69, 76, + /* *HOL */ + 200, 79, 76, + /* . */ + 46, 32, 32, + /* FIL */ + 70, 73, 76, + /* CRO */ + 67, 82, 79, + /* DAM */ + 68, 65, 77, + /* MAK */ + 77, 65, 75, + /* *BUI */ + 194, 85, 73, + /* WAV */ + 87, 65, 86, + /* *TIC */ + 212, 73, 67, + /* *KIC */ + 203, 73, 67, + /* *KIS */ + 203, 73, 83, + /* *TOU */ + 212, 79, 85, + /* *FEE */ + 198, 69, 69, + /* *FUC */ + 198, 85, 67, + /* *HIT */ + 200, 73, 84, + /* *POK */ + 208, 79, 75, + /* OPE */ + 79, 80, 69, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, + /* NORTH */ + 78, 79, 82, + /* SOUTH */ + 83, 79, 85, + /* EAST */ + 69, 65, 83, + /* WEST */ + 87, 69, 83, + /* UP */ + 85, 80, 32, + /* DOWN */ + 68, 79, 87, + /* NET */ + 78, 69, 84, + /* FIS */ + 70, 73, 83, + /* AWA */ + 65, 87, 65, + /* MIR */ + 77, 73, 82, + /* AXE */ + 65, 88, 69, + /* *AX */ + 193, 88, 32, + /* WAT */ + 87, 65, 84, + /* BOT */ + 66, 79, 84, + /* *CON */ + 195, 79, 78, + /* HOL */ + 72, 79, 76, + /* LAM */ + 76, 65, 77, + /* SPI */ + 83, 80, 73, + /* WIN */ + 87, 73, 78, + /* DOO */ + 68, 79, 79, + /* MUD */ + 77, 85, 68, + /* *MED */ + 205, 69, 68, + /* BEE */ + 66, 69, 69, + /* ROC */ + 82, 79, 67, + /* GAS */ + 71, 65, 83, + /* FLI */ + 70, 76, 73, + /* EGG */ + 69, 71, 71, + /* OIL */ + 79, 73, 76, + /* *SLI */ + 211, 76, 73, + /* KEY */ + 75, 69, 89, + /* HEL */ + 72, 69, 76, + /* BUN */ + 66, 85, 78, + /* INV */ + 73, 78, 86, + /* LED */ + 76, 69, 68, + /* THR */ + 84, 72, 82, + /* CRO */ + 67, 82, 79, + /* BRI */ + 66, 82, 73, + /* BEA */ + 66, 69, 65, + /* DRA */ + 68, 82, 65, + /* RUG */ + 82, 85, 71, + /* RUB */ + 82, 85, 66, + /* HON */ + 72, 79, 78, + /* FRU */ + 70, 82, 85, + /* OX */ + 79, 88, 32, + /* RIN */ + 82, 73, 78, + /* CHI */ + 67, 72, 73, + /* *BIT */ + 194, 73, 84, + /* BRA */ + 66, 82, 65, + /* SIG */ + 83, 73, 71, + /* BLA */ + 66, 76, 65, + /* WEB */ + 87, 69, 66, + /* *WRI */ + 215, 82, 73, + /* SWA */ + 83, 87, 65, + /* LAV */ + 76, 65, 86, + /* *DAM */ + 196, 65, 77, + /* HAL */ + 72, 65, 76, + /* TRE */ + 84, 82, 69, + /* *STU */ + 211, 84, 85, + /* FIR */ + 70, 73, 82, + /* SHO */ + 83, 72, 79, + /* *BAN */ + 194, 65, 78, + /* ADV */ + 65, 68, 86, + /* GLA */ + 71, 76, 65, + /* ARO */ + 65, 82, 79, + /* GAM */ + 71, 65, 77, + /* BOO */ + 66, 79, 79, + /* CHA */ + 67, 72, 65, + /* LAK */ + 76, 65, 75, + /* YOH */ + 89, 79, 72, + 0, +}; +const uint8_t automap[] = { + /* RUB */ + 82, 85, 66, + 2, + /* MUD */ + 77, 85, 68, + 7, + /* FIS */ + 70, 73, 83, + 8, + /* LAM */ + 76, 65, 77, + 9, + /* LAM */ + 76, 65, 77, + 10, + /* AXE */ + 65, 88, 69, + 11, + /* BOT */ + 66, 79, 84, + 12, + /* BOT */ + 66, 79, 84, + 13, + /* KEY */ + 75, 69, 89, + 14, + /* NET */ + 78, 69, 84, + 19, + /* OIL */ + 79, 73, 76, + 22, + /* HON */ + 72, 79, 78, + 23, + /* BOT */ + 66, 79, 84, + 26, + /* FLI */ + 70, 76, 73, + 28, + /* RUG */ + 82, 85, 71, + 29, + /* BLA */ + 66, 76, 65, + 31, + /* BRI */ + 66, 82, 73, + 36, + /* CRO */ + 67, 82, 79, + 37, + /* BLA */ + 66, 76, 65, + 40, + /* GLA */ + 71, 76, 65, + 41, + /* CHI */ + 67, 72, 73, + 42, + /* EGG */ + 69, 71, 71, + 44, + /* FRU */ + 70, 82, 85, + 46, + /* OX */ + 79, 88, 32, + 47, + /* RIN */ + 82, 73, 78, + 48, + /* BRA */ + 66, 82, 65, + 49, + /* FIS */ + 70, 73, 83, + 55, + /* FIR */ + 70, 73, 82, + 56, + /* LAM */ + 76, 65, 77, + 60, + /* RUG */ + 82, 85, 71, + 61, + /* ADV */ + 65, 68, 86, + 62, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv02.c b/Applications/games/adv02.c new file mode 100644 index 00000000..b4e2b294 --- /dev/null +++ b/Applications/games/adv02.c @@ -0,0 +1,2947 @@ +#define NUM_OBJ 66 +#define WORDSIZE 3 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 150; +const uint8_t lightfill = 150; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 1; +const uint8_t treasures = 2; +const uint8_t lastloc = 26; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +70, 108, 97, 116, 32, 105, 110, 32, 108, 111, 110, 100, 111, 110, 0 }; +const uint8_t loctxt_2[] = { +97, 108, 99, 111, 118, 101, 0 }; +const uint8_t loctxt_3[] = { +115, 101, 99, 114, 101, 116, 32, 112, 97, 115, 115, 97, 103, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_4[] = { +109, 117, 115, 116, 121, 32, 97, 116, 116, 105, 99, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 111, 117, 116, 115, 105, 100, 101, 32, 97, 110, 32, 111, 112, 101, 110, 32, 119, 105, 110, 100, 111, 119, 10, 111, 110, 32, 116, 104, 101, 32, 108, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 118, 101, 114, 121, 32, 116, 97, 108, 108, 32, 98, 117, 105, 108, 100, 105, 110, 103, 0 }; +const uint8_t loctxt_6[] = { +115, 97, 110, 100, 121, 32, 98, 101, 97, 99, 104, 32, 111, 110, 32, 97, 32, 116, 114, 111, 112, 105, 99, 97, 108, 32, 105, 115, 108, 101, 0 }; +const uint8_t loctxt_7[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_8[] = { +109, 101, 97, 100, 111, 119, 0 }; +const uint8_t loctxt_9[] = { +103, 114, 97, 115, 115, 32, 115, 104, 97, 99, 107, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 111, 99, 101, 97, 110, 0 }; +const uint8_t loctxt_11[] = { +112, 105, 116, 0 }; +const uint8_t loctxt_12[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_13[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 102, 111, 111, 116, 32, 111, 102, 32, 97, 32, 99, 97, 118, 101, 32, 114, 105, 100, 100, 101, 110, 32, 104, 105, 108, 108, 44, 32, 97, 32, 112, 97, 116, 104, 119, 97, 121, 10, 108, 101, 97, 100, 115, 32, 111, 110, 32, 117, 112, 32, 116, 111, 32, 116, 104, 101, 32, 116, 111, 112, 0 }; +const uint8_t loctxt_15[] = { +116, 111, 111, 108, 32, 115, 104, 101, 100, 0 }; +const uint8_t loctxt_16[] = { +108, 111, 110, 103, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_17[] = { +108, 97, 114, 103, 101, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 104, 105, 108, 108, 46, 32, 66, 101, 108, 111, 119, 32, 105, 115, 32, 80, 105, 114, 97, 116, 101, 115, 32, 73, 115, 108, 97, 110, 100, 46, 32, 65, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 115, 101, 97, 10, 119, 97, 121, 32, 111, 102, 102, 32, 105, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 97, 110, 99, 101, 32, 73, 32, 115, 101, 101, 32, 84, 114, 101, 97, 115, 117, 114, 101, 32, 73, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_19[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 97, 98, 111, 97, 114, 100, 32, 80, 105, 114, 97, 116, 101, 32, 115, 104, 105, 112, 32, 97, 110, 99, 104, 111, 114, 101, 100, 32, 111, 102, 102, 32, 115, 104, 111, 114, 101, 0 }; +const uint8_t loctxt_21[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 98, 101, 97, 99, 104, 32, 97, 116, 32, 42, 84, 114, 101, 97, 115, 117, 114, 101, 42, 32, 73, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_22[] = { +115, 112, 111, 111, 107, 121, 32, 111, 108, 100, 32, 103, 114, 97, 118, 101, 121, 97, 114, 100, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 112, 105, 108, 101, 115, 10, 111, 102, 32, 101, 109, 112, 116, 121, 32, 97, 110, 100, 32, 98, 114, 111, 107, 101, 110, 32, 114, 117, 109, 32, 98, 111, 116, 116, 108, 101, 115, 0 }; +const uint8_t loctxt_23[] = { +108, 97, 114, 103, 101, 32, 98, 97, 114, 114, 101, 110, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t loctxt_24[] = { +115, 104, 97, 108, 108, 111, 119, 32, 108, 97, 103, 111, 111, 110, 46, 10, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 32, 105, 115, 32, 116, 104, 101, 32, 111, 99, 101, 97, 110, 0 }; +const uint8_t loctxt_25[] = { +115, 97, 99, 107, 101, 100, 32, 97, 110, 100, 32, 100, 101, 115, 101, 114, 116, 101, 100, 32, 109, 111, 110, 97, 115, 116, 97, 114, 121, 0 }; +const uint8_t loctxt_26[] = { +42, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 78, 101, 118, 101, 114, 32, 78, 101, 118, 101, 114, 32, 76, 97, 110, 100, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_2, { 0, 0, 0, 0, 0, 1 } }, + { loctxt_3, { 0, 0, 4, 2, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 8, 0, 0, 0 } }, + { loctxt_7, { 0, 12, 13, 14, 0, 11 } }, + { loctxt_8, { 0, 0, 14, 6, 0, 0 } }, + { loctxt_9, { 0, 0, 0, 8, 0, 0 } }, + { loctxt_10, { 10, 24, 10, 10, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 7, 0 } }, + { loctxt_12, { 7, 0, 14, 13, 0, 0 } }, + { loctxt_13, { 7, 14, 12, 19, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 8, 0, 0 } }, + { loctxt_15, { 17, 0, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 17, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 16, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 14 } }, + { loctxt_19, { 0, 14, 14, 13, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_21, { 0, 22, 0, 0, 0, 0 } }, + { loctxt_22, { 21, 0, 23, 0, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 22, 0, 0 } }, + { loctxt_24, { 10, 6, 6, 6, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 23, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 1, + 2, + 2, + 0, + 0, + 4, + 1, + 0, + 4, + 0, + 0, + 6, + 9, + 9, + 8, + 24, + 8, + 11, + 11, + 0, + 17, + 10, + 25, + 25, + 9, + 1, + 0, + 0, + 0, + 0, + 1, + 15, + 0, + 17, + 17, + 16, + 0, + 0, + 18, + 17, + 10, + 0, + 0, + 4, + 1, + 0, + 15, + 0, + 6, + 0, + 0, + 6, + 24, + 0, + 15, + 0, + 23, + 0, + 0, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +70, 108, 105, 103, 104, 116, 32, 111, 102, 32, 115, 116, 97, 105, 114, 115, 0 }; +const uint8_t objtxt_1[] = { +79, 112, 101, 110, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_2[] = { +66, 111, 111, 107, 115, 32, 105, 110, 32, 97, 32, 98, 111, 111, 107, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_3[] = { +76, 97, 114, 103, 101, 32, 98, 108, 111, 111, 100, 32, 115, 111, 97, 107, 101, 100, 32, 98, 111, 111, 107, 0 }; +const uint8_t objtxt_4[] = { +66, 111, 111, 107, 99, 97, 115, 101, 32, 119, 105, 116, 104, 32, 115, 101, 99, 114, 101, 116, 32, 112, 97, 115, 115, 97, 103, 101, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_5[] = { +80, 105, 114, 97, 116, 101, 39, 115, 32, 100, 117, 102, 102, 101, 108, 32, 98, 97, 103, 0 }; +const uint8_t objtxt_6[] = { +83, 105, 103, 110, 32, 115, 97, 121, 115, 58, 32, 34, 66, 114, 105, 110, 103, 32, 42, 84, 82, 69, 65, 83, 85, 82, 69, 83, 42, 32, 104, 101, 114, 101, 44, 32, 115, 97, 121, 58, 32, 83, 67, 79, 82, 69, 34, 0 }; +const uint8_t objtxt_7[] = { +69, 109, 112, 116, 121, 32, 98, 111, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_8[] = { +85, 110, 108, 105, 116, 32, 116, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 116, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_10[] = { +77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_11[] = { +83, 109, 97, 108, 108, 32, 115, 104, 105, 112, 39, 115, 32, 107, 101, 101, 108, 32, 97, 110, 100, 32, 109, 97, 115, 116, 0 }; +const uint8_t objtxt_12[] = { +87, 105, 99, 107, 101, 100, 32, 108, 111, 111, 107, 105, 110, 103, 32, 112, 105, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_13[] = { +84, 114, 101, 97, 115, 117, 114, 101, 32, 99, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_14[] = { +77, 111, 110, 103, 111, 111, 115, 101, 0 }; +const uint8_t objtxt_15[] = { +82, 117, 115, 116, 121, 32, 97, 110, 99, 104, 111, 114, 0 }; +const uint8_t objtxt_16[] = { +71, 114, 97, 115, 115, 32, 115, 104, 97, 99, 107, 0 }; +const uint8_t objtxt_17[] = { +77, 101, 97, 110, 32, 97, 110, 100, 32, 104, 117, 110, 103, 114, 121, 32, 108, 111, 111, 107, 105, 110, 103, 32, 99, 114, 111, 99, 111, 100, 105, 108, 101, 115, 0 }; +const uint8_t objtxt_18[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_19[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 104, 97, 108, 108, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_20[] = { +80, 105, 108, 101, 32, 111, 102, 32, 115, 97, 105, 108, 115, 0 }; +const uint8_t objtxt_21[] = { +70, 105, 115, 104, 0 }; +const uint8_t objtxt_22[] = { +42, 68, 85, 66, 76, 69, 79, 78, 83, 42, 0 }; +const uint8_t objtxt_23[] = { +68, 101, 97, 100, 108, 121, 32, 109, 97, 109, 98, 97, 32, 115, 110, 97, 107, 101, 115, 0 }; +const uint8_t objtxt_24[] = { +80, 97, 114, 114, 111, 116, 0 }; +const uint8_t objtxt_25[] = { +66, 111, 116, 116, 108, 101, 32, 111, 102, 32, 114, 117, 109, 0 }; +const uint8_t objtxt_26[] = { +82, 117, 103, 0 }; +const uint8_t objtxt_27[] = { +82, 105, 110, 103, 32, 111, 102, 32, 107, 101, 121, 115, 0 }; +const uint8_t objtxt_28[] = { +79, 112, 101, 110, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 99, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_29[] = { +83, 101, 116, 32, 111, 102, 32, 112, 108, 97, 110, 115, 0 }; +const uint8_t objtxt_30[] = { +82, 117, 103, 0 }; +const uint8_t objtxt_31[] = { +67, 108, 97, 119, 32, 104, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_32[] = { +78, 97, 105, 108, 115, 0 }; +const uint8_t objtxt_33[] = { +80, 105, 108, 101, 32, 111, 102, 32, 112, 114, 101, 99, 117, 116, 32, 108, 117, 109, 98, 101, 114, 0 }; +const uint8_t objtxt_34[] = { +84, 111, 111, 108, 32, 115, 104, 101, 100, 0 }; +const uint8_t objtxt_35[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_36[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 112, 105, 116, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_37[] = { +80, 105, 114, 97, 116, 101, 32, 115, 104, 105, 112, 0 }; +const uint8_t objtxt_38[] = { +82, 111, 99, 107, 32, 119, 97, 108, 108, 32, 119, 105, 116, 104, 32, 110, 97, 114, 114, 111, 119, 32, 99, 114, 97, 99, 107, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t objtxt_39[] = { +78, 97, 114, 114, 111, 119, 32, 99, 114, 97, 99, 107, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 0 }; +const uint8_t objtxt_40[] = { +83, 97, 108, 116, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_41[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 112, 105, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_42[] = { +66, 111, 116, 116, 108, 101, 32, 111, 102, 32, 115, 97, 108, 116, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_43[] = { +82, 117, 109, 32, 98, 111, 116, 116, 108, 101, 32, 115, 109, 97, 115, 104, 101, 100, 32, 105, 110, 116, 111, 32, 112, 105, 101, 99, 101, 115, 46, 10, 83, 105, 103, 110, 32, 34, 79, 112, 112, 111, 115, 105, 116, 101, 32, 111, 102, 32, 76, 73, 71, 72, 84, 32, 105, 115, 32, 85, 110, 108, 105, 103, 104, 116, 34, 0 }; +const uint8_t objtxt_44[] = { +83, 97, 102, 101, 116, 121, 32, 115, 110, 101, 97, 107, 101, 114, 115, 0 }; +const uint8_t objtxt_45[] = { +77, 97, 112, 0 }; +const uint8_t objtxt_46[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_47[] = { +77, 111, 117, 108, 100, 121, 32, 111, 108, 100, 32, 98, 111, 110, 101, 115, 0 }; +const uint8_t objtxt_48[] = { +83, 97, 110, 100, 0 }; +const uint8_t objtxt_49[] = { +66, 111, 116, 116, 108, 101, 115, 32, 111, 102, 32, 114, 117, 109, 0 }; +const uint8_t objtxt_50[] = { +42, 82, 65, 82, 69, 32, 83, 84, 65, 77, 80, 83, 42, 0 }; +const uint8_t objtxt_51[] = { +76, 97, 103, 111, 111, 110, 0 }; +const uint8_t objtxt_52[] = { +84, 104, 101, 32, 116, 105, 100, 101, 32, 105, 115, 32, 111, 117, 116, 0 }; +const uint8_t objtxt_53[] = { +84, 104, 101, 32, 116, 105, 100, 101, 32, 105, 115, 32, 99, 111, 109, 105, 110, 103, 32, 105, 110, 0 }; +const uint8_t objtxt_54[] = { +87, 97, 116, 101, 114, 32, 119, 105, 110, 103, 115, 0 }; +const uint8_t objtxt_55[] = { +70, 108, 111, 116, 115, 97, 109, 32, 97, 110, 100, 32, 106, 101, 116, 115, 97, 109, 0 }; +const uint8_t objtxt_56[] = { +77, 111, 110, 97, 115, 116, 97, 114, 121, 0 }; +const uint8_t objtxt_57[] = { +87, 111, 111, 100, 101, 110, 32, 98, 111, 120, 0 }; +const uint8_t objtxt_58[] = { +68, 101, 97, 100, 32, 115, 113, 117, 105, 114, 114, 101, 108, 0 }; +const uint8_t objtxt_59[] = { +83, 105, 103, 110, 32, 105, 110, 32, 116, 104, 101, 32, 115, 97, 110, 100, 32, 115, 97, 121, 115, 58, 10, 34, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 80, 105, 114, 97, 116, 101, 115, 32, 73, 115, 108, 97, 110, 100, 44, 32, 119, 97, 116, 99, 104, 32, 111, 117, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 116, 105, 100, 101, 33, 34, 0 }; +const uint8_t objtxt_60[] = { +83, 97, 99, 107, 32, 111, 102, 32, 99, 114, 97, 99, 107, 101, 114, 115, 0 }; +const uint8_t objtxt_61[] = { +78, 111, 116, 101, 0 }; +const uint8_t objtxt_62[] = { +83, 109, 97, 108, 108, 32, 97, 100, 118, 101, 114, 116, 105, 115, 105, 110, 103, 32, 102, 108, 121, 101, 114, 0 }; +const uint8_t objtxt_63[] = { +66, 117, 114, 110, 116, 32, 111, 117, 116, 32, 116, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_64[] = { +0 }; +const uint8_t objtxt_65[] = { +0 }; +const uint8_t objtxt_66[] = { +0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 115, 116, 114, 97, 110, 103, 101, 32, 115, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_2[] = { +84, 104, 101, 32, 98, 111, 111, 107, 32, 105, 115, 32, 105, 110, 32, 98, 97, 100, 32, 99, 111, 110, 100, 116, 105, 111, 110, 32, 98, 117, 116, 32, 73, 32, 99, 97, 110, 32, 109, 97, 107, 101, 32, 111, 117, 116, 32, 116, 104, 101, 32, 116, 105, 116, 108, 101, 58, 10, 34, 84, 114, 101, 97, 115, 117, 114, 101, 32, 73, 115, 108, 97, 110, 100, 34, 46, 32, 84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 119, 111, 114, 100, 32, 119, 114, 105, 116, 116, 101, 110, 32, 105, 110, 32, 98, 108, 111, 111, 100, 32, 105, 110, 32, 116, 104, 101, 10, 102, 108, 121, 108, 101, 97, 102, 58, 32, 34, 89, 79, 72, 79, 34, 32, 97, 110, 100, 32, 97, 32, 109, 101, 115, 115, 97, 103, 101, 58, 10, 10, 34, 76, 111, 110, 103, 32, 74, 111, 104, 110, 32, 83, 105, 108, 118, 101, 114, 32, 108, 101, 102, 116, 32, 50, 32, 116, 114, 101, 97, 115, 117, 114, 101, 115, 32, 111, 110, 32, 84, 114, 101, 97, 115, 117, 114, 101, 32, 73, 115, 108, 97, 110, 100, 34, 0 }; +const uint8_t msgtxt_3[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_4[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 116, 104, 101, 114, 101, 32, 97, 108, 108, 32, 114, 105, 103, 104, 116, 46, 32, 77, 97, 121, 98, 101, 32, 73, 32, 115, 104, 111, 117, 108, 100, 0 }; +const uint8_t msgtxt_5[] = { +84, 104, 97, 116, 39, 115, 32, 110, 111, 116, 32, 118, 101, 114, 121, 32, 115, 109, 97, 114, 116, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 109, 97, 121, 32, 110, 101, 101, 100, 32, 116, 111, 32, 115, 97, 121, 32, 97, 32, 77, 65, 71, 73, 67, 32, 119, 111, 114, 100, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_7[] = { +69, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 115, 112, 105, 110, 115, 32, 97, 114, 111, 117, 110, 100, 32, 97, 110, 100, 32, 115, 117, 100, 100, 101, 110, 108, 121, 32, 73, 39, 109, 32, 101, 108, 115, 101, 119, 104, 101, 114, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_8[] = { +84, 111, 114, 99, 104, 32, 105, 115, 32, 108, 105, 116, 0 }; +const uint8_t msgtxt_9[] = { +73, 32, 119, 97, 115, 32, 119, 114, 111, 110, 103, 44, 32, 73, 32, 103, 117, 101, 115, 115, 32, 105, 116, 115, 32, 110, 111, 116, 32, 97, 32, 109, 111, 110, 103, 111, 111, 115, 101, 32, 99, 97, 117, 115, 101, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 115, 32, 98, 105, 116, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_10[] = { +73, 39, 109, 32, 115, 110, 97, 107, 101, 32, 98, 105, 116, 0 }; +const uint8_t msgtxt_11[] = { +80, 97, 114, 114, 111, 116, 32, 97, 116, 116, 97, 99, 107, 115, 32, 115, 110, 97, 107, 101, 115, 32, 97, 110, 100, 32, 100, 114, 105, 118, 101, 115, 32, 116, 104, 101, 109, 32, 111, 102, 102, 0 }; +const uint8_t msgtxt_12[] = { +80, 105, 114, 97, 116, 101, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_13[] = { +73, 116, 115, 32, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_14[] = { +73, 116, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t msgtxt_15[] = { +84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 97, 32, 115, 101, 116, 32, 111, 102, 32, 112, 108, 97, 110, 115, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_16[] = { +78, 111, 116, 32, 119, 104, 105, 108, 101, 32, 73, 39, 109, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 105, 116, 0 }; +const uint8_t msgtxt_17[] = { +67, 114, 111, 99, 115, 32, 115, 116, 111, 112, 32, 109, 101, 0 }; +const uint8_t msgtxt_18[] = { +83, 111, 114, 114, 121, 32, 73, 32, 99, 97, 110, 39, 116, 0 }; +const uint8_t msgtxt_19[] = { +87, 114, 111, 110, 103, 32, 103, 97, 109, 101, 32, 121, 111, 117, 32, 115, 105, 108, 108, 121, 32, 103, 111, 111, 115, 101, 33, 0 }; +const uint8_t msgtxt_20[] = { +73, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 105, 116, 0 }; +const uint8_t msgtxt_21[] = { +80, 105, 114, 97, 116, 101, 32, 103, 114, 97, 98, 115, 32, 114, 117, 109, 32, 97, 110, 100, 32, 115, 99, 117, 116, 116, 108, 101, 115, 32, 111, 102, 102, 32, 99, 104, 111, 114, 116, 108, 105, 110, 103, 0 }; +const uint8_t msgtxt_22[] = { +46, 46, 46, 73, 32, 116, 104, 105, 110, 107, 32, 105, 116, 115, 32, 109, 101, 44, 32, 72, 101, 101, 32, 72, 101, 101, 46, 0 }; +const uint8_t msgtxt_23[] = { +73, 116, 115, 32, 110, 97, 105, 108, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 33, 0 }; +const uint8_t msgtxt_24[] = { +89, 111, 104, 111, 32, 104, 111, 32, 97, 110, 100, 32, 97, 32, 46, 46, 46, 0 }; +const uint8_t msgtxt_25[] = { +78, 111, 44, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_26[] = { +73, 116, 32, 119, 97, 115, 32, 97, 32, 116, 105, 103, 104, 116, 32, 115, 113, 117, 101, 101, 122, 101, 33, 0 }; +const uint8_t msgtxt_27[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 111, 110, 39, 116, 32, 102, 105, 116, 0 }; +const uint8_t msgtxt_28[] = { +83, 105, 110, 99, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 105, 115, 32, 104, 97, 112, 112, 101, 110, 105, 110, 103, 0 }; +const uint8_t msgtxt_29[] = { +73, 32, 115, 108, 105, 112, 112, 101, 100, 32, 97, 110, 100, 32, 102, 101, 108, 108, 46, 46, 46, 0 }; +const uint8_t msgtxt_30[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 97, 108, 108, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_31[] = { +84, 104, 101, 121, 39, 114, 101, 32, 112, 108, 97, 110, 115, 32, 116, 111, 32, 98, 117, 105, 108, 100, 32, 116, 104, 101, 32, 74, 111, 108, 108, 121, 32, 82, 111, 103, 101, 114, 32, 40, 97, 32, 80, 105, 114, 97, 116, 101, 32, 115, 104, 105, 112, 33, 41, 10, 89, 111, 117, 39, 108, 108, 32, 110, 101, 101, 100, 58, 32, 104, 97, 109, 109, 101, 114, 44, 32, 110, 97, 105, 108, 115, 44, 32, 108, 117, 109, 98, 101, 114, 44, 32, 97, 110, 99, 104, 111, 114, 44, 32, 115, 97, 105, 108, 115, 44, 32, 97, 110, 100, 32, 97, 32, 107, 101, 101, 108, 46, 0 }; +const uint8_t msgtxt_32[] = { +73, 39, 118, 101, 32, 110, 111, 32, 99, 111, 110, 116, 97, 105, 110, 101, 114, 0 }; +const uint8_t msgtxt_33[] = { +73, 116, 32, 115, 111, 97, 107, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_34[] = { +84, 111, 111, 32, 100, 114, 121, 44, 32, 102, 105, 115, 104, 32, 118, 97, 110, 105, 115, 104, 46, 0 }; +const uint8_t msgtxt_35[] = { +80, 105, 114, 97, 116, 101, 32, 97, 119, 97, 107, 101, 110, 115, 32, 97, 110, 100, 32, 115, 97, 121, 115, 32, 34, 65, 121, 101, 32, 109, 97, 116, 101, 121, 32, 119, 101, 32, 98, 101, 32, 99, 97, 115, 116, 105, 110, 103, 32, 111, 102, 102, 32, 115, 111, 111, 110, 34, 10, 72, 101, 32, 116, 104, 101, 110, 32, 86, 65, 78, 73, 83, 72, 69, 83, 33, 0 }; +const uint8_t msgtxt_36[] = { +87, 104, 97, 116, 32, 97, 32, 119, 97, 115, 116, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_37[] = { +73, 39, 118, 101, 32, 110, 111, 32, 99, 114, 101, 119, 0 }; +const uint8_t msgtxt_38[] = { +80, 105, 114, 97, 116, 101, 32, 115, 97, 121, 115, 58, 32, 34, 65, 121, 101, 32, 109, 97, 116, 101, 121, 32, 119, 101, 32, 98, 101, 32, 110, 101, 101, 100, 105, 110, 103, 32, 97, 32, 109, 97, 112, 32, 102, 105, 114, 115, 116, 34, 46, 0 }; +const uint8_t msgtxt_39[] = { +65, 102, 116, 101, 114, 32, 97, 32, 100, 97, 121, 32, 97, 116, 32, 115, 101, 97, 32, 119, 101, 32, 115, 101, 116, 32, 97, 110, 99, 104, 111, 114, 32, 111, 102, 102, 32, 111, 102, 32, 97, 32, 115, 97, 110, 100, 121, 32, 98, 101, 97, 99, 104, 46, 10, 32, 65, 108, 108, 32, 65, 115, 104, 111, 114, 101, 32, 119, 104, 111, 39, 115, 32, 103, 111, 105, 110, 103, 32, 65, 115, 104, 111, 114, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_40[] = { +84, 114, 121, 58, 32, 34, 87, 69, 73, 71, 72, 32, 65, 78, 67, 72, 79, 82, 34, 0 }; +const uint8_t msgtxt_41[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 109, 97, 112, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_42[] = { +73, 116, 115, 32, 97, 32, 109, 97, 112, 32, 116, 111, 32, 84, 114, 101, 97, 115, 117, 114, 101, 32, 73, 115, 108, 97, 110, 100, 46, 32, 65, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 105, 116, 32, 115, 97, 121, 115, 58, 10, 32, 32, 32, 34, 51, 48, 32, 112, 97, 99, 101, 115, 32, 116, 104, 101, 110, 32, 100, 105, 103, 33, 34, 0 }; +const uint8_t msgtxt_43[] = { +42, 32, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 110, 117, 109, 98, 101, 114, 32, 50, 58, 32, 34, 112, 105, 114, 97, 116, 101, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 34, 10, 32, 32, 98, 121, 32, 65, 108, 101, 120, 105, 115, 32, 38, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 44, 32, 100, 101, 100, 105, 99, 97, 116, 101, 100, 58, 32, 84, 101, 100, 32, 72, 101, 101, 114, 101, 110, 32, 38, 32, 80, 97, 117, 108, 32, 83, 104, 97, 114, 108, 97, 110, 100, 10, 82, 101, 109, 101, 109, 98, 101, 114, 32, 121, 111, 117, 32, 99, 97, 110, 32, 97, 108, 119, 97, 121, 115, 32, 97, 115, 107, 32, 102, 111, 114, 32, 34, 104, 101, 108, 112, 34, 46, 10, 0 }; +const uint8_t msgtxt_44[] = { +73, 116, 115, 32, 101, 109, 112, 116, 121, 0 }; +const uint8_t msgtxt_45[] = { +73, 39, 118, 101, 32, 110, 111, 32, 112, 108, 97, 110, 115, 33, 0 }; +const uint8_t msgtxt_46[] = { +111, 112, 101, 110, 32, 105, 116, 63, 0 }; +const uint8_t msgtxt_47[] = { +103, 111, 32, 116, 104, 101, 114, 101, 63, 0 }; +const uint8_t msgtxt_48[] = { +73, 32, 102, 111, 117, 110, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_49[] = { +73, 32, 100, 105, 100, 110, 39, 116, 32, 102, 105, 110, 100, 32, 97, 110, 121, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_50[] = { +73, 32, 100, 111, 110, 39, 116, 32, 115, 101, 101, 32, 105, 116, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_51[] = { +79, 75, 32, 73, 32, 119, 97, 108, 107, 101, 100, 32, 111, 102, 102, 32, 51, 48, 32, 112, 97, 99, 101, 115, 46, 0 }; +const uint8_t msgtxt_52[] = { +67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 83, 32, 33, 33, 33, 10, 32, 66, 117, 116, 32, 121, 111, 117, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 105, 115, 32, 110, 111, 116, 32, 111, 118, 101, 114, 32, 121, 101, 116, 46, 46, 46, 10, 0 }; +const uint8_t msgtxt_53[] = { +82, 101, 97, 100, 105, 110, 103, 32, 101, 120, 112, 97, 110, 100, 115, 32, 116, 104, 101, 32, 109, 105, 110, 100, 0 }; +const uint8_t msgtxt_54[] = { +84, 104, 101, 32, 80, 97, 114, 114, 111, 116, 32, 99, 114, 121, 115, 58, 0 }; +const uint8_t msgtxt_55[] = { +34, 67, 104, 101, 99, 107, 32, 116, 104, 101, 32, 98, 97, 103, 32, 109, 97, 116, 101, 121, 34, 0 }; +const uint8_t msgtxt_56[] = { +34, 67, 104, 101, 99, 107, 32, 116, 104, 101, 32, 99, 104, 101, 115, 116, 32, 109, 97, 116, 101, 121, 34, 0 }; +const uint8_t msgtxt_57[] = { +102, 114, 111, 109, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 115, 105, 100, 101, 33, 0 }; +const uint8_t msgtxt_58[] = { +79, 112, 101, 110, 32, 116, 104, 101, 32, 98, 111, 111, 107, 33, 0 }; +const uint8_t msgtxt_59[] = { +84, 104, 101, 114, 101, 39, 115, 32, 109, 117, 108, 116, 105, 112, 108, 101, 32, 101, 120, 105, 116, 115, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_60[] = { +67, 114, 111, 99, 115, 32, 101, 97, 116, 32, 102, 105, 115, 104, 32, 97, 110, 100, 32, 108, 101, 97, 118, 101, 0 }; +const uint8_t msgtxt_61[] = { +73, 39, 109, 32, 117, 110, 100, 101, 114, 119, 97, 116, 101, 114, 44, 32, 73, 32, 103, 117, 101, 115, 115, 32, 73, 32, 100, 111, 110, 39, 116, 32, 115, 119, 105, 109, 32, 119, 101, 108, 108, 46, 32, 66, 108, 117, 98, 32, 66, 108, 117, 98, 46, 46, 46, 0 }; +const uint8_t msgtxt_62[] = { +34, 80, 105, 101, 99, 101, 115, 32, 111, 102, 32, 101, 105, 103, 104, 116, 34, 0 }; +const uint8_t msgtxt_63[] = { +73, 116, 115, 32, 115, 116, 117, 99, 107, 32, 105, 110, 32, 116, 104, 101, 32, 115, 97, 110, 100, 0 }; +const uint8_t msgtxt_64[] = { +79, 75, 0 }; +const uint8_t msgtxt_65[] = { +80, 105, 114, 97, 116, 101, 32, 115, 97, 121, 115, 58, 32, 34, 65, 121, 101, 32, 109, 101, 32, 66, 117, 99, 107, 101, 114, 111, 111, 44, 32, 119, 101, 32, 98, 101, 32, 119, 97, 105, 116, 105, 110, 103, 32, 102, 111, 114, 32, 116, 104, 101, 32, 116, 105, 100, 101, 32, 116, 111, 10, 32, 99, 111, 109, 101, 32, 105, 110, 33, 34, 0 }; +const uint8_t msgtxt_66[] = { +84, 104, 101, 32, 116, 105, 100, 101, 32, 105, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_67[] = { +84, 104, 101, 32, 116, 105, 100, 101, 32, 105, 115, 32, 99, 111, 109, 105, 110, 103, 32, 105, 110, 0 }; +const uint8_t msgtxt_68[] = { +65, 98, 111, 117, 116, 32, 50, 48, 32, 112, 111, 117, 110, 100, 115, 46, 32, 84, 114, 121, 58, 32, 34, 83, 69, 84, 32, 83, 65, 73, 76, 34, 0 }; +const uint8_t msgtxt_69[] = { +34, 84, 105, 100, 101, 115, 32, 98, 101, 32, 97, 32, 99, 104, 97, 110, 103, 105, 110, 103, 32, 109, 97, 116, 101, 121, 34, 0 }; +const uint8_t msgtxt_70[] = { +78, 111, 116, 101, 32, 104, 101, 114, 101, 32, 115, 97, 121, 115, 58, 32, 34, 73, 32, 98, 101, 32, 108, 105, 107, 105, 110, 103, 32, 112, 97, 114, 114, 111, 116, 115, 44, 32, 116, 104, 101, 121, 32, 98, 101, 32, 115, 109, 97, 114, 116, 32, 109, 97, 116, 101, 121, 33, 34, 0 }; +const uint8_t msgtxt_71[] = { +80, 105, 114, 97, 116, 101, 32, 102, 111, 108, 108, 111, 119, 115, 32, 109, 101, 32, 97, 115, 104, 111, 114, 101, 32, 97, 115, 32, 105, 102, 32, 101, 120, 112, 101, 99, 116, 105, 110, 103, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_72[] = { +67, 108, 105, 109, 98, 32, 115, 116, 97, 105, 114, 115, 46, 46, 46, 0 }; +const uint8_t msgtxt_73[] = { +71, 111, 116, 32, 97, 110, 121, 116, 104, 105, 110, 103, 32, 116, 111, 32, 101, 97, 116, 32, 109, 97, 116, 101, 121, 63, 0 }; +const uint8_t msgtxt_74[] = { +80, 97, 114, 114, 111, 116, 32, 97, 116, 116, 97, 99, 107, 115, 32, 99, 114, 111, 99, 115, 32, 98, 117, 116, 32, 105, 115, 32, 98, 101, 97, 116, 101, 110, 32, 111, 102, 102, 0 }; +const uint8_t msgtxt_75[] = { +66, 105, 114, 100, 32, 102, 108, 121, 115, 32, 111, 102, 102, 32, 108, 111, 111, 107, 105, 110, 103, 32, 118, 101, 114, 121, 32, 117, 110, 104, 97, 112, 112, 121, 0 }; +const uint8_t msgtxt_76[] = { +80, 97, 114, 114, 111, 116, 32, 97, 116, 101, 32, 97, 32, 99, 114, 97, 99, 107, 101, 114, 46, 0 }; +const uint8_t msgtxt_77[] = { +89, 117, 109, 109, 121, 0 }; +const uint8_t msgtxt_78[] = { +73, 32, 104, 101, 97, 114, 32, 110, 111, 116, 104, 105, 110, 103, 32, 110, 111, 119, 0 }; +const uint8_t msgtxt_79[] = { +80, 105, 114, 97, 116, 101, 32, 115, 97, 121, 115, 58, 10, 34, 70, 105, 114, 115, 116, 32, 89, 101, 101, 32, 98, 101, 32, 103, 101, 116, 116, 105, 110, 103, 32, 116, 104, 97, 116, 32, 65, 67, 67, 85, 82, 83, 69, 68, 32, 116, 104, 105, 110, 103, 32, 111, 102, 102, 32, 109, 101, 32, 115, 104, 105, 112, 33, 34, 10, 0 }; +const uint8_t msgtxt_80[] = { +114, 101, 97, 100, 32, 105, 116, 63, 0 }; +const uint8_t msgtxt_81[] = { +65, 115, 107, 32, 102, 111, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 110, 117, 109, 98, 101, 114, 32, 51, 58, 32, 34, 77, 73, 83, 83, 73, 79, 78, 32, 73, 77, 80, 79, 83, 83, 73, 66, 76, 69, 34, 32, 97, 116, 32, 121, 111, 117, 114, 10, 32, 102, 97, 118, 111, 114, 105, 116, 101, 32, 99, 111, 109, 112, 117, 116, 101, 114, 32, 100, 101, 97, 108, 101, 114, 46, 32, 73, 102, 32, 116, 104, 101, 121, 32, 68, 79, 78, 39, 84, 32, 99, 97, 114, 114, 121, 32, 34, 65, 68, 86, 69, 78, 84, 85, 82, 69, 34, 10, 32, 104, 97, 118, 101, 32, 116, 104, 101, 109, 32, 99, 97, 108, 108, 58, 32, 49, 45, 51, 48, 53, 45, 56, 54, 50, 45, 54, 57, 49, 55, 32, 32, 84, 79, 68, 65, 89, 33, 32, 34, 65, 68, 86, 69, 78, 84, 85, 82, 69, 34, 32, 97, 108, 115, 111, 10, 32, 115, 117, 112, 112, 111, 114, 116, 115, 32, 108, 111, 119, 101, 114, 32, 99, 97, 115, 101, 33, 10, 0 }; +const uint8_t msgtxt_82[] = { +73, 39, 109, 32, 110, 111, 116, 32, 102, 101, 101, 108, 105, 110, 103, 32, 100, 101, 115, 116, 114, 117, 99, 116, 105, 118, 101, 33, 0 }; +const uint8_t msgtxt_83[] = { +34, 67, 104, 101, 99, 107, 32, 116, 104, 101, 32, 98, 111, 111, 107, 44, 32, 109, 97, 116, 101, 121, 33, 34, 0 }; +const uint8_t msgtxt_84[] = { +65, 108, 108, 32, 114, 105, 103, 104, 116, 44, 32, 80, 79, 79, 70, 32, 116, 104, 101, 32, 71, 65, 77, 69, 32, 105, 115, 32, 100, 101, 115, 116, 114, 111, 121, 101, 100, 33, 0 }; +const uint8_t msgtxt_85[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_86[] = { +73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 116, 111, 32, 108, 111, 111, 107, 33, 0 }; +const uint8_t msgtxt_87[] = { +73, 116, 115, 32, 115, 116, 117, 99, 107, 0 }; +const uint8_t msgtxt_88[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, +}; + + +const uint8_t status[] = { +/* AUTO 80 CROCODILES*/ + 146, 80, + 2, 21, 2, 17, 0, 21, 0, 17, + 110, 59, 59, +/* AUTO 80 SNAKES*/ + 143, 80, + 2, 23, 2, 24, 0, 23, + 104, 112, 11, 55, +/* AUTO 100 RUG FLAG 11 GOT KEYS*/ + 182, + 1, 26, 12, 27, 0, 27, 9, 11, 0, 11, + 1, 53, 58, +/* AUTO 3 PARROT PIECES 8*/ + 133, 3, + 3, 24, + 104, 112, +/* AUTO 100 LITE*/ + 169, + 4, 14, 8, 15, + 57, 76, +/* AUTO 100 FLAG 1. BUILD BOAT. NEED SAIL/LUMBER/BEACH*/ + 176, + 8, 1, 3, 33, 3, 20, 0, 2, + 58, +/* AUTO 100 FLAG 2.READY TO BUILD BOAT*/ + 183, + 8, 2, 0, 1, 0, 33, 0, 37, 0, 11, + 60, 55, 72, 102, +/* AUTO 100 NOT READY TO BUILD*/ + 169, + 8, 1, 0, 1, + 25, 60, +/* AUTO 100 UNLOCK DOOR. FLAG 0*/ + 173, + 8, 0, 0, 35, 0, 36, + 72, 68, +/* AUTO 100 BUILDINg BOAT*/ + 183, + 8, 2, 0, 2, 0, 32, 0, 20, 0, 15, + 60, 55, 55, 55, +/* AUTO 19 END GAME*/ + 134, 19, + 4, 26, + 65, 28, 63, +/* AUTO 40 SLIPPED NO SHOES*/ + 137, 40, + 4, 5, 6, 44, + 29, 61, +/* AUTO 80 PIRATE RUM FLAG 0*/ + 151, 80, + 2, 12, 2, 25, 0, 41, 0, 4, 0, 12, + 62, 21, 67, 59, +/* AUTO 100 PIRATE RUM ATTIC FLAG 0*/ + 178, + 8, 0, 0, 7, 0, 4, 0, 25, + 68, 62, 59, +/* AUTO 25 FISH ESCAPE*/ + 145, 25, + 1, 21, 6, 42, 0, 21, 0, 10, + 34, 62, +/* AUTO 100 FLAG 6 INTRO*/ + 169, + 9, 6, 0, 6, + 43, 58, +/* AUTO 50 PIRATE RUM AGAIN*/ + 150, 50, + 2, 12, 2, 49, 0, 41, 0, 22, 0, 12, + 62, 21, 59, +/* AUTO 35 PARROT BAG*/ + 137, 35, + 3, 24, 9, 3, + 104, 105, +/* AUTO 7 PARROT CHEST*/ + 137, 7, + 3, 24, 9, 12, + 104, 106, +/* AUTO 50 TIDE IN DROWN*/ + 142, 50, + 4, 24, 13, 53, 6, 54, + 117, 111, 61, +/* AUTO 50 DROWN OCEAN*/ + 137, 50, + 4, 10, 6, 54, + 111, 61, +/* AUTO 10 TIDE WITH ANCHOR*/ + 150, 10, + 9, 10, 0, 52, 0, 53, 0, 15, 0, 55, + 72, 72, 67, +/* AUTO 10 TIDE NO ANCHOR NOT T.I.*/ + 145, 10, + 8, 10, 0, 52, 0, 53, 9, 4, + 72, 67, +/* AUTO 100 PARROT TIDE*/ + 170, + 3, 24, 8, 0, + 104, 119, 68, +/* AUTO 100 RESET FLAG 0*/ + 164, + 8, 0, + 68, +/* AUTO 100 LITE*/ + 169, + 4, 5, 8, 15, + 57, 76, +/* AUTO 80 MONGOOSE*/ + 145, 80, + 2, 23, 2, 14, 0, 14, 0, 58, + 9, 72, +/* AUTO 80 BIRD & CROCS*/ + 146, 80, + 2, 17, 2, 24, 0, 24, 0, 13, + 124, 125, 62, +/* AUTO 30 BIRD FOLLOWS CRACKERS*/ + 149, 30, + 3, 24, 12, 60, 12, 12, 0, 24, 0, 60, + 125, 75, +/* AUTO 20 PARROT EAT CRACKS*/ + 136, 20, + 3, 24, 3, 60, + 126, +/* AUTO 25 PARROT BOOK*/ + 141, 25, + 14, 61, 3, 24, 3, 3, + 104, 133, +/* AUTO 100 BURNT LAMP*/ + 178, + 8, 16, 0, 63, 0, 9, 0, 16, + 72, 60, 76, +}; +const uint8_t actions[] = { +/* SAY YOH */ + 15, 8, 23, + 7, 5, 0, 5, 1, 3, + 70, 7, 54, 64, +/* SET SAI NO SAIL WITH BOOK*/ + 17, 50, 30, + 4, 20, 2, 12, 3, 3, 3, 45, + 18, 129, +/* LIG TOR */ + 19, 37, 20, + 3, 8, 3, 10, 0, 8, 0, 9, + 72, 70, 8, 64, +/* UNL TOR */ + 14, 41, 20, + 3, 9, 0, 9, 0, 8, + 72, 114, 76, +/* HEL ANY */ + 4, 42, 0, + 4, 5, + 6, +/* GET DUB */ + 13, 10, 29, + 2, 22, 5, 23, 0, 22, + 52, 114, +/* GET DUB */ + 10, 10, 29, + 2, 22, 2, 23, + 5, 10, 61, +/* GO SHA */ + 10, 1, 33, + 2, 16, 0, 9, + 54, 70, 64, +/* GET CHE */ + 8, 10, 38, + 2, 13, 2, 12, + 12, +/* GET CHE .*/ + 13, 10, 38, + 2, 13, 5, 12, 0, 13, + 52, 114, +/* OPE CHE */ + 8, 39, 38, + 2, 13, 2, 12, + 12, +/* OPE CHE */ + 8, 39, 38, + 2, 13, 5, 12, + 13, +/* UNL CHE */ + 22, 41, 38, + 2, 13, 5, 12, 1, 27, 0, 13, 0, 28, + 14, 55, 53, +/* OPE CHE */ + 4, 39, 38, + 1, 13, + 16, +/* LOO CHE */ + 4, 27, 38, + 1, 28, + 16, +/* LOO CHE */ + 5, 27, 38, + 3, 13, + 18, 13, +/* LOO CHE FLAG 12 CHEST EMPTY*/ + 22, 27, 38, + 2, 28, 0, 29, 9, 5, 0, 5, 9, 12, + 15, 53, 58, +/* LOO CHE CHEST MAP*/ + 22, 27, 38, + 9, 12, 2, 28, 8, 5, 0, 45, 0, 12, + 41, 53, 58, +/* LOO CHE EMPTY*/ + 8, 27, 38, + 8, 12, 2, 28, + 44, +/* LOO BAG */ + 9, 27, 18, + 3, 5, 9, 3, + 4, 46, +/* LOO BAG */ + 8, 27, 18, + 3, 5, 8, 3, + 44, +/* OPE DOO */ + 4, 39, 37, + 2, 17, + 17, +/* OPE DOO */ + 5, 39, 37, + 2, 18, + 18, 13, +/* OPE DOO */ + 4, 39, 37, + 2, 19, + 14, +/* GO HAL */ + 10, 1, 9, + 2, 19, 0, 16, + 54, 70, 64, +/* UNL DOO */ + 8, 41, 37, + 2, 17, 2, 18, + 17, +/* UNL DOO */ + 23, 41, 37, + 5, 17, 2, 18, 1, 27, 0, 18, 0, 19, + 55, 53, 67, 114, +/* DRI BOT */ + 6, 23, 11, + 3, 25, + 127, 1, 22, +/* INV ANY */ + 0, 25, 0, + 66, +/* GET INV */ + 0, 10, 28, + 66, +/* LOO BOX */ + 9, 27, 58, + 3, 57, 12, 50, + 4, 46, +/* SAY AWA */ + 1, 8, 71, + 19, 3, +/* REA BOO */ + 5, 30, 10, + 6, 3, + 18, 20, +/* SCO ANY */ + 0, 33, 0, + 65, +/* SAV GAM */ + 0, 34, 14, + 71, +/* BUI BOA .*/ + 5, 47, 42, + 12, 29, + 18, 45, +/* GO CAV */ + 11, 1, 35, + 4, 14, 0, 7, + 54, 56, 70, 64, +/* LOO LAG */ + 6, 27, 48, + 14, 52, + 4, 47, 117, +/* LOO LAG TIDE OUT*/ + 6, 27, 48, + 13, 52, + 4, 47, 116, +/* LOO SHA */ + 5, 27, 33, + 2, 16, + 4, 47, +/* LOO CRA */ + 5, 27, 45, + 2, 38, + 4, 47, +/* GO CRA CARRYING SHOVEL*/ + 9, 1, 45, + 2, 39, 1, 46, + 18, 27, +/* GO CRA CARRYING CHEST*/ + 9, 1, 45, + 2, 38, 1, 13, + 18, 27, +/* QUI ANY */ + 0, 46, 0, + 63, +/* GET RUG */ + 5, 10, 26, + 2, 30, + 18, 23, +/* GET NAI */ + 23, 10, 41, + 1, 31, 2, 30, 0, 32, 0, 26, 0, 30, + 52, 53, 55, 114, +/* GO CRA CARRYING LUMBER*/ + 9, 1, 45, + 2, 39, 1, 33, + 18, 27, +/* BUI BOA */ + 20, 47, 42, + 3, 31, 3, 29, 3, 15, 3, 32, 0, 1, + 58, +/* BUI BOA */ + 0, 47, 42, + 25, +/* GO PIT */ + 10, 1, 50, + 2, 36, 0, 11, + 70, 54, 64, +/* GO CRA CARRYING BOOK*/ + 9, 1, 45, + 2, 38, 1, 3, + 18, 27, +/* SAY YOH */ + 15, 8, 23, + 4, 5, 0, 6, 1, 3, + 70, 7, 54, 64, +/* GET RUG */ + 9, 10, 26, + 3, 26, 0, 26, + 52, 114, +/* GO CRA DARK*/ + 11, 1, 45, + 2, 38, 0, 17, + 54, 26, 56, 64, +/* GO CRA LITE*/ + 11, 1, 45, + 2, 39, 0, 18, + 54, 57, 70, 64, +/* SET SAI WAIT FOR FOR TIDE*/ + 16, 50, 30, + 4, 20, 2, 12, 13, 52, 9, 4, + 115, +/* AUTO 0 */ +/* OPE BAG FLAG 3 EMPTY BAG*/ + 18, 39, 18, + 3, 5, 0, 10, 9, 3, 0, 3, + 30, 53, 58, +/* OPE BAG */ + 5, 39, 18, + 8, 3, + 3, 44, +/* GET WAT */ + 4, 10, 46, + 6, 7, + 32, +/* GET WAT */ + 18, 10, 46, + 2, 40, 1, 7, 0, 7, 0, 42, + 55, 52, 114, +/* DRO WAT */ + 14, 18, 46, + 1, 42, 0, 42, 0, 7, + 55, 52, 33, +/* DRI WAT */ + 5, 23, 46, + 2, 40, + 5, 61, +/* DRI WAT */ + 15, 23, 46, + 1, 42, 0, 42, 0, 7, + 5, 61, 55, 52, +/* WAK PIR */ + 18, 49, 16, + 2, 41, 0, 41, 0, 12, 0, 20, + 35, 55, 62, +/* OPE BOT */ + 4, 39, 11, + 3, 25, + 14, +/* EMP BOT */ + 14, 56, 11, + 3, 25, 0, 25, 0, 7, + 36, 33, 72, +/* GO BOA */ + 10, 1, 42, + 2, 37, 0, 20, + 54, 70, 64, +/* GO SHO FLAG 4 WE AT TREASUE ISLE*/ + 23, 1, 51, + 4, 20, 8, 4, 0, 21, 0, 12, 2, 12, + 54, 70, 53, 121, +/* GO SHO */ + 14, 1, 51, + 4, 20, 9, 4, 0, 6, + 54, 70, 64, +/* SET SAI .*/ + 9, 50, 30, + 4, 20, 5, 12, + 18, 37, +/* SET SAI */ + 9, 50, 30, + 4, 20, 12, 45, + 18, 38, +/* SET SAI GO TREASURE ISLE*/ + 23, 50, 30, + 4, 20, 9, 4, 0, 4, 0, 37, 0, 21, + 70, 39, 58, 62, +/* SET SAI RETURN FROM TR ISLE*/ + 23, 50, 30, + 4, 20, 8, 4, 0, 4, 0, 37, 0, 6, + 70, 39, 60, 62, +/* CAS OFF */ + 0, 51, 21, + 40, +/* REA MAP */ + 4, 30, 53, + 3, 45, + 42, +/* SAI ANY */ + 0, 9, 0, + 40, +/* GET BOO */ + 9, 10, 10, + 2, 3, 0, 3, + 52, 114, +/* OPE BOO */ + 14, 39, 10, + 3, 3, 14, 62, 0, 62, + 53, 114, 30, +/* GO SHO AT T.I.*/ + 14, 1, 51, + 4, 20, 8, 4, 0, 21, + 54, 70, 64, +/* GO PAT */ + 10, 1, 68, + 4, 14, 0, 18, + 54, 70, 64, +/* GET PAR */ + 8, 10, 39, + 2, 24, 2, 12, + 12, +/* GET PAR */ + 10, 10, 39, + 2, 24, 0, 24, + 52, 104, 112, +/* GO SHE */ + 10, 1, 44, + 2, 34, 0, 15, + 54, 70, 64, +/* GO 30 FLAG 7. THIS IS IT*/ + 9, 1, 24, + 0, 7, 4, 23, + 58, 51, +/* GO 30 PACE 30 BUT WRONG PLACE*/ + 5, 1, 24, + 0, 7, + 60, 51, +/* DIG ANY BONES*/ + 19, 52, 0, + 4, 22, 0, 47, 1, 46, 14, 47, + 70, 48, 53, 64, +/* DRI CRA EAT CRACKERRS*/ + 4, 23, 45, + 3, 60, + 127, +/* DIG ANY BEACH TREASURE RUM*/ + 19, 52, 0, + 4, 21, 14, 49, 0, 49, 1, 46, + 70, 53, 48, 64, +/* JUM ANY */ + 6, 55, 0, + 4, 5, + 70, 5, 61, +/* DIG ANY GOT IT*/ + 23, 52, 0, + 4, 23, 8, 7, 0, 57, 1, 46, 14, 57, + 70, 53, 48, 64, +/* GET NAI */ + 9, 10, 41, + 3, 32, 0, 32, + 52, 114, +/* GO WIN */ + 10, 1, 13, + 4, 5, 0, 2, + 54, 70, 64, +/* HEL ANY */ + 5, 42, 0, + 4, 2, + 103, 6, +/* REA PLA */ + 4, 30, 34, + 3, 29, + 31, +/* UNL DOO */ + 10, 41, 37, + 2, 35, 1, 27, + 18, 13, 107, +/* OPE DOO */ + 5, 39, 37, + 2, 35, + 18, 13, +/* OPE DOO */ + 8, 39, 37, + 0, 0, 2, 36, + 14, +/* GO LAG */ + 10, 1, 48, + 2, 51, 0, 24, + 54, 70, 64, +/* GO STA */ + 14, 1, 66, + 2, 0, 4, 1, 0, 2, + 54, 70, 64, +/* GET BOO */ + 22, 10, 10, + 4, 2, 0, 3, 0, 2, 0, 4, 5, 4, + 52, 1, 72, +/* GET ANC */ + 13, 10, 32, + 2, 15, 8, 10, 0, 15, + 52, 114, +/* GET ANC */ + 9, 10, 32, + 2, 15, 9, 10, + 18, 113, +/* GET ANC */ + 7, 10, 32, + 5, 15, + 70, 18, 50, 64, +/* EMP BOT DROP SALT WATER*/ + 13, 56, 11, + 3, 42, 0, 42, 0, 7, + 72, 114, +/* GO MON */ + 10, 1, 15, + 2, 56, 0, 25, + 54, 70, 64, +/* SAI BOA */ + 0, 9, 42, + 40, +/* HEL ANY .*/ + 4, 42, 0, + 4, 14, + 109, +/* WEI ANC */ + 0, 57, 32, + 118, +/* DIG ANY FREE ANCHOR FLAG 10*/ + 17, 52, 0, + 1, 46, 9, 10, 2, 15, 0, 10, + 58, 114, +/* BUR ANY */ + 0, 53, 0, + 18, +/* OPE BOX */ + 13, 39, 58, + 1, 31, 3, 57, 0, 50, + 30, 53, +/* KIL PIR */ + 0, 35, 16, + 12, +/* HEL ANY */ + 4, 42, 0, + 2, 17, + 123, +/* SAY ANY */ + 2, 8, 0, + 114, 85, 3, +/* HEL ANY */ + 4, 42, 0, + 4, 6, + 109, +/* WAI ANY */ + 13, 63, 0, + 8, 10, 0, 52, 0, 53, + 72, 119, +/* HEL ANY */ + 8, 42, 0, + 4, 9, 2, 12, + 24, +/* DIG ANY */ + 9, 52, 0, + 1, 46, 0, 7, + 49, 60, +/* HEL ANY */ + 4, 42, 0, + 4, 1, + 122, +/* GO PAS */ + 10, 1, 8, + 2, 4, 0, 3, + 54, 70, 64, +/* REA BOO */ + 4, 30, 10, + 3, 3, + 2, +/* DRI ANY */ + 0, 23, 0, + 18, +/* HEL ANY .*/ + 0, 42, 0, + 3, +/* GO WIN */ + 10, 1, 13, + 2, 1, 0, 5, + 54, 70, 64, +/* FIN ANY */ + 1, 54, 0, + 18, 136, +/* LIS ANY */ + 1, 31, 0, + 0, 128, +/* GET CHE */ + 9, 10, 38, + 3, 28, 0, 28, + 52, 114, +/* OPE BOO */ + 18, 39, 10, + 13, 62, 3, 3, 0, 61, 14, 61, + 114, 53, 30, +/* LOO BOO */ + 6, 27, 10, + 3, 3, + 4, 130, 46, +/* REA NOT */ + 4, 30, 74, + 3, 61, + 120, +/* LOO MAP */ + 5, 27, 53, + 3, 45, + 4, 130, +/* REA FLY */ + 5, 30, 75, + 3, 62, + 70, 131, +/* OPE BOO */ + 9, 39, 10, + 13, 61, 3, 3, + 3, 44, +/* LOO FLY */ + 5, 27, 75, + 3, 62, + 4, 130, +/* FLY ANY */ + 0, 17, 0, + 18, +/* BRE ANY */ + 1, 59, 0, + 18, 132, +/* LOO WIN */ + 5, 27, 13, + 2, 1, + 4, 47, +/* LOO BOA */ + 5, 27, 42, + 2, 37, + 4, 47, +/* FEE DES */ + 1, 64, 76, + 134, 63, +/* KIL ANY */ + 1, 35, 0, + 18, 132, +/* GET SNA */ + 6, 10, 78, + 2, 23, + 5, 10, 61, +/* CLO WIN */ + 1, 67, 13, + 18, 137, +/* JUM ANY */ + 1, 55, 0, + 114, 3, +/* WAI ANY */ + 22, 63, 0, + 9, 10, 0, 52, 0, 53, 0, 15, 0, 55, + 72, 72, 114, +/* LOO ANY */ + 2, 27, 0, + 76, 114, 135, + 255, +}; + + +const uint8_t verbs[] = { + /* AUT */ + 65, 85, 84, + /* GO */ + 71, 79, 32, + /* *CLI */ + 195, 76, 73, + /* *WAL */ + 215, 65, 76, + /* *RUN */ + 210, 85, 78, + /* *ENT */ + 197, 78, 84, + /* *PAC */ + 208, 65, 67, + /* *FOL */ + 198, 79, 76, + /* SAY */ + 83, 65, 89, + /* SAI */ + 83, 65, 73, + /* GET */ + 71, 69, 84, + /* *TAK */ + 212, 65, 75, + /* *CAT */ + 195, 65, 84, + /* *PIC */ + 208, 73, 67, + /* *REM */ + 210, 69, 77, + /* *WEA */ + 215, 69, 65, + /* *PUL */ + 208, 85, 76, + /* FLY */ + 70, 76, 89, + /* DRO */ + 68, 82, 79, + /* *REL */ + 210, 69, 76, + /* *THR */ + 212, 72, 82, + /* *LEA */ + 204, 69, 65, + /* *GIV */ + 199, 73, 86, + /* DRI */ + 68, 82, 73, + /* *EAT */ + 197, 65, 84, + /* INV */ + 73, 78, 86, + /* SAI */ + 83, 65, 73, + /* LOO */ + 76, 79, 79, + /* *EXA */ + 197, 88, 65, + /* *WAT */ + 215, 65, 84, + /* REA */ + 82, 69, 65, + /* LIS */ + 76, 73, 83, + /* . */ + 46, 32, 32, + /* SCO */ + 83, 67, 79, + /* SAV */ + 83, 65, 86, + /* KIL */ + 75, 73, 76, + /* *ATT */ + 193, 84, 84, + /* LIG */ + 76, 73, 71, + /* . */ + 46, 32, 32, + /* OPE */ + 79, 80, 69, + /* *SHA */ + 211, 72, 65, + /* UNL */ + 85, 78, 76, + /* HEL */ + 72, 69, 76, + /* . */ + 46, 32, 32, + /* . */ + 46, 32, 32, + /* SWI */ + 83, 87, 73, + /* QUI */ + 81, 85, 73, + /* BUI */ + 66, 85, 73, + /* *MAK */ + 205, 65, 75, + /* WAK */ + 87, 65, 75, + /* SET */ + 83, 69, 84, + /* CAS */ + 67, 65, 83, + /* DIG */ + 68, 73, 71, + /* BUR */ + 66, 85, 82, + /* FIN */ + 70, 73, 78, + /* JUM */ + 74, 85, 77, + /* EMP */ + 69, 77, 80, + /* WEI */ + 87, 69, 73, + /* */ + 32, 32, 32, + /* BRE */ + 66, 82, 69, + /* *SMA */ + 211, 77, 65, + /* . */ + 46, 32, 32, + /* */ + 32, 32, 32, + /* WAI */ + 87, 65, 73, + /* FEE */ + 70, 69, 69, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* CLO */ + 67, 76, 79, + /* *SHU */ + 211, 72, 85, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, + /* NORTH */ + 78, 79, 82, + /* SOUTH */ + 83, 79, 85, + /* EAST */ + 69, 65, 83, + /* WEST */ + 87, 69, 83, + /* UP */ + 85, 80, 32, + /* DOWN */ + 68, 79, 87, + /* . */ + 46, 32, 32, + /* PAS */ + 80, 65, 83, + /* HAL */ + 72, 65, 76, + /* BOO */ + 66, 79, 79, + /* BOT */ + 66, 79, 84, + /* *RUM */ + 210, 85, 77, + /* WIN */ + 87, 73, 78, + /* GAM */ + 71, 65, 77, + /* MON */ + 77, 79, 78, + /* PIR */ + 80, 73, 82, + /* ARO */ + 65, 82, 79, + /* BAG */ + 66, 65, 71, + /* *DUF */ + 196, 85, 70, + /* TOR */ + 84, 79, 82, + /* OFF */ + 79, 70, 70, + /* MAT */ + 77, 65, 84, + /* YOH */ + 89, 79, 72, + /* 30 */ + 51, 48, 32, + /* LUM */ + 76, 85, 77, + /* RUG */ + 82, 85, 71, + /* KEY */ + 75, 69, 89, + /* INV */ + 73, 78, 86, + /* DUB */ + 68, 85, 66, + /* SAI */ + 83, 65, 73, + /* FIS */ + 70, 73, 83, + /* ANC */ + 65, 78, 67, + /* SHA */ + 83, 72, 65, + /* PLA */ + 80, 76, 65, + /* CAV */ + 67, 65, 86, + /* SIG */ + 83, 73, 71, + /* DOO */ + 68, 79, 79, + /* CHE */ + 67, 72, 69, + /* PAR */ + 80, 65, 82, + /* HAM */ + 72, 65, 77, + /* NAI */ + 78, 65, 73, + /* BOA */ + 66, 79, 65, + /* *SHI */ + 211, 72, 73, + /* SHE */ + 83, 72, 69, + /* CRA */ + 67, 82, 65, + /* WAT */ + 87, 65, 84, + /* *SAL */ + 211, 65, 76, + /* LAG */ + 76, 65, 71, + /* *TID */ + 212, 73, 68, + /* PIT */ + 80, 73, 84, + /* SHO */ + 83, 72, 79, + /* *BEA */ + 194, 69, 65, + /* MAP */ + 77, 65, 80, + /* PAC */ + 80, 65, 67, + /* BON */ + 66, 79, 78, + /* HOL */ + 72, 79, 76, + /* SAN */ + 83, 65, 78, + /* BOX */ + 66, 79, 88, + /* SNE */ + 83, 78, 69, + /* CRA */ + 67, 82, 65, + /* *SAC */ + 211, 65, 67, + /* PIE */ + 80, 73, 69, + /* KEE */ + 75, 69, 69, + /* FLO */ + 70, 76, 79, + /* *JET */ + 202, 69, 84, + /* STA */ + 83, 84, 65, + /* *UPS */ + 213, 80, 83, + /* PAT */ + 80, 65, 84, + /* *HIL */ + 200, 73, 76, + /* YOH */ + 89, 79, 72, + /* AWA */ + 65, 87, 65, + /* *BUN */ + 194, 85, 78, + /* PIE */ + 80, 73, 69, + /* NOT */ + 78, 79, 84, + /* FLY */ + 70, 76, 89, + /* DES */ + 68, 69, 83, + /* CRO */ + 67, 82, 79, + /* SNA */ + 83, 78, 65, + /* TRE */ + 84, 82, 69, + 0, +}; +const uint8_t automap[] = { + /* BOO */ + 66, 79, 79, + 3, + /* BAG */ + 66, 65, 71, + 5, + /* BOT */ + 66, 79, 84, + 7, + /* TOR */ + 84, 79, 82, + 8, + /* TOR */ + 84, 79, 82, + 9, + /* MAT */ + 77, 65, 84, + 10, + /* CHE */ + 67, 72, 69, + 13, + /* MON */ + 77, 79, 78, + 14, + /* ANC */ + 65, 78, 67, + 15, + /* SAI */ + 83, 65, 73, + 20, + /* FIS */ + 70, 73, 83, + 21, + /* DUB */ + 68, 85, 66, + 22, + /* PAR */ + 80, 65, 82, + 24, + /* BOT */ + 66, 79, 84, + 25, + /* RUG */ + 82, 85, 71, + 26, + /* KEY */ + 75, 69, 89, + 27, + /* CHE */ + 67, 72, 69, + 28, + /* PLA */ + 80, 76, 65, + 29, + /* HAM */ + 72, 65, 77, + 31, + /* NAI */ + 78, 65, 73, + 32, + /* LUM */ + 76, 85, 77, + 33, + /* BOT */ + 66, 79, 84, + 42, + /* SNE */ + 83, 78, 69, + 44, + /* MAP */ + 77, 65, 80, + 45, + /* SHO */ + 83, 72, 79, + 46, + /* BON */ + 66, 79, 78, + 47, + /* SAN */ + 83, 65, 78, + 48, + /* BOT */ + 66, 79, 84, + 49, + /* STA */ + 83, 84, 65, + 50, + /* WIN */ + 87, 73, 78, + 54, + /* BOX */ + 66, 79, 88, + 57, + /* CRA */ + 67, 82, 65, + 60, + /* NOT */ + 78, 79, 84, + 61, + /* FLY */ + 70, 76, 89, + 62, + /* TOR */ + 84, 79, 82, + 63, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv03.c b/Applications/games/adv03.c new file mode 100644 index 00000000..dadf6a4a --- /dev/null +++ b/Applications/games/adv03.c @@ -0,0 +1,2675 @@ +#define NUM_OBJ 53 +#define WORDSIZE 3 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 1; +const uint8_t maxcar = 7; +const uint8_t treasure = 1; +const uint8_t treasures = 0; +const uint8_t lastloc = 23; +const uint8_t startloc = 2; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +0 }; +const uint8_t loctxt_2[] = { +98, 114, 105, 101, 102, 105, 110, 103, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_3[] = { +108, 111, 110, 103, 32, 115, 108, 111, 112, 105, 110, 103, 32, 103, 114, 101, 121, 32, 99, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_4[] = { +103, 114, 101, 121, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 115, 105, 116, 116, 105, 110, 103, 32, 105, 110, 32, 97, 32, 103, 114, 101, 121, 32, 99, 104, 97, 105, 114, 10, 116, 104, 101, 114, 101, 39, 115, 32, 97, 32, 98, 111, 120, 32, 112, 111, 105, 110, 116, 105, 110, 103, 32, 97, 116, 32, 109, 101, 0 }; +const uint8_t loctxt_6[] = { +116, 119, 105, 115, 116, 105, 110, 103, 32, 119, 104, 105, 116, 101, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_7[] = { +116, 119, 105, 115, 116, 105, 110, 103, 32, 121, 101, 108, 108, 111, 119, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_8[] = { +116, 119, 105, 115, 116, 105, 110, 103, 32, 98, 108, 117, 101, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_9[] = { +119, 104, 105, 116, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_10[] = { +121, 101, 108, 108, 111, 119, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_11[] = { +98, 108, 117, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_12[] = { +109, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 114, 111, 111, 109, 32, 49, 0 }; +const uint8_t loctxt_13[] = { +108, 97, 114, 103, 101, 32, 119, 104, 105, 116, 101, 32, 118, 105, 115, 105, 116, 111, 114, 115, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_14[] = { +121, 101, 108, 108, 111, 119, 32, 99, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_15[] = { +98, 108, 117, 101, 32, 97, 110, 116, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 101, 100, 103, 101, 32, 111, 117, 116, 115, 105, 100, 101, 32, 111, 102, 32, 97, 32, 119, 105, 110, 100, 111, 119, 10, 104, 105, 103, 104, 32, 97, 98, 111, 118, 101, 32, 116, 104, 101, 32, 114, 101, 97, 99, 116, 111, 114, 32, 99, 111, 114, 101, 0 }; +const uint8_t loctxt_17[] = { +109, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 114, 111, 111, 109, 32, 50, 0 }; +const uint8_t loctxt_18[] = { +112, 114, 111, 106, 101, 99, 116, 105, 111, 110, 105, 115, 116, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_19[] = { +67, 111, 110, 116, 114, 111, 108, 32, 114, 111, 111, 109, 32, 115, 117, 114, 114, 111, 110, 100, 105, 110, 103, 10, 116, 104, 101, 32, 114, 101, 97, 99, 116, 111, 114, 32, 99, 111, 114, 101, 0 }; +const uint8_t loctxt_20[] = { +98, 114, 101, 97, 107, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_21[] = { +114, 101, 97, 99, 116, 111, 114, 32, 99, 111, 114, 101, 0 }; +const uint8_t loctxt_22[] = { +115, 109, 97, 108, 108, 32, 118, 105, 101, 119, 105, 110, 103, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_23[] = { +115, 116, 111, 114, 97, 103, 101, 32, 114, 111, 111, 109, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_2, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_3, { 8, 4, 2, 12, 6, 7 } }, + { loctxt_4, { 3, 0, 0, 0, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_6, { 9, 0, 8, 0, 0, 3 } }, + { loctxt_7, { 10, 0, 0, 0, 3, 0 } }, + { loctxt_8, { 11, 3, 0, 6, 0, 0 } }, + { loctxt_9, { 0, 6, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 7, 0, 0, 0, 0 } }, + { loctxt_11, { 0, 8, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 17, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 23, 22, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 14, 0, 18, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 17 } }, + { loctxt_19, { 0, 0, 20, 0, 0, 21 } }, + { loctxt_20, { 0, 0, 0, 19, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 0, 19, 0 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 15 } }, + { loctxt_23, { 0, 0, 15, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 0, + 1, + 2, + 4, + 4, + 5, + 1, + 0, + 255, + 0, + 0, + 16, + 9, + 13, + 13, + 17, + 0, + 13, + 16, + 18, + 0, + 19, + 12, + 0, + 23, + 17, + 23, + 21, + 21, + 0, + 19, + 10, + 19, + 11, + 15, + 0, + 0, + 22, + 0, + 0, + 0, + 0, + 0, + 19, + 14, + 15, + 5, + 19, + 0, + 0, + 0, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +84, 111, 114, 110, 32, 117, 112, 32, 109, 97, 112, 0 }; +const uint8_t objtxt_1[] = { +80, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 109, 101, 32, 115, 116, 97, 109, 112, 101, 100, 32, 45, 115, 101, 99, 117, 114, 105, 116, 121, 45, 0 }; +const uint8_t objtxt_2[] = { +66, 111, 109, 98, 32, 100, 101, 116, 101, 99, 116, 111, 114, 32, 102, 108, 97, 115, 104, 105, 110, 103, 32, 121, 101, 108, 108, 111, 119, 32, 40, 98, 111, 109, 98, 32, 105, 115, 32, 110, 111, 119, 32, 97, 114, 109, 101, 100, 41, 0 }; +const uint8_t objtxt_3[] = { +76, 97, 114, 103, 101, 32, 116, 97, 112, 101, 32, 114, 101, 99, 111, 114, 100, 101, 114, 0 }; +const uint8_t objtxt_4[] = { +66, 111, 120, 32, 119, 105, 116, 104, 32, 97, 112, 112, 97, 114, 97, 116, 117, 115, 32, 112, 111, 105, 110, 116, 105, 110, 103, 32, 97, 116, 32, 99, 104, 97, 105, 114, 0 }; +const uint8_t objtxt_5[] = { +67, 104, 97, 105, 114, 32, 98, 111, 108, 116, 101, 100, 32, 116, 111, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_6[] = { +82, 111, 119, 32, 111, 102, 32, 52, 32, 98, 117, 116, 116, 111, 110, 115, 32, 45, 114, 101, 100, 32, 119, 104, 105, 116, 101, 32, 98, 108, 117, 101, 32, 121, 101, 108, 108, 111, 119, 45, 0 }; +const uint8_t objtxt_7[] = { +80, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 109, 101, 32, 115, 116, 97, 109, 112, 101, 100, 58, 32, 45, 118, 105, 115, 105, 116, 111, 114, 45, 0 }; +const uint8_t objtxt_8[] = { +80, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 109, 101, 32, 115, 116, 97, 109, 112, 101, 100, 32, 45, 109, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 45, 0 }; +const uint8_t objtxt_9[] = { +83, 117, 114, 103, 105, 99, 97, 108, 108, 121, 32, 105, 109, 112, 108, 97, 110, 116, 101, 100, 32, 98, 111, 109, 98, 32, 100, 101, 116, 101, 99, 116, 111, 114, 32, 103, 108, 111, 119, 115, 32, 103, 114, 101, 101, 110, 32, 40, 98, 111, 109, 98, 39, 115, 32, 45, 115, 97, 102, 101, 45, 41, 0 }; +const uint8_t objtxt_10[] = { +66, 111, 109, 98, 32, 100, 101, 116, 101, 99, 116, 111, 114, 32, 103, 108, 111, 119, 105, 110, 103, 32, 114, 101, 100, 32, 40, 102, 105, 110, 97, 108, 32, 99, 111, 117, 110, 116, 100, 111, 119, 110, 32, 97, 99, 116, 105, 118, 101, 41, 0 }; +const uint8_t objtxt_11[] = { +66, 108, 117, 101, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_12[] = { +89, 101, 108, 108, 111, 119, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_13[] = { +67, 108, 111, 115, 101, 100, 32, 119, 104, 105, 116, 101, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 116, 118, 32, 99, 97, 109, 101, 114, 97, 32, 109, 111, 117, 110, 116, 101, 100, 32, 111, 118, 101, 114, 32, 105, 116, 0 }; +const uint8_t objtxt_14[] = { +80, 108, 97, 116, 101, 32, 103, 108, 97, 115, 115, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, 116, 104, 32, 101, 109, 98, 101, 100, 101, 100, 32, 114, 101, 100, 32, 119, 105, 114, 101, 115, 0 }; +const uint8_t objtxt_15[] = { +80, 97, 110, 101, 108, 32, 111, 102, 32, 98, 117, 116, 116, 111, 110, 115, 32, 45, 119, 104, 105, 116, 101, 32, 103, 114, 101, 101, 110, 45, 0 }; +const uint8_t objtxt_16[] = { +79, 108, 100, 32, 102, 97, 115, 104, 105, 111, 110, 101, 100, 32, 121, 97, 114, 110, 32, 109, 111, 112, 0 }; +const uint8_t objtxt_17[] = { +69, 109, 112, 116, 121, 32, 119, 105, 110, 100, 111, 119, 32, 102, 114, 97, 109, 101, 0 }; +const uint8_t objtxt_18[] = { +84, 118, 32, 99, 97, 109, 101, 114, 97, 32, 109, 111, 117, 110, 116, 101, 100, 32, 111, 118, 101, 114, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_19[] = { +66, 114, 111, 107, 101, 110, 32, 103, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_20[] = { +69, 109, 112, 116, 121, 32, 109, 111, 118, 105, 101, 32, 112, 114, 111, 106, 101, 99, 116, 111, 114, 0 }; +const uint8_t objtxt_21[] = { +77, 111, 118, 105, 101, 32, 112, 114, 111, 106, 101, 99, 116, 111, 114, 32, 119, 105, 116, 104, 32, 102, 105, 108, 109, 32, 99, 97, 114, 116, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_22[] = { +77, 111, 118, 105, 101, 32, 102, 105, 108, 109, 32, 99, 97, 114, 116, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_23[] = { +69, 109, 112, 116, 121, 32, 112, 108, 97, 115, 116, 105, 99, 32, 112, 97, 105, 108, 0 }; +const uint8_t objtxt_24[] = { +87, 97, 116, 101, 114, 32, 102, 105, 108, 108, 101, 100, 32, 112, 108, 97, 115, 116, 105, 99, 32, 112, 97, 105, 108, 0 }; +const uint8_t objtxt_25[] = { +86, 97, 116, 32, 111, 102, 32, 104, 101, 97, 118, 121, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_26[] = { +87, 105, 114, 101, 32, 99, 117, 116, 116, 101, 114, 115, 0 }; +const uint8_t objtxt_27[] = { +65, 110, 116, 105, 45, 114, 97, 100, 105, 97, 116, 105, 111, 110, 32, 115, 117, 105, 116, 0 }; +const uint8_t objtxt_28[] = { +86, 101, 114, 121, 32, 108, 97, 114, 103, 101, 32, 116, 105, 109, 101, 32, 98, 111, 109, 98, 0 }; +const uint8_t objtxt_29[] = { +82, 101, 100, 32, 119, 105, 114, 101, 32, 103, 111, 105, 110, 103, 32, 102, 114, 111, 109, 32, 98, 111, 109, 98, 32, 105, 110, 116, 111, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_30[] = { +83, 116, 114, 97, 110, 103, 101, 32, 108, 117, 109, 112, 32, 111, 102, 32, 103, 108, 111, 119, 105, 110, 103, 32, 112, 108, 97, 115, 116, 105, 99, 0 }; +const uint8_t objtxt_31[] = { +83, 105, 103, 110, 32, 34, 78, 111, 32, 98, 101, 118, 101, 114, 97, 103, 101, 115, 44, 32, 80, 108, 101, 97, 115, 101, 32, 117, 115, 101, 32, 66, 114, 101, 97, 107, 32, 82, 111, 111, 109, 46, 34, 0 }; +const uint8_t objtxt_32[] = { +89, 101, 108, 108, 111, 119, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 116, 118, 32, 99, 97, 109, 101, 114, 97, 32, 111, 118, 101, 114, 32, 105, 116, 0 }; +const uint8_t objtxt_33[] = { +77, 101, 116, 97, 108, 32, 100, 111, 111, 114, 32, 106, 97, 109, 109, 101, 100, 32, 112, 97, 114, 116, 105, 97, 108, 108, 121, 32, 111, 112, 101, 110, 32, 98, 121, 32, 114, 101, 109, 97, 105, 110, 115, 32, 111, 102, 32, 97, 32, 116, 97, 112, 101, 32, 114, 101, 99, 111, 114, 100, 101, 114, 0 }; +const uint8_t objtxt_34[] = { +66, 108, 117, 101, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 116, 118, 32, 99, 97, 109, 101, 114, 97, 32, 111, 118, 101, 114, 32, 105, 116, 0 }; +const uint8_t objtxt_35[] = { +80, 108, 97, 105, 110, 32, 109, 101, 116, 97, 108, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 115, 105, 103, 110, 32, 45, 99, 111, 110, 116, 114, 111, 108, 32, 114, 111, 111, 109, 45, 0 }; +const uint8_t objtxt_36[] = { +84, 104, 101, 32, 100, 111, 111, 114, 32, 105, 115, 32, 112, 97, 114, 116, 105, 97, 108, 108, 121, 32, 111, 112, 101, 110, 0 }; +const uint8_t objtxt_37[] = { +69, 109, 112, 116, 121, 32, 112, 105, 108, 108, 32, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_38[] = { +54, 32, 105, 110, 99, 104, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_39[] = { +69, 109, 112, 116, 121, 32, 109, 97, 110, 105, 108, 97, 32, 101, 110, 118, 101, 108, 111, 112, 101, 0 }; +const uint8_t objtxt_40[] = { +80, 105, 101, 99, 101, 32, 111, 102, 32, 121, 97, 114, 110, 0 }; +const uint8_t objtxt_41[] = { +80, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 115, 97, 98, 111, 116, 101, 117, 114, 32, 115, 116, 97, 109, 112, 101, 100, 32, 45, 119, 105, 110, 100, 111, 119, 32, 109, 97, 105, 110, 116, 97, 110, 99, 101, 45, 0 }; +const uint8_t objtxt_42[] = { +68, 101, 97, 100, 32, 115, 97, 98, 111, 116, 101, 117, 114, 0 }; +const uint8_t objtxt_43[] = { +76, 111, 111, 115, 101, 32, 114, 101, 100, 32, 119, 105, 114, 101, 32, 103, 111, 105, 110, 103, 32, 105, 110, 116, 111, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_44[] = { +83, 116, 101, 112, 115, 32, 108, 101, 97, 100, 105, 110, 103, 32, 100, 111, 119, 110, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 114, 101, 97, 99, 116, 111, 114, 32, 99, 111, 114, 101, 0 }; +const uint8_t objtxt_45[] = { +89, 101, 108, 108, 111, 119, 32, 98, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_46[] = { +66, 108, 117, 101, 32, 98, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_47[] = { +75, 101, 121, 104, 111, 108, 101, 115, 32, 117, 110, 100, 101, 114, 32, 98, 117, 116, 116, 111, 110, 115, 0 }; +const uint8_t objtxt_48[] = { +69, 120, 112, 111, 115, 101, 100, 32, 100, 105, 97, 108, 115, 32, 97, 110, 100, 32, 103, 97, 117, 103, 101, 115, 32, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 0 }; +const uint8_t objtxt_49[] = { +65, 32, 108, 101, 97, 102, 108, 101, 116, 0 }; +const uint8_t objtxt_50[] = { +0 }; +const uint8_t objtxt_51[] = { +0 }; +const uint8_t objtxt_52[] = { +0 }; +const uint8_t objtxt_53[] = { +0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +71, 111, 111, 100, 32, 109, 111, 114, 110, 105, 110, 103, 32, 77, 114, 46, 32, 80, 104, 101, 108, 112, 115, 46, 32, 89, 111, 117, 114, 32, 77, 105, 115, 115, 105, 111, 110, 32, 40, 115, 104, 111, 117, 108, 100, 32, 121, 111, 117, 32, 100, 101, 99, 105, 100, 101, 32, 116, 111, 10, 97, 99, 99, 101, 112, 116, 32, 105, 116, 41, 32, 105, 115, 32, 116, 111, 32, 112, 114, 101, 118, 101, 110, 116, 32, 116, 104, 105, 115, 32, 97, 117, 116, 111, 109, 97, 116, 101, 100, 32, 110, 117, 99, 108, 101, 97, 114, 32, 114, 101, 97, 99, 116, 111, 114, 10, 102, 114, 111, 109, 32, 98, 101, 105, 110, 103, 32, 100, 101, 115, 116, 114, 111, 121, 101, 100, 32, 98, 121, 32, 97, 32, 115, 97, 98, 111, 116, 101, 117, 114, 39, 115, 32, 84, 73, 77, 69, 32, 66, 79, 77, 66, 33, 10, 0 }; +const uint8_t msgtxt_2[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 0 }; +const uint8_t msgtxt_3[] = { +77, 121, 32, 98, 111, 109, 98, 32, 100, 101, 116, 101, 99, 116, 111, 114, 0 }; +const uint8_t msgtxt_4[] = { +119, 97, 105, 108, 115, 32, 65, 76, 65, 82, 77, 73, 78, 71, 76, 89, 33, 0 }; +const uint8_t msgtxt_5[] = { +67, 76, 73, 67, 75, 33, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 0 }; +const uint8_t msgtxt_7[] = { +73, 116, 32, 97, 112, 112, 101, 97, 114, 115, 32, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_8[] = { +98, 117, 116, 116, 111, 110, 32, 105, 115, 32, 110, 111, 119, 32, 117, 110, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_9[] = { +66, 108, 117, 101, 0 }; +const uint8_t msgtxt_10[] = { +89, 101, 108, 108, 111, 119, 0 }; +const uint8_t msgtxt_11[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 66, 114, 105, 103, 104, 116, 32, 102, 108, 97, 115, 104, 32, 38, 32, 73, 32, 104, 101, 97, 114, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 97, 108, 108, 32, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 10, 73, 32, 99, 97, 110, 39, 116, 32, 115, 101, 101, 32, 119, 104, 97, 116, 32, 105, 116, 32, 105, 115, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 32, 116, 104, 111, 117, 103, 104, 46, 10, 0 }; +const uint8_t msgtxt_12[] = { +42, 32, 32, 32, 66, 32, 79, 32, 79, 32, 79, 32, 79, 32, 79, 32, 79, 32, 79, 32, 79, 32, 79, 32, 77, 32, 33, 32, 42, 32, 42, 32, 42, 32, 42, 32, 42, 32, 42, 0 }; +const uint8_t msgtxt_13[] = { +84, 104, 101, 32, 115, 97, 98, 111, 116, 101, 117, 114, 32, 40, 119, 104, 111, 32, 97, 108, 115, 111, 32, 114, 101, 119, 105, 114, 101, 100, 32, 116, 104, 101, 32, 115, 101, 99, 117, 114, 105, 116, 121, 32, 115, 121, 115, 116, 101, 109, 41, 32, 105, 115, 32, 97, 32, 104, 101, 97, 114, 116, 10, 112, 97, 116, 105, 101, 110, 116, 46, 32, 72, 101, 32, 112, 108, 97, 110, 115, 32, 116, 111, 32, 83, 85, 73, 67, 73, 68, 69, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 114, 101, 97, 99, 116, 111, 114, 33, 32, 72, 101, 32, 105, 115, 32, 115, 116, 105, 108, 108, 32, 108, 111, 111, 115, 101, 105, 110, 32, 116, 104, 101, 32, 98, 117, 105, 108, 100, 105, 110, 103, 46, 10, 89, 111, 117, 39, 108, 108, 32, 102, 105, 110, 100, 32, 83, 101, 99, 117, 114, 105, 116, 121, 32, 107, 101, 121, 115, 32, 38, 32, 97, 32, 109, 97, 112, 32, 105, 110, 32, 116, 104, 101, 32, 109, 97, 110, 105, 108, 97, 32, 101, 110, 118, 101, 108, 111, 112, 101, 32, 108, 121, 105, 110, 103, 10, 110, 101, 120, 116, 32, 116, 111, 32, 116, 104, 101, 32, 116, 97, 112, 101, 32, 112, 108, 97, 121, 101, 114, 46, 0 }; +const uint8_t msgtxt_14[] = { +112, 111, 108, 105, 116, 101, 108, 121, 32, 98, 101, 101, 112, 115, 46, 46, 46, 10, 0 }; +const uint8_t msgtxt_15[] = { +97, 110, 103, 114, 105, 108, 121, 32, 98, 117, 122, 122, 101, 115, 46, 46, 46, 10, 0 }; +const uint8_t msgtxt_16[] = { +83, 116, 114, 97, 110, 103, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_17[] = { +77, 111, 115, 116, 32, 100, 111, 111, 114, 115, 32, 38, 32, 119, 105, 110, 100, 111, 119, 115, 32, 97, 114, 101, 32, 117, 110, 100, 101, 114, 32, 97, 117, 116, 111, 109, 97, 116, 101, 100, 32, 115, 101, 99, 117, 114, 105, 116, 121, 32, 99, 111, 110, 116, 114, 111, 108, 46, 0 }; +const uint8_t msgtxt_18[] = { +77, 101, 116, 97, 108, 108, 105, 99, 32, 118, 111, 105, 99, 101, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_19[] = { +34, 83, 104, 111, 119, 32, 97, 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, 32, 112, 108, 101, 97, 115, 101, 34, 10, 0 }; +const uint8_t msgtxt_20[] = { +34, 65, 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, 32, 73, 78, 83, 85, 70, 70, 73, 67, 73, 69, 78, 84, 32, 102, 111, 114, 32, 97, 99, 99, 101, 115, 115, 34, 10, 0 }; +const uint8_t msgtxt_21[] = { +84, 104, 101, 32, 100, 111, 111, 114, 32, 111, 112, 101, 110, 115, 32, 106, 117, 115, 116, 32, 108, 111, 110, 103, 32, 101, 110, 111, 117, 103, 104, 32, 102, 111, 114, 32, 109, 101, 32, 116, 111, 32, 115, 99, 117, 114, 114, 121, 32, 116, 104, 114, 111, 117, 103, 104, 46, 0 }; +const uint8_t msgtxt_22[] = { +73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 50, 110, 100, 32, 102, 108, 111, 111, 114, 46, 32, 66, 101, 108, 111, 119, 32, 73, 32, 115, 101, 101, 32, 116, 104, 101, 32, 99, 111, 110, 116, 114, 111, 108, 32, 114, 111, 111, 109, 32, 115, 117, 114, 114, 111, 110, 100, 105, 110, 103, 10, 116, 104, 101, 32, 114, 101, 97, 99, 116, 111, 114, 32, 99, 111, 114, 101, 46, 32, 84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 119, 105, 100, 101, 32, 108, 101, 100, 103, 101, 32, 106, 117, 115, 116, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 46, 0 }; +const uint8_t msgtxt_23[] = { +73, 110, 32, 116, 104, 105, 115, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 116, 104, 101, 114, 101, 39, 115, 32, 78, 79, 32, 115, 99, 111, 114, 101, 46, 32, 69, 105, 116, 104, 101, 114, 32, 121, 111, 117, 32, 109, 97, 107, 101, 32, 105, 116, 32, 111, 114, 32, 46, 46, 46, 10, 0 }; +const uint8_t msgtxt_24[] = { +84, 101, 108, 108, 32, 109, 101, 32, 119, 105, 116, 104, 32, 119, 104, 97, 116, 63, 32, 69, 120, 97, 109, 112, 108, 101, 58, 32, 34, 87, 73, 84, 72, 32, 70, 73, 83, 84, 34, 0 }; +const uint8_t msgtxt_25[] = { +66, 101, 32, 115, 117, 114, 101, 32, 73, 39, 109, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_26[] = { +82, 101, 99, 111, 114, 100, 101, 114, 32, 103, 111, 101, 115, 32, 102, 108, 121, 105, 110, 103, 32, 116, 104, 114, 117, 32, 116, 104, 101, 32, 103, 108, 97, 115, 115, 32, 108, 97, 110, 100, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 99, 111, 110, 116, 114, 111, 108, 32, 114, 111, 111, 109, 46, 66, 111, 121, 32, 119, 104, 97, 116, 32, 97, 32, 77, 69, 83, 83, 33, 10, 0 }; +const uint8_t msgtxt_27[] = { +67, 108, 105, 99, 107, 33, 10, 82, 111, 111, 109, 32, 108, 105, 103, 104, 116, 115, 32, 100, 105, 109, 32, 97, 110, 100, 32, 97, 32, 115, 99, 114, 101, 101, 110, 32, 100, 114, 111, 112, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 99, 101, 105, 108, 105, 110, 103, 46, 10, 89, 111, 117, 32, 104, 101, 97, 114, 32, 97, 32, 104, 105, 100, 100, 101, 110, 32, 112, 114, 111, 106, 101, 99, 116, 111, 114, 32, 115, 116, 97, 114, 116, 46, 0 }; +const uint8_t msgtxt_28[] = { +84, 104, 101, 32, 115, 99, 114, 101, 101, 110, 32, 105, 108, 108, 117, 109, 105, 110, 97, 116, 101, 115, 32, 102, 111, 114, 32, 97, 119, 104, 105, 108, 101, 44, 32, 98, 117, 116, 32, 110, 111, 32, 109, 111, 118, 105, 101, 33, 63, 0 }; +const uint8_t msgtxt_29[] = { +84, 104, 101, 32, 112, 114, 111, 106, 101, 99, 116, 111, 114, 32, 115, 116, 111, 112, 115, 44, 32, 116, 104, 101, 32, 115, 99, 114, 101, 101, 110, 32, 114, 105, 115, 101, 115, 44, 32, 97, 110, 100, 32, 116, 104, 101, 32, 108, 105, 103, 104, 116, 115, 32, 114, 101, 116, 117, 114, 110, 46, 0 }; +const uint8_t msgtxt_30[] = { +65, 32, 109, 111, 118, 105, 101, 32, 114, 117, 110, 115, 32, 116, 101, 108, 108, 105, 110, 103, 32, 97, 98, 111, 117, 116, 32, 116, 104, 101, 32, 114, 101, 97, 99, 116, 111, 114, 32, 97, 110, 100, 32, 105, 116, 115, 32, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 10, 105, 110, 116, 101, 114, 101, 115, 116, 105, 110, 103, 32, 104, 105, 103, 104, 108, 105, 103, 104, 116, 115, 58, 10, 32, 49, 41, 32, 80, 108, 97, 115, 116, 105, 99, 32, 68, 69, 70, 79, 82, 77, 83, 32, 115, 116, 114, 97, 110, 103, 101, 108, 121, 32, 105, 110, 32, 114, 97, 100, 105, 97, 116, 105, 111, 110, 10, 32, 50, 41, 32, 69, 118, 101, 110, 32, 115, 104, 111, 114, 116, 32, 101, 120, 112, 111, 115, 117, 114, 101, 32, 116, 111, 32, 72, 73, 71, 72, 32, 114, 97, 100, 105, 97, 116, 105, 111, 110, 32, 105, 115, 32, 76, 69, 84, 72, 65, 76, 44, 32, 115, 111, 32, 115, 117, 105, 116, 32, 117, 112, 10, 0 }; +const uint8_t msgtxt_31[] = { +84, 104, 101, 32, 114, 97, 100, 105, 97, 116, 105, 111, 110, 32, 100, 105, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 116, 111, 32, 109, 121, 32, 112, 97, 105, 108, 33, 0 }; +const uint8_t msgtxt_32[] = { +72, 111, 108, 100, 105, 110, 103, 32, 97, 32, 82, 97, 100, 105, 97, 116, 105, 111, 110, 32, 83, 117, 105, 116, 0 }; +const uint8_t msgtxt_33[] = { +100, 111, 101, 115, 110, 39, 116, 32, 112, 114, 111, 118, 105, 100, 101, 32, 109, 117, 99, 104, 32, 112, 114, 111, 116, 101, 99, 116, 105, 111, 110, 32, 102, 111, 114, 32, 109, 101, 10, 32, 97, 115, 32, 73, 32, 102, 97, 108, 108, 32, 100, 111, 119, 110, 32, 114, 101, 116, 99, 104, 105, 110, 103, 32, 73, 32, 104, 101, 97, 114, 47, 70, 69, 69, 76, 32, 84, 72, 69, 32, 66, 79, 77, 66, 32, 101, 120, 112, 108, 111, 100, 101, 33, 10, 0 }; +const uint8_t msgtxt_34[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 110, 117, 109, 98, 101, 114, 32, 51, 32, 34, 77, 73, 83, 83, 73, 79, 78, 32, 73, 77, 80, 79, 83, 83, 73, 66, 76, 69, 34, 10, 32, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 44, 32, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 77, 97, 101, 103, 101, 110, 32, 65, 100, 97, 109, 115, 46, 10, 0 }; +const uint8_t msgtxt_35[] = { +65, 32, 98, 117, 115, 105, 110, 101, 115, 115, 32, 115, 117, 105, 116, 0 }; +const uint8_t msgtxt_36[] = { +73, 39, 109, 32, 87, 69, 65, 82, 73, 78, 71, 32, 97, 110, 32, 97, 110, 116, 105, 45, 114, 97, 100, 105, 97, 116, 105, 111, 110, 32, 115, 117, 105, 116, 46, 0 }; +const uint8_t msgtxt_37[] = { +73, 116, 32, 119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_38[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 111, 110, 39, 116, 32, 102, 105, 116, 32, 116, 104, 114, 117, 32, 116, 104, 101, 32, 100, 111, 111, 114, 46, 0 }; +const uint8_t msgtxt_39[] = { +73, 32, 116, 117, 114, 110, 32, 116, 104, 101, 32, 107, 110, 111, 98, 32, 97, 110, 100, 32, 112, 117, 115, 104, 0 }; +const uint8_t msgtxt_40[] = { +103, 101, 110, 116, 108, 121, 32, 111, 110, 32, 116, 104, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t msgtxt_41[] = { +104, 97, 114, 100, 32, 111, 110, 32, 116, 104, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t msgtxt_42[] = { +105, 116, 32, 111, 112, 101, 110, 115, 32, 115, 108, 105, 103, 104, 116, 108, 121, 0 }; +const uint8_t msgtxt_43[] = { +105, 116, 115, 32, 99, 108, 111, 115, 101, 100, 0 }; +const uint8_t msgtxt_44[] = { +116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 115, 112, 105, 108, 108, 115, 32, 111, 110, 32, 116, 104, 101, 32, 98, 111, 109, 98, 32, 97, 110, 100, 0 }; +const uint8_t msgtxt_45[] = { +116, 104, 101, 32, 99, 111, 110, 116, 114, 111, 108, 32, 112, 97, 110, 101, 108, 32, 119, 104, 105, 99, 104, 32, 105, 109, 109, 101, 100, 105, 97, 116, 101, 108, 121, 32, 115, 104, 111, 114, 116, 115, 32, 111, 117, 116, 32, 116, 114, 105, 103, 103, 101, 114, 105, 110, 103, 10, 116, 104, 101, 32, 98, 111, 109, 98, 0 }; +const uint8_t msgtxt_46[] = { +100, 101, 102, 117, 115, 101, 115, 32, 105, 116, 33, 32, 70, 65, 78, 84, 65, 83, 84, 73, 67, 44, 32, 89, 111, 117, 32, 99, 111, 109, 112, 108, 101, 116, 101, 100, 32, 97, 110, 32, 73, 77, 80, 79, 83, 83, 73, 66, 76, 69, 32, 109, 105, 115, 115, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_47[] = { +116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 115, 111, 97, 107, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t msgtxt_48[] = { +115, 97, 121, 32, 97, 103, 97, 105, 110, 32, 38, 32, 117, 115, 101, 32, 97, 32, 99, 111, 108, 111, 114, 33, 0 }; +const uint8_t msgtxt_49[] = { +73, 39, 109, 32, 108, 111, 111, 107, 105, 110, 103, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 99, 111, 110, 116, 114, 111, 108, 32, 114, 111, 111, 109, 46, 32, 73, 32, 110, 111, 116, 105, 99, 101, 32, 116, 104, 97, 116, 32, 116, 104, 101, 32, 100, 111, 111, 114, 32, 105, 115, 10, 32, 98, 108, 111, 99, 107, 101, 100, 32, 98, 121, 32, 115, 111, 109, 101, 32, 100, 101, 98, 114, 105, 115, 46, 0 }; +const uint8_t msgtxt_50[] = { +73, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 97, 110, 99, 101, 32, 121, 111, 117, 32, 104, 101, 97, 114, 32, 97, 32, 100, 117, 108, 108, 32, 116, 104, 117, 100, 59, 32, 97, 115, 32, 105, 102, 32, 115, 111, 109, 101, 111, 110, 101, 32, 102, 101, 108, 108, 32, 111, 114, 10, 32, 100, 114, 111, 112, 112, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 101, 97, 118, 121, 46, 0 }; +const uint8_t msgtxt_51[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 101, 108, 108, 32, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 0 }; +const uint8_t msgtxt_52[] = { +105, 116, 115, 32, 117, 110, 114, 101, 97, 100, 97, 98, 108, 101, 0 }; +const uint8_t msgtxt_53[] = { +105, 116, 115, 32, 115, 116, 105, 108, 108, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 0 }; +const uint8_t msgtxt_54[] = { +79, 104, 32, 66, 111, 121, 46, 46, 46, 73, 32, 116, 104, 105, 110, 107, 32, 73, 32, 100, 105, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 46, 46, 46, 0 }; +const uint8_t msgtxt_55[] = { +73, 116, 32, 109, 97, 100, 101, 32, 97, 110, 32, 111, 100, 100, 32, 115, 111, 117, 110, 100, 46, 0 }; +const uint8_t msgtxt_56[] = { +34, 84, 86, 32, 100, 101, 97, 99, 116, 105, 118, 97, 116, 101, 100, 34, 10, 0 }; +const uint8_t msgtxt_57[] = { +73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 116, 111, 32, 108, 111, 111, 107, 0 }; +const uint8_t msgtxt_58[] = { +84, 101, 108, 108, 32, 109, 101, 32, 104, 111, 119, 63, 0 }; +const uint8_t msgtxt_59[] = { +84, 114, 121, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_60[] = { +77, 97, 121, 98, 101, 32, 73, 32, 115, 104, 111, 117, 108, 100, 32, 70, 82, 73, 83, 75, 32, 104, 105, 109, 63, 0 }; +const uint8_t msgtxt_61[] = { +73, 116, 115, 32, 97, 32, 115, 101, 97, 109, 108, 101, 115, 115, 32, 98, 111, 120, 32, 119, 105, 116, 104, 32, 49, 32, 115, 109, 97, 108, 108, 32, 104, 111, 108, 101, 32, 102, 111, 114, 32, 116, 104, 101, 32, 114, 101, 100, 32, 119, 105, 114, 101, 46, 0 }; +const uint8_t msgtxt_62[] = { +84, 86, 32, 99, 97, 109, 101, 114, 97, 32, 105, 115, 32, 115, 108, 111, 119, 32, 115, 99, 97, 110, 110, 105, 110, 103, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 97, 114, 101, 97, 46, 0 }; +const uint8_t msgtxt_63[] = { +84, 86, 32, 99, 97, 109, 101, 114, 97, 32, 105, 115, 32, 112, 111, 119, 101, 114, 101, 100, 32, 100, 111, 119, 110, 46, 10, 0 }; +const uint8_t msgtxt_64[] = { +73, 116, 32, 115, 101, 101, 109, 115, 32, 115, 97, 102, 101, 46, 32, 83, 104, 97, 108, 108, 32, 73, 32, 115, 105, 116, 32, 100, 111, 119, 110, 63, 0 }; +const uint8_t msgtxt_65[] = { +79, 110, 108, 121, 32, 104, 101, 108, 112, 32, 73, 32, 99, 97, 110, 32, 116, 104, 105, 110, 107, 32, 111, 102, 32, 105, 115, 32, 116, 111, 58, 32, 34, 69, 120, 97, 109, 105, 110, 101, 32, 101, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 99, 108, 111, 115, 101, 108, 121, 33, 34, 10, 0 }; +const uint8_t msgtxt_66[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_67[] = { +72, 85, 72, 63, 0 }; +const uint8_t msgtxt_68[] = { +65, 32, 109, 105, 110, 117, 116, 101, 32, 97, 103, 111, 32, 115, 111, 109, 101, 111, 110, 101, 32, 114, 97, 110, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 105, 115, 32, 114, 111, 111, 109, 33, 32, 66, 121, 32, 116, 104, 101, 32, 119, 97, 121, 32, 73, 32, 115, 101, 101, 109, 10, 116, 111, 32, 98, 101, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 10, 0 }; +const uint8_t msgtxt_69[] = { +83, 111, 109, 101, 111, 110, 101, 32, 99, 97, 109, 101, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 44, 32, 104, 101, 32, 115, 97, 119, 32, 109, 101, 32, 97, 110, 100, 32, 114, 97, 110, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_70[] = { +73, 32, 115, 101, 101, 32, 110, 111, 32, 111, 110, 101, 32, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_71[] = { +34, 79, 119, 110, 101, 114, 32, 111, 102, 32, 98, 97, 100, 103, 101, 32, 105, 115, 32, 110, 111, 116, 32, 112, 114, 101, 115, 101, 110, 116, 33, 34, 0 }; +const uint8_t msgtxt_72[] = { +72, 105, 33, 32, 76, 111, 111, 107, 32, 102, 111, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 110, 117, 109, 98, 101, 114, 32, 52, 58, 32, 34, 86, 79, 79, 68, 79, 79, 32, 67, 65, 83, 84, 76, 69, 34, 32, 97, 116, 32, 121, 111, 117, 114, 10, 102, 97, 118, 111, 114, 105, 116, 101, 32, 99, 111, 109, 112, 117, 116, 101, 114, 32, 115, 116, 111, 114, 101, 33, 32, 40, 78, 111, 119, 32, 98, 97, 99, 107, 32, 116, 111, 32, 111, 117, 114, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 103, 114, 97, 109, 46, 41, 0 }; +const uint8_t msgtxt_73[] = { +70, 105, 110, 97, 108, 32, 99, 111, 117, 110, 116, 100, 111, 119, 110, 32, 115, 116, 97, 114, 116, 115, 32, 105, 110, 0 }; +const uint8_t msgtxt_74[] = { +116, 117, 114, 110, 115, 33, 0 }; +const uint8_t msgtxt_75[] = { +83, 111, 109, 101, 32, 116, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 0 }; +const uint8_t msgtxt_76[] = { +84, 104, 101, 114, 101, 32, 105, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 114, 105, 116, 116, 101, 110, 32, 116, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_77[] = { +79, 87, 33, 32, 84, 104, 97, 116, 32, 72, 85, 82, 84, 33, 32, 65, 110, 121, 119, 97, 121, 0 }; +const uint8_t msgtxt_78[] = { +34, 65, 67, 67, 69, 80, 84, 69, 68, 34, 0 }; +const uint8_t msgtxt_79[] = { +0 }; +const uint8_t msgtxt_80[] = { +0 }; +const uint8_t msgtxt_81[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, +}; + + +const uint8_t status[] = { +/* AUTO 15 WIRE CUT BOOM SOON*/ + 136, 15, + 14, 29, 0, 9, + 59, +/* AUTO 100 BOOOM SOON*/ + 179, + 14, 9, 6, 10, 0, 2, 0, 10, + 59, 3, 4, 74, +/* AUTO 30 STEAL TAPE PLAYER*/ + 144, 30, + 12, 3, 14, 42, 0, 3, 17, 3, + 59, +/* AUTO 100 DEC COUNTER*/ + 160, + 77, +/* AUTO 9 BOOOM*/ + 135, 9, + 1, 10, + 70, 66, 12, 63, +/* AUTO 100 MSG DOOM*/ + 174, + 15, 40, 16, 0, 6, 10, + 123, 78, 124, +/* AUTO 100 FIRST IN*/ + 175, + 9, 12, 0, 12, 32, 44, + 34, 118, 58, 79, +/* AUTO 30 SABETOUR*/ + 149, 30, + 14, 42, 7, 10, 0, 42, 0, 10, 47, 19, + 62, 50, +/* AUTO 30 SABETOUR*/ + 149, 30, + 14, 42, 7, 4, 0, 42, 0, 4, 47, 19, + 62, 50, +/* AUTO 30 SABETOUR*/ + 149, 30, + 14, 42, 7, 3, 0, 42, 0, 3, 47, 19, + 62, 50, +/* AUTO 25 VOICE*/ + 133, 25, + 4, 10, + 18, 19, +/* AUTO 15 RAN IN AND LEFT*/ + 132, 15, + 14, 42, + 119, +/* AUTO 25 SHOW AUTHORIZATION*/ + 133, 25, + 4, 9, + 18, 19, +/* AUTO 25 SHOW AUTHORIZATION*/ + 133, 25, + 4, 11, + 18, 19, +/* AUTO 80 TV*/ + 136, 80, + 4, 13, 8, 13, + 112, +/* AUTO 40 TV*/ + 136, 40, + 4, 13, 9, 13, + 113, +/* AUTO 100 ALREADY SET DETECTOR*/ + 172, + 8, 1, 1, 9, 0, 1, + 60, +/* AUTO 100 DITTO*/ + 172, + 8, 2, 1, 2, 0, 2, + 60, +/* AUTO 100 SET GREEN*/ + 183, + 8, 1, 0, 9, 13, 9, 0, 2, 0, 1, + 3, 72, 14, 60, +/* AUTO 100 SET YELLO*/ + 183, + 8, 2, 13, 9, 0, 9, 0, 2, 0, 2, + 3, 72, 15, 60, +/* AUTO 80 PAIL*/ + 146, 80, + 4, 21, 1, 24, 0, 24, 0, 30, + 72, 31, 47, +/* AUTO 80 NO SUIT*/ + 138, 80, + 4, 21, 1, 27, + 32, 33, 63, +/* AUTO 80 NO SUIT*/ + 138, 80, + 4, 21, 13, 27, + 35, 33, 63, +/* AUTO 100 BOMB TRIGGED*/ + 168, + 15, 0, 0, 9, + 59, +/* AUTO 0 .*/ +}; +const uint8_t actions[] = { +/* SHO PIC NEED SAB TOO*/ + 18, 34, 14, + 4, 13, 12, 42, 3, 41, 8, 13, + 18, 20, 121, +/* REA LEA .*/ + 5, 24, 52, + 3, 49, + 70, 122, +/* AUTO 0 .*/ +/* FRI MOP .*/ + 13, 54, 42, + 3, 16, 14, 11, 0, 11, + 53, 51, +/* AUTO 0 .*/ +/* OPE DOO .*/ + 6, 43, 20, + 7, 15, + 6, 7, 17, +/* PRE WHI GIVE BADGES*/ + 19, 25, 10, + 6, 9, 2, 6, 0, 1, 0, 1, + 58, 54, 73, 5, +/* AUTO 0 SECURITY BADGE*/ + 210, + 2, 1, 0, 1, 0, 4, 0, 5, + 62, 54, 11, +/* AUTO 0 MAINTANCE BADGE*/ + 210, + 2, 8, 0, 8, 0, 4, 0, 5, + 62, 54, 11, +/* AUTO 0 VISITOR BADGE*/ + 210, + 2, 7, 0, 7, 0, 4, 0, 5, + 62, 54, 11, +/* AUTO 0 NO PIC*/ + 202, + 4, 1, 0, 5, + 54, 2, 16, +/* CLE ANY */ + 9, 13, 0, + 3, 16, 13, 11, + 117, 2, +/* JUM ANY */ + 10, 32, 0, + 4, 16, 0, 9, + 104, 12, 63, +/* AUTO 0 */ +/* LOO MOP */ + 8, 40, 42, + 3, 16, 14, 11, + 105, +/* PRE RED DANGER*/ + 13, 25, 9, + 2, 6, 0, 2, 6, 2, + 58, 5, +/* UNL BUT .*/ + 0, 37, 19, + 48, +/* PRE BLU LOCKED*/ + 9, 25, 11, + 9, 4, 2, 6, + 6, 7, +/* PRE YEL LOCKED*/ + 9, 25, 12, + 9, 3, 2, 6, + 6, 7, +/* PRE BLU MOVE PICTURE*/ + 17, 25, 11, + 2, 6, 14, 1, 0, 1, 0, 1, + 62, 5, +/* PRE BUT */ + 0, 25, 19, + 48, +/* PRE YEL MOVE PIC*/ + 17, 25, 12, + 2, 6, 14, 8, 0, 8, 0, 1, + 62, 5, +/* PRE RED CLICK?*/ + 13, 25, 9, + 2, 6, 0, 9, 1, 2, + 5, 59, +/* PRE ANY .*/ + 4, 25, 0, + 2, 6, + 5, +/* ACT UP STAND UP*/ + 10, 57, 5, + 4, 5, 0, 4, + 54, 70, 64, +/* GET TAP TAPE*/ + 8, 10, 7, + 3, 3, 0, 3, + 52, +/* GET UP STAND UP*/ + 10, 10, 5, + 4, 5, 0, 4, + 54, 70, 64, +/* INV ANY */ + 5, 5, 0, + 13, 27, + 70, 66, +/* INV ANY */ + 6, 5, 0, + 14, 27, + 70, 66, 36, +/* LOO TAP */ + 4, 40, 7, + 3, 3, + 109, +/* SAV GAM */ + 0, 49, 13, + 71, +/* QUI ANY */ + 1, 50, 0, + 12, 63, +/* LOO SAB */ + 5, 40, 39, + 3, 42, + 116, 110, +/* PRE GRE MOVIE*/ + 11, 25, 46, + 2, 15, 13, 20, + 27, 16, 28, 29, +/* PRE GRE MOVIE*/ + 11, 25, 46, + 2, 15, 14, 20, + 70, 27, 30, 29, +/* ACT TAP */ + 6, 57, 7, + 3, 3, + 70, 1, 13, +/* UNL ANY */ + 18, 37, 0, + 2, 6, 3, 11, 0, 4, 9, 4, + 58, 9, 8, +/* UNL ANY UNLOCK*/ + 18, 37, 0, + 2, 6, 3, 12, 0, 3, 9, 3, + 58, 10, 8, +/* GET INV */ + 5, 10, 47, + 13, 27, + 70, 66, +/* GET INV */ + 6, 10, 47, + 14, 27, + 70, 66, 36, +/* PRE WHI */ + 10, 25, 10, + 4, 13, 0, 9, + 5, 54, 21, +/* PRE YEL */ + 11, 25, 12, + 4, 14, 0, 10, + 70, 5, 21, 54, +/* GO WIN BOOM SOON*/ + 19, 1, 21, + 2, 17, 8, 13, 0, 9, 0, 16, + 59, 54, 70, 64, +/* GO WIN THRU WINDOW SAFE*/ + 14, 1, 21, + 2, 17, 9, 13, 0, 16, + 54, 70, 64, +/* GO WIN */ + 10, 1, 21, + 4, 16, 0, 13, + 54, 70, 64, +/* PRE BLU */ + 11, 25, 11, + 4, 15, 0, 11, + 70, 5, 21, 54, +/* LOA ANY */ + 23, 29, 0, + 3, 22, 3, 20, 0, 20, 0, 21, 0, 22, + 72, 59, 70, 64, +/* UNL ANY UNLOAD MOVIE*/ + 19, 37, 0, + 3, 21, 0, 22, 0, 21, 0, 20, + 52, 72, 70, 64, +/* BRE BOM */ + 9, 45, 29, + 3, 28, 0, 8, + 24, 58, +/* WIT ANY END IS NEAR*/ + 19, 15, 0, + 8, 8, 0, 8, 0, 9, 3, 28, + 60, 105, 59, 104, +/* GET BOM */ + 12, 10, 29, + 2, 28, 14, 29, 0, 28, + 52, +/* CHA ANY */ + 0, 22, 0, + 120, +/* GET BOM */ + 10, 10, 29, + 2, 28, 14, 43, + 0, 6, 103, +/* DRO BOM BOOM NEAR*/ + 15, 18, 29, + 1, 28, 0, 9, 0, 28, + 105, 59, 104, 53, +/* POU ANY */ + 15, 6, 0, + 4, 19, 3, 24, 3, 28, + 70, 44, 45, 63, +/* POU ANY WON!!!*/ + 14, 6, 0, + 4, 20, 3, 24, 3, 28, + 44, 46, 63, +/* BRE WIR */ + 23, 45, 31, + 2, 29, 3, 26, 0, 43, 0, 29, 0, 2, + 72, 58, 70, 64, +/* DRO MOP */ + 14, 18, 42, + 1, 16, 14, 11, 0, 16, + 16, 105, 53, +/* POU ANY */ + 13, 6, 0, + 3, 24, 0, 24, 0, 23, + 72, 47, +/* SHO PIC */ + 15, 34, 14, + 4, 9, 1, 7, 0, 13, + 18, 128, 21, 54, +/* SHO PIC */ + 15, 34, 14, + 4, 9, 1, 8, 0, 13, + 18, 128, 21, 54, +/* SHO PIC */ + 15, 34, 14, + 4, 9, 1, 1, 0, 13, + 18, 128, 21, 54, +/* DRO MOP */ + 12, 18, 42, + 1, 16, 13, 11, 0, 16, + 53, +/* SHO PIC */ + 15, 34, 14, + 4, 10, 1, 1, 0, 14, + 18, 128, 21, 54, +/* SHO PIC */ + 15, 34, 14, + 4, 10, 1, 8, 0, 14, + 18, 128, 21, 54, +/* SHO PIC */ + 15, 34, 14, + 4, 11, 1, 1, 0, 15, + 18, 128, 21, 54, +/* SHO PIC */ + 6, 34, 14, + 4, 10, + 70, 18, 20, +/* SHO PIC */ + 6, 34, 14, + 4, 9, + 70, 18, 20, +/* SHO PIC */ + 6, 34, 14, + 4, 11, + 70, 18, 20, +/* CLE ANY */ + 9, 13, 0, + 3, 16, 14, 11, + 104, 105, +/* BRE WIN */ + 18, 45, 21, + 2, 14, 0, 7, 0, 10, 3, 3, + 24, 58, 58, +/* WIT TAP BREAK WINDOW*/ + 23, 15, 7, + 2, 14, 3, 3, 8, 7, 0, 3, 0, 1, + 73, 62, 70, 26, +/* AUTO 0 */ + 215, + 0, 7, 0, 2, 0, 17, 0, 14, 0, 13, + 60, 58, 72, 58, +/* GET CHA */ + 1, 10, 33, + 6, 37, +/* LOO WIN */ + 4, 40, 21, + 4, 13, + 22, +/* SCO ANY */ + 1, 51, 0, + 70, 23, +/* SIT ANY */ + 10, 36, 0, + 2, 5, 0, 5, + 70, 54, 64, +/* OPE WIN */ + 2, 43, 21, + 6, 7, 17, +/* BRE MOP */ + 14, 45, 42, + 3, 16, 0, 10, 0, 11, + 58, 58, 24, +/* WIT CUT */ + 23, 15, 32, + 3, 26, 8, 11, 0, 11, 0, 10, 0, 11, + 53, 51, 60, 60, +/* UNL WIN */ + 1, 37, 21, + 2, 17, +/* AUTO 0 AUT*/ +/* SHO PIC */ + 18, 34, 14, + 3, 42, 0, 13, 4, 13, 3, 41, + 60, 18, 106, +/* GO CHA */ + 4, 1, 33, + 4, 4, + 114, +/* LOO CHA .*/ + 4, 40, 33, + 4, 4, + 114, +/* LOO BOM */ + 4, 40, 29, + 3, 28, + 111, +/* LOO DET */ + 0, 40, 30, + 66, +/* DRO SUI */ + 8, 18, 48, + 14, 27, 0, 27, + 53, +/* DRO SUI */ + 8, 18, 48, + 1, 27, 0, 27, + 53, +/* LOO WIN */ + 5, 40, 21, + 4, 22, + 70, 49, +/* GET WAT */ + 16, 10, 28, + 3, 23, 2, 25, 0, 23, 0, 24, + 72, +/* WEA SUI PUT ON SUIT*/ + 8, 52, 48, + 3, 27, 0, 27, + 59, +/* GET TAP */ + 5, 10, 7, + 2, 33, + 6, 37, +/* OPE DOO */ + 5, 43, 20, + 2, 33, + 6, 37, +/* GO DOO */ + 8, 1, 20, + 2, 33, 1, 28, + 38, +/* GO DOO */ + 10, 1, 20, + 2, 33, 0, 15, + 70, 54, 64, +/* OPE DOO OPE*/ + 7, 43, 20, + 2, 35, + 16, 39, 40, 37, +/* PRE DOO */ + 7, 25, 20, + 2, 35, + 16, 39, 40, 37, +/* PRE HAR */ + 15, 25, 51, + 2, 35, 5, 36, 0, 36, + 39, 41, 42, 53, +/* PRE HAR */ + 11, 25, 51, + 2, 35, 2, 36, + 16, 39, 41, 37, +/* GO DOO */ + 14, 1, 20, + 2, 35, 2, 36, 0, 19, + 54, 70, 64, +/* GO DOO */ + 9, 1, 20, + 2, 35, 5, 36, + 6, 43, +/* KIC DOO */ + 14, 31, 20, + 2, 35, 5, 36, 0, 36, + 127, 42, 53, +/* CLO DOO */ + 0, 42, 20, + 37, +/* SUI UP */ + 8, 33, 5, + 3, 27, 0, 27, + 59, +/* SHO PIC */ + 9, 34, 14, + 4, 13, 8, 13, + 18, 20, +/* UNL DOO */ + 1, 37, 20, + 2, 17, +/* FRI SAB */ + 23, 54, 39, + 3, 42, 14, 39, 0, 39, 0, 40, 0, 41, + 53, 53, 53, 73, +/* AUTO 0 FRISKING SABOTEUR*/ + 207, + 0, 0, 0, 37, 0, 49, + 53, 53, 51, 53, +/* AUTO 0 RETURN STOLEN TAPE TOO*/ + 200, + 14, 3, 0, 3, + 53, +/* KNO ANY */ + 6, 53, 0, + 4, 9, + 70, 18, 19, +/* HEL ANY */ + 0, 9, 0, + 115, +/* PUL ANY */ + 0, 35, 0, + 37, +/* PRE ANY */ + 0, 25, 0, + 2, +/* KNO ANY */ + 6, 53, 0, + 4, 10, + 70, 18, 19, +/* KNO ANY */ + 6, 53, 0, + 4, 11, + 70, 18, 19, +/* KNO ANY */ + 0, 53, 0, + 2, +/* WIT ANY */ + 4, 15, 0, + 9, 10, + 117, +/* WIT HAN .*/ + 10, 15, 53, + 8, 10, 0, 10, + 60, 127, 2, +/* FRI ANY */ + 0, 54, 0, + 2, +/* KIC ANY */ + 1, 31, 0, + 127, 2, +/* SHO ANY */ + 1, 34, 0, + 16, 2, +/* REA ANY */ + 1, 24, 0, + 6, 102, +/* FIN ANY */ + 1, 38, 0, + 6, 107, +/* BRE ANY */ + 5, 45, 0, + 0, 10, + 24, 58, +/* WIT ANY */ + 11, 15, 0, + 8, 10, 0, 10, + 60, 16, 2, 25, +/* ACT ANY */ + 0, 57, 0, + 108, +/* WAI ANY */ + 5, 28, 0, + 0, 30, + 83, 125, +/* UNA ANY */ + 0, 16, 0, + 108, +/* LOO LEA */ + 4, 40, 52, + 3, 49, + 126, +/* LOO CAM */ + 8, 40, 37, + 4, 13, 8, 13, + 112, +/* LOO CAM */ + 8, 40, 37, + 4, 13, 9, 13, + 113, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* LOO ANY */ + 1, 40, 0, + 116, 76, + 255, +}; + + +const uint8_t verbs[] = { + /* AUT */ + 65, 85, 84, + /* GO */ + 71, 79, 32, + /* *ENT */ + 197, 78, 84, + /* *WAL */ + 215, 65, 76, + /* *RUN */ + 210, 85, 78, + /* INV */ + 73, 78, 86, + /* POU */ + 80, 79, 85, + /* *SPI */ + 211, 80, 73, + /* *EMP */ + 197, 77, 80, + /* HEL */ + 72, 69, 76, + /* GET */ + 71, 69, 84, + /* *TAK */ + 212, 65, 75, + /* *MOV */ + 205, 79, 86, + /* CLE */ + 67, 76, 69, + /* *MOP */ + 205, 79, 80, + /* WIT */ + 87, 73, 84, + /* UNA */ + 85, 78, 65, + /* *DIS */ + 196, 73, 83, + /* DRO */ + 68, 82, 79, + /* *PUT */ + 208, 85, 84, + /* *LEA */ + 204, 69, 65, + /* *REM */ + 210, 69, 77, + /* CHA */ + 67, 72, 65, + /* *FOL */ + 198, 79, 76, + /* REA */ + 82, 69, 65, + /* PRE */ + 80, 82, 69, + /* *TOU */ + 212, 79, 85, + /* *PUS */ + 208, 85, 83, + /* WAI */ + 87, 65, 73, + /* LOA */ + 76, 79, 65, + /* *INS */ + 201, 78, 83, + /* KIC */ + 75, 73, 67, + /* JUM */ + 74, 85, 77, + /* SUI */ + 83, 85, 73, + /* SHO */ + 83, 72, 79, + /* PUL */ + 80, 85, 76, + /* SIT */ + 83, 73, 84, + /* UNL */ + 85, 78, 76, + /* FIN */ + 70, 73, 78, + /* *LOC */ + 204, 79, 67, + /* LOO */ + 76, 79, 79, + /* *EXA */ + 197, 88, 65, + /* CLO */ + 67, 76, 79, + /* OPE */ + 79, 80, 69, + /* . */ + 46, 32, 32, + /* BRE */ + 66, 82, 69, + /* *SMA */ + 211, 77, 65, + /* *CUT */ + 195, 85, 84, + /* *UNB */ + 213, 78, 66, + /* SAV */ + 83, 65, 86, + /* QUI */ + 81, 85, 73, + /* SCO */ + 83, 67, 79, + /* WEA */ + 87, 69, 65, + /* KNO */ + 75, 78, 79, + /* FRI */ + 70, 82, 73, + /* *SEA */ + 211, 69, 65, + /* *SHA */ + 211, 72, 65, + /* ACT */ + 65, 67, 84, + /* *STA */ + 211, 84, 65, + /* *PLA */ + 208, 76, 65, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, + /* NORTH */ + 78, 79, 82, + /* SOUTH */ + 83, 79, 85, + /* EAST */ + 69, 65, 83, + /* WEST */ + 87, 69, 83, + /* UP */ + 85, 80, 32, + /* DOWN */ + 68, 79, 87, + /* TAP */ + 84, 65, 80, + /* *REC */ + 210, 69, 67, + /* RED */ + 82, 69, 68, + /* WHI */ + 87, 72, 73, + /* BLU */ + 66, 76, 85, + /* YEL */ + 89, 69, 76, + /* GAM */ + 71, 65, 77, + /* PIC */ + 80, 73, 67, + /* *PAS */ + 208, 65, 83, + /* *BAD */ + 194, 65, 68, + /* *AUT */ + 193, 85, 84, + /* ARO */ + 65, 82, 79, + /* BUT */ + 66, 85, 84, + /* DOO */ + 68, 79, 79, + /* WIN */ + 87, 73, 78, + /* *GLA */ + 199, 76, 65, + /* YAR */ + 89, 65, 82, + /* FIL */ + 70, 73, 76, + /* *CAR */ + 195, 65, 82, + /* PRO */ + 80, 82, 79, + /* CAS */ + 67, 65, 83, + /* WAT */ + 87, 65, 84, + /* BOM */ + 66, 79, 77, + /* DET */ + 68, 69, 84, + /* WIR */ + 87, 73, 82, + /* CUT */ + 67, 85, 84, + /* CHA */ + 67, 72, 65, + /* KEY */ + 75, 69, 89, + /* ENV */ + 69, 78, 86, + /* *MAN */ + 205, 65, 78, + /* CAM */ + 67, 65, 77, + /* *BOX */ + 194, 79, 88, + /* SAB */ + 83, 65, 66, + /* *HIM */ + 200, 73, 77, + /* *THE */ + 212, 72, 69, + /* MOP */ + 77, 79, 80, + /* MAP */ + 77, 65, 80, + /* PAI */ + 80, 65, 73, + /* *PLA */ + 208, 76, 65, + /* GRE */ + 71, 82, 69, + /* INV */ + 73, 78, 86, + /* SUI */ + 83, 85, 73, + /* *ANT */ + 193, 78, 84, + /* *RAD */ + 210, 65, 68, + /* HAR */ + 72, 65, 82, + /* LEA */ + 76, 69, 65, + /* HAN */ + 72, 65, 78, + /* *FIS */ + 198, 73, 83, + /* *FOO */ + 198, 79, 79, + /* *FEE */ + 198, 69, 69, + /* FLO */ + 70, 76, 79, + /* *WAL */ + 215, 65, 76, + /* VAT */ + 86, 65, 84, + /* DIA */ + 68, 73, 65, + /* *GAU */ + 199, 65, 85, + /* DEB */ + 68, 69, 66, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* MAP */ + 77, 65, 80, + 0, + /* PIC */ + 80, 73, 67, + 1, + /* TAP */ + 84, 65, 80, + 3, + /* PIC */ + 80, 73, 67, + 7, + /* PIC */ + 80, 73, 67, + 8, + /* KEY */ + 75, 69, 89, + 11, + /* KEY */ + 75, 69, 89, + 12, + /* MOP */ + 77, 79, 80, + 16, + /* WIN */ + 87, 73, 78, + 19, + /* FIL */ + 70, 73, 76, + 22, + /* PAI */ + 80, 65, 73, + 23, + /* PAI */ + 80, 65, 73, + 24, + /* CUT */ + 67, 85, 84, + 26, + /* SUI */ + 83, 85, 73, + 27, + /* PAI */ + 80, 65, 73, + 30, + /* CAS */ + 67, 65, 83, + 37, + /* ENV */ + 69, 78, 86, + 39, + /* YAR */ + 89, 65, 82, + 40, + /* PIC */ + 80, 73, 67, + 41, + /* SAB */ + 83, 65, 66, + 42, + /* LEA */ + 76, 69, 65, + 49, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv04.c b/Applications/games/adv04.c new file mode 100644 index 00000000..e8c8829b --- /dev/null +++ b/Applications/games/adv04.c @@ -0,0 +1,3037 @@ +#define NUM_OBJ 65 +#define WORDSIZE 3 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 0; +const uint8_t maxcar = 9; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 25; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +99, 104, 97, 112, 101, 108, 0 }; +const uint8_t loctxt_2[] = { +68, 105, 110, 103, 121, 32, 76, 111, 111, 107, 105, 110, 103, 32, 83, 116, 97, 105, 114, 119, 101, 108, 108, 0 }; +const uint8_t loctxt_3[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_4[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_5[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 105, 110, 32, 77, 101, 100, 105, 117, 109, 32, 77, 97, 101, 103, 101, 110, 39, 115, 32, 77, 97, 100, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_7[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_8[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_9[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_10[] = { +66, 97, 108, 108, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_11[] = { +100, 117, 110, 103, 101, 111, 110, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 65, 114, 109, 111, 114, 121, 0 }; +const uint8_t loctxt_13[] = { +116, 111, 114, 116, 117, 114, 101, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_14[] = { +67, 104, 105, 109, 110, 101, 121, 0 }; +const uint8_t loctxt_15[] = { +108, 97, 114, 103, 101, 32, 102, 105, 114, 101, 112, 108, 97, 99, 101, 0 }; +const uint8_t loctxt_16[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_17[] = { +76, 97, 98, 0 }; +const uint8_t loctxt_18[] = { +110, 97, 114, 114, 111, 119, 32, 112, 97, 114, 116, 32, 111, 102, 32, 116, 104, 101, 32, 99, 104, 105, 109, 110, 101, 121, 0 }; +const uint8_t loctxt_19[] = { +71, 114, 97, 118, 101, 121, 97, 114, 100, 0 }; +const uint8_t loctxt_20[] = { +112, 97, 114, 108, 111, 114, 0 }; +const uint8_t loctxt_21[] = { +74, 97, 105, 108, 32, 67, 101, 108, 108, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_23[] = { +104, 105, 100, 100, 101, 110, 32, 86, 79, 79, 68, 79, 79, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_24[] = { +114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_25[] = { +108, 111, 116, 32, 111, 102, 32, 84, 82, 79, 85, 66, 76, 69, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 9, 2, 4, 10, 0, 0 } }, + { loctxt_2, { 1, 24, 3, 11, 0, 0 } }, + { loctxt_3, { 5, 0, 0, 2, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 1, 0, 0 } }, + { loctxt_5, { 0, 3, 7, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 8, 0, 0 } }, + { loctxt_7, { 0, 0, 17, 5, 0, 0 } }, + { loctxt_8, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_9, { 0, 1, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 0, 1, 0, 0, 0 } }, + { loctxt_11, { 0, 13, 2, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 13, 0, 0 } }, + { loctxt_13, { 11, 0, 12, 0, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 15 } }, + { loctxt_15, { 0, 10, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 3, 0 } }, + { loctxt_17, { 0, 0, 0, 7, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 14 } }, + { loctxt_19, { 0, 0, 13, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 2 } }, + { loctxt_21, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_22, { 0, 9, 0, 0, 0, 0 } }, + { loctxt_23, { 0, 8, 0, 0, 0, 0 } }, + { loctxt_24, { 2, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 4, + 0, + 8, + 5, + 2, + 3, + 0, + 12, + 2, + 0, + 9, + 0, + 15, + 0, + 0, + 19, + 7, + 1, + 6, + 0, + 10, + 14, + 13, + 0, + 4, + 0, + 17, + 0, + 0, + 0, + 8, + 0, + 16, + 12, + 0, + 18, + 17, + 0, + 17, + 11, + 0, + 0, + 0, + 15, + 22, + 0, + 14, + 0, + 0, + 19, + 0, + 0, + 0, + 20, + 0, + 0, + 11, + 12, + 21, + 0, + 21, + 8, + 8, + 0, + 23, + 0, +}; + + +const uint8_t objtxt_0[] = { +66, 108, 111, 111, 100, 121, 32, 75, 110, 105, 102, 101, 0 }; +const uint8_t objtxt_1[] = { +76, 101, 100, 103, 101, 0 }; +const uint8_t objtxt_2[] = { +80, 108, 97, 113, 117, 101, 0 }; +const uint8_t objtxt_3[] = { +65, 110, 105, 109, 97, 108, 32, 104, 101, 97, 100, 115, 0 }; +const uint8_t objtxt_4[] = { +66, 114, 111, 107, 101, 110, 32, 103, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_5[] = { +66, 105, 103, 32, 107, 101, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_6[] = { +68, 97, 114, 107, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_7[] = { +83, 104, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_8[] = { +83, 116, 97, 105, 114, 115, 0 }; +const uint8_t objtxt_9[] = { +66, 114, 105, 103, 104, 116, 108, 121, 32, 103, 108, 111, 119, 105, 110, 103, 32, 105, 100, 111, 108, 0 }; +const uint8_t objtxt_10[] = { +79, 112, 101, 110, 32, 87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_11[] = { +68, 97, 114, 107, 32, 67, 104, 105, 109, 110, 101, 121, 0 }; +const uint8_t objtxt_12[] = { +67, 108, 111, 115, 101, 100, 32, 70, 108, 117, 101, 0 }; +const uint8_t objtxt_13[] = { +79, 112, 101, 110, 32, 70, 108, 117, 101, 0 }; +const uint8_t objtxt_14[] = { +70, 111, 117, 114, 32, 108, 101, 97, 102, 32, 99, 108, 111, 118, 101, 114, 0 }; +const uint8_t objtxt_15[] = { +71, 114, 65, 118, 101, 115, 0 }; +const uint8_t objtxt_16[] = { +67, 97, 115, 116, 32, 105, 114, 111, 110, 32, 112, 111, 116, 0 }; +const uint8_t objtxt_17[] = { +67, 108, 111, 115, 101, 100, 32, 67, 111, 102, 102, 105, 110, 0 }; +const uint8_t objtxt_18[] = { +67, 114, 121, 115, 116, 97, 108, 32, 66, 97, 108, 108, 0 }; +const uint8_t objtxt_19[] = { +67, 108, 111, 115, 101, 100, 32, 87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_20[] = { +76, 97, 114, 103, 101, 32, 102, 105, 114, 101, 112, 108, 97, 99, 101, 0 }; +const uint8_t objtxt_21[] = { +83, 111, 111, 116, 0 }; +const uint8_t objtxt_22[] = { +84, 105, 110, 121, 32, 111, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_23[] = { +83, 112, 105, 114, 105, 116, 32, 77, 101, 100, 105, 117, 109, 0 }; +const uint8_t objtxt_24[] = { +77, 97, 115, 115, 105, 118, 101, 32, 115, 116, 111, 110, 101, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 97, 32, 83, 65, 80, 80, 72, 73, 82, 69, 32, 115, 101, 116, 32, 105, 110, 116, 111, 32, 105, 116, 0 }; +const uint8_t objtxt_25[] = { +83, 97, 112, 112, 104, 105, 114, 101, 32, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_26[] = { +74, 117, 45, 74, 117, 32, 98, 97, 103, 0 }; +const uint8_t objtxt_27[] = { +79, 112, 101, 110, 32, 67, 111, 102, 102, 105, 110, 0 }; +const uint8_t objtxt_28[] = { +83, 108, 105, 99, 107, 32, 99, 104, 117, 116, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 100, 111, 119, 110, 119, 97, 114, 100, 0 }; +const uint8_t objtxt_29[] = { +74, 117, 45, 74, 117, 32, 109, 97, 110, 0 }; +const uint8_t objtxt_30[] = { +83, 108, 105, 112, 112, 101, 114, 121, 32, 99, 104, 117, 116, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 117, 112, 0 }; +const uint8_t objtxt_31[] = { +87, 105, 100, 101, 32, 99, 114, 97, 99, 107, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_32[] = { +82, 97, 98, 98, 105, 116, 39, 115, 32, 102, 111, 111, 116, 0 }; +const uint8_t objtxt_33[] = { +68, 117, 108, 108, 32, 38, 32, 98, 114, 111, 107, 101, 110, 32, 115, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_34[] = { +79, 112, 101, 110, 32, 83, 65, 102, 101, 0 }; +const uint8_t objtxt_35[] = { +83, 116, 117, 99, 107, 32, 67, 104, 105, 109, 110, 101, 121, 32, 83, 119, 101, 101, 112, 0 }; +const uint8_t objtxt_36[] = { +67, 104, 101, 109, 32, 116, 117, 98, 101, 115, 0 }; +const uint8_t objtxt_37[] = { +67, 108, 111, 115, 101, 100, 32, 83, 65, 102, 101, 0 }; +const uint8_t objtxt_38[] = { +76, 97, 98, 101, 108, 101, 100, 32, 99, 104, 101, 109, 105, 99, 97, 108, 115, 0 }; +const uint8_t objtxt_39[] = { +80, 111, 99, 107, 101, 116, 32, 83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_40[] = { +77, 105, 120, 101, 100, 32, 67, 104, 101, 109, 105, 99, 97, 108, 115, 0 }; +const uint8_t objtxt_41[] = { +87, 105, 100, 101, 32, 111, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_42[] = { +78, 97, 105, 108, 115, 0 }; +const uint8_t objtxt_43[] = { +68, 117, 115, 116, 121, 32, 73, 100, 111, 108, 0 }; +const uint8_t objtxt_44[] = { +68, 111, 108, 108, 0 }; +const uint8_t objtxt_45[] = { +87, 111, 111, 100, 101, 110, 32, 98, 111, 97, 114, 100, 115, 0 }; +const uint8_t objtxt_46[] = { +87, 111, 111, 100, 32, 98, 111, 97, 114, 100, 115, 32, 110, 97, 105, 108, 101, 100, 32, 116, 111, 32, 99, 104, 105, 109, 110, 101, 121, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_47[] = { +65, 110, 116, 105, 113, 117, 101, 32, 104, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_48[] = { +71, 114, 65, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_49[] = { +82, 117, 115, 116, 105, 110, 103, 32, 83, 65, 87, 0 }; +const uint8_t objtxt_50[] = { +66, 117, 116, 116, 111, 110, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_51[] = { +80, 97, 112, 101, 114, 0 }; +const uint8_t objtxt_52[] = { +86, 111, 111, 100, 111, 111, 32, 98, 111, 111, 107, 0 }; +const uint8_t objtxt_53[] = { +74, 117, 45, 74, 117, 32, 109, 97, 110, 32, 115, 116, 97, 116, 117, 101, 0 }; +const uint8_t objtxt_54[] = { +83, 116, 105, 99, 107, 0 }; +const uint8_t objtxt_55[] = { +79, 112, 101, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_56[] = { +79, 112, 101, 110, 32, 106, 97, 105, 108, 32, 99, 101, 108, 108, 0 }; +const uint8_t objtxt_57[] = { +75, 110, 105, 103, 104, 116, 39, 115, 32, 83, 117, 105, 116, 32, 111, 102, 32, 65, 114, 109, 111, 114, 0 }; +const uint8_t objtxt_58[] = { +67, 108, 111, 115, 101, 100, 32, 99, 101, 108, 108, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_59[] = { +66, 114, 111, 107, 101, 110, 32, 103, 114, 97, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_60[] = { +65, 100, 118, 101, 114, 116, 105, 115, 105, 110, 103, 32, 108, 101, 97, 102, 108, 101, 116, 0 }; +const uint8_t objtxt_61[] = { +67, 114, 97, 99, 107, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_62[] = { +72, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_63[] = { +80, 105, 101, 99, 101, 115, 32, 111, 102, 32, 114, 111, 99, 107, 0 }; +const uint8_t objtxt_64[] = { +80, 97, 103, 101, 32, 116, 111, 114, 110, 32, 102, 114, 111, 109, 32, 97, 32, 98, 111, 111, 107, 0 }; +const uint8_t objtxt_65[] = { +83, 109, 105, 108, 105, 110, 103, 32, 67, 111, 117, 110, 116, 32, 67, 114, 105, 115, 116, 111, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +67, 111, 117, 110, 116, 32, 67, 114, 105, 115, 116, 111, 39, 115, 32, 98, 101, 101, 110, 32, 67, 85, 82, 83, 69, 68, 33, 32, 84, 104, 101, 114, 101, 39, 115, 32, 111, 110, 101, 32, 119, 97, 121, 32, 102, 111, 114, 32, 104, 105, 109, 32, 116, 111, 32, 102, 108, 101, 101, 33, 10, 70, 105, 110, 100, 32, 105, 116, 44, 32, 97, 110, 100, 32, 104, 101, 39, 108, 108, 32, 103, 111, 32, 70, 82, 69, 69, 33, 0 }; +const uint8_t msgtxt_2[] = { +73, 116, 32, 98, 101, 108, 111, 110, 103, 115, 32, 116, 111, 32, 116, 104, 101, 32, 109, 101, 100, 105, 117, 109, 0 }; +const uint8_t msgtxt_3[] = { +83, 112, 105, 114, 105, 116, 32, 118, 105, 98, 114, 97, 116, 105, 111, 110, 115, 32, 100, 114, 105, 118, 101, 32, 109, 101, 32, 102, 114, 111, 109, 32, 114, 111, 111, 109, 46, 0 }; +const uint8_t msgtxt_4[] = { +80, 114, 105, 110, 116, 115, 32, 116, 111, 111, 32, 115, 109, 97, 108, 108, 32, 102, 111, 114, 32, 116, 104, 101, 32, 117, 110, 97, 105, 100, 101, 100, 32, 101, 121, 101, 46, 0 }; +const uint8_t msgtxt_5[] = { +73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 0 }; +const uint8_t msgtxt_6[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 0 }; +const uint8_t msgtxt_7[] = { +87, 105, 110, 100, 111, 119, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t msgtxt_8[] = { +87, 105, 110, 100, 111, 119, 32, 106, 117, 115, 116, 32, 115, 108, 65, 109, 109, 101, 100, 32, 115, 104, 117, 116, 0 }; +const uint8_t msgtxt_9[] = { +70, 111, 114, 32, 97, 32, 114, 101, 97, 100, 105, 110, 103, 32, 106, 117, 115, 116, 32, 34, 83, 85, 77, 77, 79, 78, 32, 77, 69, 68, 73, 85, 77, 32, 77, 65, 69, 71, 69, 78, 34, 32, 116, 111, 100, 97, 121, 33, 33, 0 }; +const uint8_t msgtxt_10[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 118, 101, 114, 121, 32, 115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_11[] = { +80, 104, 111, 115, 112, 104, 111, 114, 101, 115, 99, 101, 110, 116, 32, 108, 101, 116, 116, 101, 114, 115, 32, 97, 114, 101, 32, 118, 101, 114, 121, 32, 104, 97, 114, 100, 32, 116, 111, 32, 114, 101, 97, 100, 32, 105, 110, 32, 98, 114, 105, 103, 104, 116, 32, 108, 105, 103, 104, 116, 33, 0 }; +const uint8_t msgtxt_12[] = { +65, 109, 111, 110, 103, 115, 116, 32, 116, 104, 101, 32, 71, 82, 65, 86, 69, 83, 32, 105, 115, 32, 97, 32, 102, 111, 117, 114, 32, 108, 101, 97, 102, 32, 99, 108, 111, 118, 101, 114, 46, 0 }; +const uint8_t msgtxt_13[] = { +82, 97, 118, 101, 110, 32, 99, 114, 121, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 111, 117, 116, 115, 105, 100, 101, 0 }; +const uint8_t msgtxt_14[] = { +79, 110, 101, 32, 111, 102, 32, 116, 104, 101, 32, 116, 101, 115, 116, 32, 116, 117, 98, 101, 115, 32, 69, 88, 80, 76, 79, 68, 69, 68, 33, 0 }; +const uint8_t msgtxt_15[] = { +84, 104, 105, 115, 32, 103, 108, 97, 115, 115, 32, 99, 97, 110, 39, 116, 32, 98, 101, 32, 98, 114, 111, 107, 101, 110, 0 }; +const uint8_t msgtxt_16[] = { +46, 0 }; +const uint8_t msgtxt_17[] = { +84, 104, 101, 121, 32, 97, 112, 112, 101, 97, 114, 32, 116, 111, 32, 98, 101, 32, 109, 105, 120, 97, 98, 108, 101, 46, 0 }; +const uint8_t msgtxt_18[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 114, 105, 116, 116, 101, 110, 32, 116, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_19[] = { +65, 32, 115, 101, 112, 117, 108, 99, 104, 114, 97, 108, 32, 118, 111, 105, 99, 101, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_20[] = { +79, 75, 0 }; +const uint8_t msgtxt_21[] = { +83, 97, 102, 101, 39, 115, 32, 99, 111, 109, 98, 105, 110, 97, 116, 105, 111, 110, 32, 108, 111, 99, 107, 32, 105, 115, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 102, 114, 111, 109, 32, 51, 51, 32, 116, 111, 32, 51, 56, 46, 0 }; +const uint8_t msgtxt_22[] = { +82, 105, 110, 103, 32, 103, 108, 111, 119, 115, 32, 98, 114, 105, 101, 102, 108, 121, 32, 38, 32, 100, 111, 111, 114, 32, 118, 97, 110, 105, 115, 104, 101, 115, 0 }; +const uint8_t msgtxt_23[] = { +79, 85, 67, 72, 0 }; +const uint8_t msgtxt_24[] = { +65, 32, 115, 105, 103, 110, 32, 104, 101, 114, 101, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_25[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 109, 97, 110, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_26[] = { +87, 101, 97, 114, 105, 110, 103, 32, 97, 32, 115, 97, 112, 112, 104, 105, 114, 101, 32, 114, 105, 110, 103, 0 }; +const uint8_t msgtxt_27[] = { +73, 32, 115, 108, 105, 100, 101, 32, 98, 97, 99, 107, 32, 100, 111, 119, 110, 0 }; +const uint8_t msgtxt_28[] = { +65, 32, 98, 101, 97, 109, 32, 111, 102, 32, 108, 105, 103, 104, 116, 32, 115, 104, 105, 110, 101, 115, 32, 111, 110, 32, 103, 114, 97, 118, 101, 0 }; +const uint8_t msgtxt_29[] = { +80, 105, 110, 115, 32, 102, 97, 108, 108, 32, 111, 117, 116, 32, 111, 102, 32, 100, 111, 108, 108, 0 }; +const uint8_t msgtxt_30[] = { +80, 108, 97, 113, 117, 101, 32, 115, 97, 121, 115, 58, 32, 34, 115, 97, 102, 101, 32, 45, 45, 62, 32, 51, 56, 32, 51, 51, 34, 0 }; +const uint8_t msgtxt_31[] = { +84, 104, 105, 115, 32, 103, 114, 65, 118, 101, 32, 114, 101, 115, 101, 114, 118, 101, 100, 32, 102, 111, 114, 32, 121, 111, 117, 33, 0 }; +const uint8_t msgtxt_32[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 67, 76, 65, 80, 32, 79, 70, 32, 84, 72, 85, 78, 68, 69, 82, 33, 0 }; +const uint8_t msgtxt_33[] = { +74, 117, 45, 74, 117, 32, 109, 97, 110, 32, 115, 97, 121, 115, 58, 34, 77, 121, 32, 98, 97, 103, 32, 105, 115, 32, 110, 111, 119, 32, 121, 111, 117, 114, 115, 33, 32, 73, 116, 115, 32, 109, 97, 103, 105, 99, 32, 119, 105, 108, 108, 32, 104, 101, 108, 112, 32, 121, 111, 117, 10, 32, 45, 67, 82, 65, 67, 75, 45, 32, 116, 104, 101, 32, 99, 117, 114, 115, 101, 33, 34, 46, 0 }; +const uint8_t msgtxt_34[] = { +72, 85, 82, 82, 65, 72, 33, 32, 76, 111, 111, 107, 32, 119, 104, 111, 32, 105, 115, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 33, 0 }; +const uint8_t msgtxt_35[] = { +73, 39, 109, 32, 110, 111, 119, 32, 52, 32, 102, 101, 101, 116, 32, 116, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_36[] = { +73, 116, 39, 115, 32, 109, 117, 99, 104, 32, 116, 111, 32, 104, 101, 97, 118, 121, 32, 116, 111, 32, 76, 73, 70, 84, 33, 0 }; +const uint8_t msgtxt_37[] = { +73, 39, 109, 32, 116, 111, 111, 32, 98, 105, 103, 0 }; +const uint8_t msgtxt_38[] = { +89, 111, 117, 32, 115, 116, 97, 114, 116, 108, 101, 100, 32, 109, 101, 100, 105, 117, 109, 32, 38, 32, 115, 104, 101, 32, 118, 97, 110, 105, 115, 104, 101, 100, 0 }; +const uint8_t msgtxt_39[] = { +79, 110, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_40[] = { +77, 97, 105, 100, 32, 99, 104, 97, 115, 101, 100, 32, 109, 101, 32, 119, 105, 116, 104, 32, 98, 114, 111, 111, 109, 32, 102, 111, 114, 32, 116, 114, 97, 99, 107, 105, 110, 103, 32, 115, 111, 111, 116, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 66, 97, 108, 108, 45, 10, 114, 111, 111, 109, 46, 32, 73, 32, 119, 111, 110, 100, 101, 114, 32, 119, 104, 101, 114, 101, 32, 73, 32, 97, 109, 63, 0 }; +const uint8_t msgtxt_41[] = { +83, 119, 101, 101, 112, 32, 112, 111, 112, 115, 32, 111, 117, 116, 44, 32, 116, 104, 97, 110, 107, 115, 32, 109, 101, 44, 32, 104, 97, 110, 100, 115, 32, 109, 101, 32, 97, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 112, 97, 112, 101, 114, 32, 116, 104, 101, 110, 10, 118, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_42[] = { +65, 115, 32, 73, 32, 100, 117, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 73, 100, 111, 108, 32, 105, 116, 32, 98, 101, 103, 105, 110, 115, 32, 116, 111, 32, 103, 108, 111, 119, 33, 0 }; +const uint8_t msgtxt_43[] = { +72, 101, 39, 115, 32, 119, 101, 97, 114, 105, 110, 103, 32, 97, 32, 114, 97, 98, 98, 105, 116, 39, 115, 32, 102, 111, 111, 116, 0 }; +const uint8_t msgtxt_44[] = { +46, 0 }; +const uint8_t msgtxt_45[] = { +72, 69, 76, 80, 32, 77, 69, 44, 32, 73, 39, 109, 32, 115, 116, 117, 99, 107, 33, 0 }; +const uint8_t msgtxt_46[] = { +76, 117, 99, 107, 32, 119, 97, 115, 110, 39, 116, 32, 119, 105, 116, 104, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +68, 111, 108, 108, 32, 108, 111, 111, 107, 115, 32, 108, 105, 107, 101, 32, 67, 111, 117, 110, 116, 32, 67, 114, 105, 115, 116, 111, 46, 32, 84, 104, 101, 114, 101, 39, 114, 101, 32, 112, 105, 110, 115, 32, 105, 110, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_48[] = { +46, 0 }; +const uint8_t msgtxt_49[] = { +66, 105, 114, 100, 32, 115, 97, 121, 115, 58, 32, 34, 97, 115, 107, 32, 102, 111, 114, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 32, 53, 44, 32, 45, 84, 72, 69, 32, 67, 79, 85, 78, 84, 45, 32, 97, 116, 32, 121, 111, 117, 114, 10, 32, 102, 97, 118, 111, 114, 105, 116, 101, 32, 99, 111, 109, 112, 117, 116, 101, 114, 32, 100, 101, 97, 108, 101, 114, 46, 32, 73, 116, 32, 119, 105, 108, 108, 32, 98, 101, 32, 76, 79, 86, 69, 32, 65, 84, 32, 70, 73, 82, 83, 84, 32, 66, 89, 84, 69, 33, 34, 10, 0 }; +const uint8_t msgtxt_50[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 32, 115, 111, 117, 112, 32, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_51[] = { +73, 32, 115, 101, 101, 32, 97, 32, 104, 111, 108, 101, 32, 117, 110, 100, 101, 114, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_52[] = { +78, 97, 105, 108, 115, 32, 119, 101, 114, 101, 32, 114, 117, 115, 116, 101, 100, 32, 98, 117, 116, 32, 73, 32, 103, 111, 116, 32, 116, 104, 101, 109, 32, 111, 117, 116, 46, 0 }; +const uint8_t msgtxt_53[] = { +73, 116, 39, 115, 32, 104, 65, 114, 100, 32, 119, 111, 114, 107, 32, 98, 117, 116, 32, 105, 116, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 98, 101, 32, 99, 111, 109, 105, 110, 103, 32, 108, 111, 111, 115, 101, 0 }; +const uint8_t msgtxt_54[] = { +73, 32, 104, 101, 97, 114, 32, 115, 116, 114, 97, 110, 103, 101, 32, 115, 111, 117, 110, 100, 115, 44, 32, 97, 115, 32, 105, 102, 32, 115, 111, 109, 101, 111, 110, 101, 32, 119, 101, 114, 101, 32, 109, 111, 97, 110, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_55[] = { +73, 39, 118, 101, 32, 103, 111, 116, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_56[] = { +72, 101, 97, 118, 121, 32, 100, 117, 116, 121, 32, 101, 120, 104, 97, 117, 115, 116, 32, 102, 97, 110, 32, 99, 111, 109, 101, 115, 32, 111, 110, 32, 38, 32, 115, 117, 99, 107, 115, 32, 109, 101, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_57[] = { +46, 0 }; +const uint8_t msgtxt_58[] = { +115, 97, 121, 115, 58, 32, 34, 83, 65, 89, 32, 90, 65, 80, 32, 32, 32, 116, 111, 32, 114, 101, 115, 116, 111, 114, 101, 32, 115, 111, 109, 101, 111, 110, 101, 32, 99, 104, 97, 110, 103, 101, 100, 32, 116, 111, 32, 115, 116, 111, 110, 101, 33, 34, 0 }; +const uint8_t msgtxt_59[] = { +83, 116, 97, 116, 117, 101, 32, 105, 115, 32, 109, 97, 100, 101, 32, 111, 102, 32, 115, 116, 111, 110, 101, 0 }; +const uint8_t msgtxt_60[] = { +73, 32, 104, 101, 97, 114, 32, 110, 111, 116, 104, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_61[] = { +119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_62[] = { +73, 39, 108, 108, 32, 110, 101, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 116, 111, 32, 112, 114, 121, 32, 105, 116, 32, 111, 102, 102, 32, 116, 104, 101, 32, 119, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_63[] = { +73, 116, 39, 115, 32, 97, 32, 98, 111, 111, 107, 32, 111, 110, 32, 114, 101, 109, 111, 118, 105, 110, 103, 32, 99, 117, 114, 115, 101, 115, 46, 32, 83, 97, 121, 115, 58, 32, 34, 87, 105, 116, 104, 32, 107, 110, 105, 102, 101, 32, 105, 110, 32, 104, 97, 110, 100, 32, 121, 111, 117, 10, 116, 97, 107, 101, 32, 97, 32, 115, 116, 97, 110, 100, 46, 32, 67, 105, 114, 99, 108, 101, 32, 99, 111, 102, 102, 105, 110, 32, 97, 110, 100, 46, 46, 46, 34, 32, 84, 104, 101, 32, 114, 101, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 112, 97, 103, 101, 32, 105, 115, 10, 109, 105, 115, 115, 105, 110, 103, 33, 33, 33, 0 }; +const uint8_t msgtxt_64[] = { +73, 116, 115, 32, 118, 101, 114, 121, 32, 100, 97, 114, 107, 44, 32, 116, 104, 101, 32, 111, 110, 108, 121, 32, 108, 105, 103, 104, 116, 32, 105, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 105, 100, 111, 108, 46, 0 }; +const uint8_t msgtxt_65[] = { +84, 104, 97, 116, 39, 115, 32, 105, 108, 108, 101, 103, 97, 108, 33, 0 }; +const uint8_t msgtxt_66[] = { +68, 111, 117, 98, 108, 101, 32, 98, 117, 98, 98, 108, 101, 32, 116, 111, 105, 108, 32, 38, 32, 116, 114, 111, 117, 98, 108, 101, 32, 116, 104, 101, 32, 101, 110, 99, 65, 110, 116, 65, 116, 105, 111, 110, 115, 32, 65, 114, 101, 32, 65, 98, 111, 117, 116, 32, 116, 111, 32, 112, 101, 65, 107, 33, 0 }; +const uint8_t msgtxt_67[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 110, 32, 97, 110, 116, 105, 113, 117, 101, 32, 104, 97, 109, 109, 101, 114, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_68[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 67, 108, 97, 112, 32, 111, 102, 32, 84, 104, 117, 110, 100, 101, 114, 32, 38, 32, 116, 104, 101, 110, 32, 115, 117, 100, 100, 101, 110, 108, 121, 32, 116, 104, 101, 32, 115, 116, 111, 110, 101, 32, 115, 116, 97, 116, 117, 101, 10, 98, 101, 103, 105, 110, 115, 32, 116, 111, 32, 99, 114, 97, 99, 107, 46, 32, 73, 32, 109, 97, 121, 32, 98, 101, 32, 105, 110, 32, 116, 114, 111, 117, 98, 108, 101, 32, 110, 111, 119, 44, 32, 116, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 111, 110, 101, 32, 105, 110, 10, 116, 104, 101, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_69[] = { +76, 111, 111, 107, 115, 32, 97, 108, 109, 111, 115, 116, 32, 108, 105, 107, 101, 32, 108, 101, 109, 111, 110, 97, 100, 101, 46, 32, 89, 117, 109, 109, 121, 33, 0 }; +const uint8_t msgtxt_70[] = { +89, 111, 117, 39, 118, 101, 32, 98, 101, 101, 110, 32, 116, 117, 114, 110, 101, 100, 32, 105, 110, 116, 111, 32, 97, 32, 98, 114, 111, 111, 109, 115, 116, 105, 99, 107, 32, 38, 32, 97, 32, 119, 105, 116, 99, 104, 32, 114, 105, 100, 101, 115, 32, 111, 102, 102, 32, 111, 110, 32, 121, 111, 117, 33, 0 }; +const uint8_t msgtxt_71[] = { +84, 104, 101, 114, 101, 39, 115, 32, 119, 105, 116, 99, 104, 39, 115, 32, 98, 114, 101, 119, 32, 116, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_72[] = { +67, 101, 108, 108, 32, 100, 111, 111, 114, 32, 115, 108, 97, 109, 115, 32, 115, 104, 117, 116, 0 }; +const uint8_t msgtxt_73[] = { +89, 111, 117, 39, 118, 101, 32, 98, 101, 101, 110, 32, 115, 112, 114, 117, 110, 103, 0 }; +const uint8_t msgtxt_74[] = { +46, 46, 46, 119, 97, 118, 101, 32, 116, 104, 101, 32, 115, 116, 105, 99, 107, 32, 97, 110, 100, 32, 104, 111, 108, 100, 32, 116, 104, 101, 32, 108, 97, 109, 112, 32, 97, 110, 100, 32, 100, 111, 110, 39, 116, 32, 102, 111, 114, 103, 101, 116, 32, 116, 111, 32, 121, 101, 108, 108, 10, 34, 67, 72, 65, 78, 84, 34, 33, 32, 79, 104, 32, 121, 101, 115, 44, 32, 116, 111, 32, 104, 101, 108, 112, 32, 105, 116, 32, 115, 117, 99, 99, 101, 101, 100, 44, 32, 97, 32, 100, 111, 108, 108, 32, 121, 111, 117, 39, 108, 108, 32, 110, 101, 101, 100, 46, 46, 46, 0 }; +const uint8_t msgtxt_75[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 58, 52, 44, 32, 34, 86, 79, 79, 68, 79, 79, 32, 67, 65, 83, 84, 76, 69, 34, 32, 98, 121, 32, 65, 108, 101, 120, 105, 115, 32, 65, 68, 65, 77, 83, 46, 10, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 97, 108, 108, 32, 77, 79, 77, 83, 33, 0 }; +const uint8_t msgtxt_76[] = { +104, 111, 119, 63, 0 }; +const uint8_t msgtxt_77[] = { +73, 116, 32, 97, 112, 112, 101, 97, 114, 115, 32, 115, 116, 117, 99, 107, 32, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 33, 0 }; +const uint8_t msgtxt_78[] = { +84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 32, 114, 111, 111, 109, 32, 105, 110, 32, 116, 104, 101, 114, 101, 32, 102, 111, 114, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_79[] = { +77, 121, 32, 105, 100, 111, 108, 32, 97, 99, 116, 101, 100, 32, 115, 116, 114, 97, 110, 103, 101, 0 }; +const uint8_t msgtxt_80[] = { +73, 39, 118, 101, 32, 110, 111, 32, 99, 111, 110, 116, 97, 105, 110, 101, 114, 46, 0 }; +const uint8_t msgtxt_81[] = { +83, 111, 109, 101, 32, 100, 117, 115, 116, 32, 102, 101, 108, 108, 32, 111, 102, 102, 32, 105, 116, 32, 97, 110, 100, 32, 105, 116, 32, 103, 108, 111, 119, 101, 100, 32, 98, 114, 105, 101, 102, 108, 121, 46, 0 }; +const uint8_t msgtxt_82[] = { +73, 116, 115, 32, 118, 101, 114, 121, 32, 102, 97, 105, 110, 116, 46, 0 }; +const uint8_t msgtxt_83[] = { +73, 116, 115, 32, 109, 117, 99, 104, 32, 108, 111, 117, 100, 101, 114, 32, 117, 112, 32, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_84[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 98, 111, 111, 107, 32, 116, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_85[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 115, 116, 105, 99, 107, 32, 116, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_86[] = { +66, 111, 121, 32, 105, 116, 32, 108, 111, 111, 107, 115, 32, 100, 117, 115, 116, 121, 46, 0 }; +const uint8_t msgtxt_87[] = { +73, 116, 115, 32, 103, 108, 111, 119, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_88[] = { +83, 116, 114, 97, 110, 103, 101, 32, 104, 111, 98, 98, 121, 32, 121, 111, 117, 32, 104, 97, 118, 101, 0 }; +const uint8_t msgtxt_89[] = { +67, 104, 101, 99, 107, 32, 111, 117, 116, 32, 116, 104, 101, 32, 102, 105, 114, 101, 112, 108, 97, 99, 101, 46, 0 }; +const uint8_t msgtxt_90[] = { +73, 116, 115, 32, 101, 109, 112, 116, 121, 46, 0 }; +const uint8_t msgtxt_91[] = { +73, 32, 104, 101, 97, 114, 32, 115, 111, 109, 101, 111, 110, 101, 32, 109, 117, 109, 98, 108, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_92[] = { +46, 0 }; +const uint8_t msgtxt_93[] = { +83, 97, 119, 32, 103, 114, 97, 116, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_94[] = { +73, 32, 104, 97, 118, 101, 110, 39, 116, 32, 103, 111, 116, 32, 97, 32, 107, 110, 105, 102, 101, 33, 0 }; +const uint8_t msgtxt_95[] = { +73, 110, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 110, 32, 114, 105, 110, 103, 32, 115, 97, 121, 115, 58, 32, 34, 87, 65, 86, 69, 32, 77, 69, 33, 34, 0 }; +const uint8_t msgtxt_96[] = { +77, 101, 100, 105, 117, 109, 32, 97, 112, 112, 101, 97, 114, 115, 44, 32, 115, 97, 121, 115, 58, 32, 34, 75, 101, 101, 112, 32, 97, 32, 103, 111, 111, 100, 32, 108, 117, 99, 107, 32, 99, 104, 97, 114, 109, 32, 111, 110, 32, 121, 111, 117, 32, 38, 32, 121, 111, 117, 114, 10, 102, 114, 105, 101, 110, 100, 46, 32, 73, 32, 97, 108, 115, 111, 32, 115, 101, 101, 32, 97, 32, 45, 109, 111, 118, 105, 110, 103, 45, 32, 98, 97, 103, 32, 104, 101, 108, 112, 105, 110, 103, 32, 121, 111, 117, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 116, 105, 103, 104, 116, 10, 115, 113, 117, 101, 101, 122, 101, 33, 34, 0 }; +const uint8_t msgtxt_97[] = { +73, 116, 32, 119, 105, 108, 108, 32, 116, 97, 107, 101, 32, 115, 111, 109, 101, 32, 115, 116, 114, 111, 110, 103, 32, 109, 97, 103, 105, 99, 32, 116, 111, 32, 103, 101, 116, 32, 109, 101, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 97, 116, 33, 0 }; +const uint8_t msgtxt_98[] = { +85, 115, 101, 32, 97, 32, 110, 117, 109, 98, 101, 114, 33, 0 }; +const uint8_t msgtxt_99[] = { +75, 110, 105, 102, 101, 32, 109, 97, 100, 101, 32, 110, 111, 32, 105, 109, 112, 114, 101, 115, 115, 105, 111, 110, 32, 111, 110, 32, 105, 116, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, + msgtxt_97, + msgtxt_98, + msgtxt_99, +}; + + +const uint8_t status[] = { +/* AUTO 25 */ + 132, 25, + 2, 10, + 13, +/* AUTO 100 */ + 181, + 4, 9, 2, 10, 12, 14, 0, 10, 0, 19, + 8, 72, +/* AUTO 100 */ + 176, + 7, 9, 13, 19, 0, 10, 0, 19, + 72, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 45 */ + 136, 45, + 4, 19, 14, 14, + 28, +/* AUTO 30 */ + 143, 30, + 3, 36, 6, 7, 0, 25, + 54, 64, 14, 73, +/* AUTO 0 */ + 193, + 24, 31, +/* AUTO 30 */ + 136, 30, + 3, 36, 1, 7, + 14, +/* AUTO 0 */ +/* AUTO 100 */ + 169, + 4, 15, 8, 15, + 57, 76, +/* AUTO 50 */ + 141, 50, + 1, 21, 0, 11, 4, 10, + 40, 54, +/* AUTO 100 */ + 169, + 4, 3, 8, 15, + 57, 76, +/* AUTO 0 */ +/* AUTO 100 */ + 168, + 4, 18, 13, 35, + 104, +/* AUTO 35 */ + 136, 35, + 4, 14, 13, 35, + 104, +/* AUTO 35 */ + 136, 35, + 4, 15, 13, 35, + 104, +/* AUTO 100 */ + 165, + 4, 25, + 46, 63, +/* AUTO 100 */ + 169, + 9, 7, 0, 7, + 125, 58, +/* AUTO 7 */ + 133, 7, + 1, 43, + 129, 131, +/* AUTO 35 */ + 132, 35, + 3, 29, + 141, +/* AUTO 0 */ +/* AUTO 0 */ +}; +const uint8_t actions[] = { +/* GET SWE */ + 4, 10, 52, + 2, 35, + 111, +/* GET GRA */ + 9, 10, 20, + 3, 59, 0, 59, + 20, 52, +/* WAV BAG */ + 23, 24, 44, + 4, 8, 14, 31, 3, 26, 0, 31, 0, 61, + 32, 88, 88, 72, +/* OPE CEL */ + 4, 38, 67, + 6, 14, + 5, +/* GO CEL */ + 15, 1, 67, + 2, 56, 5, 14, 0, 21, + 70, 122, 54, 64, +/* LOO WRI */ + 4, 42, 25, + 3, 2, + 18, +/* GET INV */ + 0, 10, 10, + 66, +/* BRE WIN */ + 4, 32, 15, + 2, 19, + 15, +/* MOV KET */ + 13, 29, 11, + 2, 5, 5, 6, 0, 6, + 53, 20, +/* GET BAL */ + 5, 10, 22, + 2, 18, + 19, 2, +/* GET CLO */ + 8, 10, 16, + 2, 14, 0, 14, + 52, +/* LOO GRA */ + 10, 42, 20, + 2, 15, 14, 14, + 12, 24, 31, +/* GET CLO */ + 13, 10, 16, + 14, 14, 4, 19, 0, 14, + 52, 20, +/* LOO GRA */ + 9, 42, 20, + 2, 15, 13, 14, + 24, 31, +/* GO STA */ + 10, 1, 43, + 2, 8, 0, 20, + 70, 54, 64, +/* LOO SAF */ + 4, 42, 28, + 2, 37, + 21, +/* LOO SAF */ + 13, 42, 28, + 2, 34, 0, 47, 14, 47, + 53, 117, +/* OPE FLU */ + 18, 38, 35, + 2, 12, 0, 12, 0, 13, 0, 11, + 72, 20, 53, +/* CLO FLU */ + 18, 39, 35, + 2, 13, 0, 12, 0, 13, 0, 11, + 72, 20, 59, +/* GO HOL */ + 11, 1, 12, + 2, 6, 0, 16, + 54, 56, 70, 64, +/* GO FLU */ + 15, 1, 35, + 4, 15, 2, 13, 0, 14, + 56, 54, 70, 64, +/* LOO LEA */ + 4, 42, 87, + 3, 60, + 18, +/* LOO BAL */ + 15, 42, 22, + 4, 6, 2, 18, 0, 4, + 10, 54, 76, 3, +/* AUTO 0 */ +/* GO FIR */ + 9, 1, 34, + 2, 20, 0, 15, + 54, 76, +/* OPE DOO */ + 4, 38, 17, + 4, 13, + 20, +/* WAV RIN */ + 17, 24, 32, + 2, 24, 1, 25, 0, 28, 0, 24, + 72, 22, +/* GO CHU */ + 10, 1, 18, + 2, 28, 0, 8, + 20, 54, 76, +/* GET RIN */ + 13, 10, 32, + 2, 27, 14, 25, 0, 25, + 52, 20, +/* DRI BRE */ + 7, 48, 29, + 3, 16, + 32, 88, 120, 63, +/* OPE COF */ + 13, 38, 8, + 2, 17, 0, 17, 0, 27, + 72, 20, +/* CLO COF */ + 13, 39, 8, + 2, 27, 0, 17, 0, 27, + 72, 20, +/* GET ARM */ + 5, 10, 30, + 2, 57, + 5, 36, +/* BRE BAL */ + 7, 32, 22, + 4, 6, + 61, 28, 31, 63, +/* OPE DOO */ + 5, 38, 17, + 2, 24, + 5, 111, +/* GET BAG */ + 13, 10, 44, + 3, 26, 13, 29, 0, 26, + 52, 20, +/* REA WRI */ + 12, 35, 25, + 3, 2, 3, 4, 8, 15, + 30, +/* GO CHU */ + 9, 1, 18, + 2, 28, 0, 8, + 54, 76, +/* GO CHU */ + 4, 1, 18, + 2, 30, + 27, +/* LOO BAG */ + 12, 42, 44, + 3, 26, 14, 52, 13, 54, + 134, +/* CIR COF */ + 11, 45, 8, + 0, 0, 4, 1, + 73, 20, 6, 88, +/* AUTO 0 */ + 211, + 14, 32, 3, 9, 1, 0, 0, 3, + 58, 32, 56, 114, +/* LOO CHE */ + 4, 42, 42, + 3, 40, + 119, +/* GET HEA */ + 23, 10, 40, + 9, 0, 3, 33, 0, 3, 0, 37, 2, 3, + 52, 53, 20, 67, +/* OPE SAF */ + 8, 38, 28, + 4, 5, 2, 34, + 20, +/* LOO SAF */ + 13, 42, 28, + 4, 5, 2, 34, 13, 47, + 20, 140, +/* GET HEA */ + 13, 10, 40, + 8, 0, 3, 3, 0, 3, + 52, 20, +/* TUR 38 */ + 13, 40, 37, + 9, 1, 2, 37, 0, 1, + 58, 20, +/* TUR 33 */ + 17, 40, 39, + 8, 1, 2, 37, 0, 34, 0, 37, + 72, 20, +/* LOO BAG */ + 17, 42, 44, + 3, 26, 14, 54, 14, 52, 13, 29, + 134, 135, +/* REA BOO */ + 4, 35, 63, + 3, 52, + 113, +/* YEL MED */ + 15, 64, 23, + 14, 23, 4, 6, 0, 23, + 20, 85, 53, 146, +/* GO CHI */ + 10, 1, 24, + 2, 13, 0, 14, + 54, 56, 76, +/* REA LAB */ + 4, 35, 19, + 3, 38, + 17, +/* DRI CHE */ + 19, 48, 42, + 3, 40, 0, 41, 0, 22, 0, 38, + 32, 73, 72, 59, +/* AUTO 0 */ + 199, + 0, 40, + 59, 88, 88, 35, +/* YEL ZAP */ + 15, 64, 65, + 3, 53, 0, 53, 0, 29, + 59, 53, 73, 85, +/* AUTO 0 */ + 193, + 118, 141, +/* SAV GAM */ + 0, 34, 49, + 71, +/* GET KET */ + 5, 10, 11, + 2, 5, + 5, 36, +/* GO DOO */ + 6, 1, 17, + 2, 22, + 5, 37, 147, +/* INV ANY */ + 0, 44, 0, + 66, +/* GET HEA */ + 9, 10, 40, + 9, 0, 3, 3, + 111, 112, +/* DRO FOO */ + 4, 18, 47, + 1, 32, + 39, +/* ON MAN */ + 14, 23, 53, + 3, 32, 0, 32, 2, 27, + 20, 32, 59, +/* GET PIN */ + 5, 10, 45, + 2, 44, + 5, 111, +/* PRE SWE */ + 18, 27, 52, + 4, 18, 2, 35, 0, 35, 0, 51, + 41, 55, 74, +/* REA PAP */ + 4, 35, 51, + 3, 51, + 108, +/* LOO DOL */ + 4, 42, 55, + 3, 44, + 47, +/* LOO COF */ + 7, 42, 8, + 2, 27, + 24, 1, 73, 25, +/* AUTO 0 */ + 196, + 14, 32, + 43, +/* AUTO 0 */ + 196, + 14, 25, + 26, +/* YEL CHA */ + 23, 64, 64, + 4, 1, 3, 9, 3, 14, 8, 6, 3, 44, + 73, 32, 88, 29, +/* AUTO 0 */ + 199, + 0, 65, + 53, 76, 34, 63, +/* GET NAI */ + 9, 10, 75, + 3, 42, 0, 42, + 20, 52, +/* GO POT */ + 4, 1, 66, + 2, 56, + 20, +/* LOO CHE */ + 4, 42, 42, + 3, 38, + 17, +/* LOO POT */ + 4, 42, 66, + 3, 16, + 121, +/* GET FOO */ + 13, 10, 47, + 14, 32, 2, 27, 0, 32, + 52, 20, +/* GET FOO */ + 9, 10, 47, + 3, 32, 0, 32, + 52, 20, +/* GO WIN */ + 10, 1, 15, + 2, 10, 0, 22, + 54, 20, 76, +/* DUS IDO */ + 14, 25, 9, + 3, 43, 0, 9, 0, 43, + 42, 72, 76, +/* MOV KET */ + 12, 29, 11, + 2, 6, 0, 6, 2, 6, + 59, +/* LOO KET */ + 14, 42, 11, + 2, 5, 4, 3, 14, 6, + 20, 51, 50, +/* CLO DOO */ + 0, 39, 17, + 111, +/* DRI SOU */ + 9, 48, 2, + 2, 5, 0, 45, + 20, 55, +/* WAV STI */ + 7, 24, 61, + 3, 44, + 73, 20, 6, 88, +/* AUTO 0 */ + 211, + 3, 9, 4, 1, 8, 3, 0, 6, + 88, 32, 116, 58, +/* SAW GRA */ + 15, 50, 20, + 2, 48, 1, 49, 0, 48, + 103, 20, 73, 55, +/* AUTO 0 */ + 202, + 0, 50, 0, 59, + 53, 105, 74, +/* PRE BUT */ + 10, 27, 59, + 2, 50, 0, 18, + 106, 54, 76, +/* QUI ANY */ + 0, 47, 0, + 63, +/* GO CRA */ + 10, 1, 77, + 2, 31, 0, 23, + 20, 54, 76, +/* LOO STA */ + 4, 42, 43, + 3, 53, + 109, +/* LIS ANY */ + 4, 56, 0, + 3, 29, + 33, +/* GET HAM */ + 9, 10, 57, + 3, 47, 0, 47, + 52, 20, +/* GET HAM */ + 18, 10, 57, + 2, 34, 9, 5, 0, 47, 0, 5, + 52, 20, 58, +/* REA PAG */ + 4, 35, 89, + 3, 64, + 124, +/* WAV ANY */ + 1, 24, 0, + 20, 6, +/* SHR ANY */ + 0, 54, 0, + 126, +/* REA WRI */ + 9, 35, 25, + 3, 2, 12, 4, + 5, 4, +/* OPE BAG */ + 8, 38, 44, + 13, 29, 3, 26, + 20, +/* LOO CEL */ + 4, 42, 67, + 4, 11, + 10, +/* MOV ARM */ + 4, 29, 30, + 3, 57, + 20, +/* GET BAG */ + 4, 10, 44, + 2, 26, + 127, +/* REA WRI */ + 9, 35, 25, + 3, 2, 3, 4, + 5, 11, +/* GO LED */ + 8, 1, 70, + 4, 9, 2, 1, + 49, +/* LIS ANY */ + 9, 56, 0, + 4, 15, 13, 35, + 104, 132, +/* LIS ANY */ + 9, 56, 0, + 13, 35, 4, 14, + 104, 133, +/* GO COF */ + 4, 1, 8, + 2, 27, + 128, +/* GET SOU */ + 4, 10, 2, + 2, 5, + 130, +/* GO HOL */ + 15, 1, 12, + 2, 62, 0, 6, 0, 23, + 54, 76, 38, 59, +/* LOO RIN */ + 4, 42, 32, + 3, 25, + 18, +/* CUT IDO */ + 9, 69, 9, + 3, 43, 3, 0, + 129, 131, +/* CUT ANY */ + 6, 69, 0, + 3, 0, + 20, 6, 149, +/* LOO BAG */ + 16, 42, 44, + 13, 52, 14, 54, 13, 29, 3, 26, + 135, +/* GET BOO */ + 17, 10, 63, + 3, 26, 13, 29, 0, 52, 14, 52, + 52, 20, +/* GET BOO */ + 9, 10, 63, + 3, 52, 0, 52, + 52, 20, +/* GET STI */ + 17, 10, 61, + 3, 26, 14, 54, 0, 54, 13, 29, + 52, 20, +/* GET STI */ + 9, 10, 61, + 3, 54, 0, 54, + 52, 20, +/* GO DOO */ + 9, 1, 17, + 2, 41, 0, 19, + 54, 76, +/* SHA SWO */ + 255, 60, 13, + 4, 0, +/* LOO IDO */ + 5, 42, 9, + 3, 43, + 136, 10, +/* LOO IDO */ + 4, 42, 9, + 3, 9, + 137, +/* DIG GRA */ + 5, 22, 20, + 3, 39, + 19, 138, +/* SAW ANY */ + 14, 50, 0, + 1, 49, 2, 58, 0, 11, + 123, 54, 64, +/* LIS CRY */ + 4, 56, 81, + 4, 9, + 49, +/* OPE WIN */ + 255, 38, 15, + 4, 0, +/* SLI ANY */ + 9, 62, 0, + 2, 28, 0, 8, + 54, 76, +/* LIS ANY */ + 4, 56, 0, + 2, 35, + 45, +/* HEL ANY */ + 4, 15, 0, + 4, 10, + 139, +/* DAN ANY */ + 1, 63, 0, + 20, 6, +/* YEL ANY */ + 2, 64, 0, + 20, 85, 6, +/* GET NAI */ + 22, 10, 75, + 2, 46, 1, 47, 0, 46, 0, 45, 0, 42, + 102, 72, 74, +/* ON FLO */ + 9, 23, 74, + 1, 32, 0, 32, + 53, 20, +/* GET BOA */ + 22, 10, 56, + 3, 45, 0, 45, 9, 8, 0, 48, 0, 8, + 52, 53, 58, +/* GET BOA */ + 9, 10, 56, + 3, 45, 0, 45, + 52, 20, +/* GET BRE */ + 0, 10, 29, + 130, +/* HEL ANY */ + 4, 15, 0, + 2, 48, + 143, +/* MIX CHE */ + 13, 51, 42, + 3, 38, 0, 40, 0, 38, + 72, 20, +/* HEL SWE */ + 4, 15, 52, + 2, 35, + 126, +/* RUB IDO */ + 5, 72, 9, + 3, 43, + 129, 131, +/* LOO ANY */ + 1, 42, 0, + 76, 10, +/* CUT ANY */ + 5, 69, 0, + 6, 0, + 5, 144, +/* LIS ANY */ + 0, 56, 0, + 110, +/* GET RIN */ + 9, 10, 32, + 2, 25, 0, 25, + 52, 20, +/* SMO POT */ + 0, 73, 66, + 115, +/* BRE TUB */ + 15, 32, 33, + 3, 36, 6, 7, 0, 25, + 54, 64, 14, 73, +/* SAW ANY */ + 5, 50, 0, + 1, 49, + 20, 6, +/* REA LEA */ + 5, 35, 87, + 3, 60, + 20, 9, +/* DIG ANY */ + 5, 22, 0, + 3, 39, + 20, 6, +/* GO CRA */ + 6, 1, 77, + 2, 61, + 5, 37, 147, +/* HEL ANY */ + 0, 15, 0, + 6, +/* OPE SAF */ + 4, 38, 28, + 2, 37, + 21, +/* BRE STA */ + 13, 32, 43, + 3, 53, 0, 53, 0, 63, + 20, 72, +/* TUR 34 */ + 9, 40, 83, + 2, 37, 0, 1, + 60, 20, +/* TUR 35 */ + 9, 40, 84, + 2, 37, 0, 1, + 60, 20, +/* TUR 36 */ + 9, 40, 85, + 2, 37, 0, 1, + 60, 20, +/* TUR 37 */ + 9, 40, 86, + 2, 37, 0, 1, + 60, 20, +/* REA RIN */ + 4, 35, 32, + 3, 25, + 145, +/* OPE WIN */ + 4, 38, 15, + 2, 19, + 111, +/* RUB RIN */ + 4, 72, 32, + 3, 25, + 18, +/* RUB ANY */ + 1, 72, 0, + 20, 6, +/* TUR LOC */ + 4, 40, 69, + 2, 37, + 148, +/* TUR 33 */ + 9, 40, 39, + 2, 37, 0, 1, + 60, 20, +/* TUR 38 */ + 9, 40, 37, + 2, 37, 0, 1, + 60, 20, +/* HUG DOL */ + 4, 75, 55, + 3, 44, + 23, + 255, +}; + + +const uint8_t verbs[] = { + /* AUT */ + 65, 85, 84, + /* GO */ + 71, 79, 32, + /* *ENT */ + 197, 78, 84, + /* *WAL */ + 215, 65, 76, + /* *CLI */ + 195, 76, 73, + /* *RUN */ + 210, 85, 78, + /* . */ + 46, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* GET */ + 71, 69, 84, + /* *TAK */ + 212, 65, 75, + /* *PIC */ + 208, 73, 67, + /* *REM */ + 210, 69, 77, + /* *PUL */ + 208, 85, 76, + /* HEL */ + 72, 69, 76, + /* *RES */ + 210, 69, 83, + /* . */ + 46, 32, 32, + /* DRO */ + 68, 82, 79, + /* *PUT */ + 208, 85, 84, + /* *LEA */ + 204, 69, 65, + /* *THR */ + 212, 72, 82, + /* DIG */ + 68, 73, 71, + /* ON */ + 79, 78, 32, + /* WAV */ + 87, 65, 86, + /* DUS */ + 68, 85, 83, + /* *CLE */ + 195, 76, 69, + /* PRE */ + 80, 82, 69, + /* *PUS */ + 208, 85, 83, + /* MOV */ + 77, 79, 86, + /* *SHO */ + 211, 72, 79, + /* *KIC */ + 203, 73, 67, + /* BRE */ + 66, 82, 69, + /* *SMA */ + 211, 77, 65, + /* SAV */ + 83, 65, 86, + /* REA */ + 82, 69, 65, + /* . */ + 46, 32, 32, + /* */ + 32, 32, 32, + /* OPE */ + 79, 80, 69, + /* CLO */ + 67, 76, 79, + /* TUR */ + 84, 85, 82, + /* *DIA */ + 196, 73, 65, + /* LOO */ + 76, 79, 79, + /* *EXA */ + 197, 88, 65, + /* INV */ + 73, 78, 86, + /* CIR */ + 67, 73, 82, + /* . */ + 46, 32, 32, + /* QUI */ + 81, 85, 73, + /* DRI */ + 68, 82, 73, + /* *EAT */ + 197, 65, 84, + /* SAW */ + 83, 65, 87, + /* MIX */ + 77, 73, 88, + /* HAM */ + 72, 65, 77, + /* . */ + 46, 32, 32, + /* SHR */ + 83, 72, 82, + /* . */ + 46, 32, 32, + /* LIS */ + 76, 73, 83, + /* *HEA */ + 200, 69, 65, + /* STA */ + 83, 84, 65, + /* */ + 32, 32, 32, + /* SHA */ + 83, 72, 65, + /* */ + 32, 32, 32, + /* SLI */ + 83, 76, 73, + /* DAN */ + 68, 65, 78, + /* YEL */ + 89, 69, 76, + /* *SCR */ + 211, 67, 82, + /* *SUM */ + 211, 85, 77, + /* *SAY */ + 211, 65, 89, + /* *CRY */ + 195, 82, 89, + /* CUT */ + 67, 85, 84, + /* *STA */ + 211, 84, 65, + /* */ + 32, 32, 32, + /* RUB */ + 82, 85, 66, + /* SMO */ + 83, 77, 79, + /* . */ + 46, 32, 32, + /* HUG */ + 72, 85, 71, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, + /* NOR */ + 78, 79, 82, + /* SOU */ + 83, 79, 85, + /* EAS */ + 69, 65, 83, + /* WES */ + 87, 69, 83, + /* UP */ + 85, 80, 32, + /* DOW */ + 68, 79, 87, + /* KNI */ + 75, 78, 73, + /* COF */ + 67, 79, 70, + /* IDO */ + 73, 68, 79, + /* INV */ + 73, 78, 86, + /* KET */ + 75, 69, 84, + /* HOL */ + 72, 79, 76, + /* SWO */ + 83, 87, 79, + /* PAT */ + 80, 65, 84, + /* WIN */ + 87, 73, 78, + /* CLO */ + 67, 76, 79, + /* DOO */ + 68, 79, 79, + /* CHU */ + 67, 72, 85, + /* LAB */ + 76, 65, 66, + /* GRA */ + 71, 82, 65, + /* WAL */ + 87, 65, 76, + /* BAL */ + 66, 65, 76, + /* MED */ + 77, 69, 68, + /* CHI */ + 67, 72, 73, + /* WRI */ + 87, 82, 73, + /* *PLA */ + 208, 76, 65, + /* SHI */ + 83, 72, 73, + /* SAF */ + 83, 65, 70, + /* BRE */ + 66, 82, 69, + /* ARM */ + 65, 82, 77, + /* GLA */ + 71, 76, 65, + /* RIN */ + 82, 73, 78, + /* TUB */ + 84, 85, 66, + /* FIR */ + 70, 73, 82, + /* FLU */ + 70, 76, 85, + /* *CHI */ + 195, 72, 73, + /* 38 */ + 51, 56, 32, + /* SOO */ + 83, 79, 79, + /* 33 */ + 51, 51, 32, + /* HEA */ + 72, 69, 65, + /* *ANI */ + 193, 78, 73, + /* CHE */ + 67, 72, 69, + /* STA */ + 83, 84, 65, + /* BAG */ + 66, 65, 71, + /* PIN */ + 80, 73, 78, + /* SAW */ + 83, 65, 87, + /* FOO */ + 70, 79, 79, + /* *RAB */ + 210, 65, 66, + /* GAM */ + 71, 65, 77, + /* SHO */ + 83, 72, 79, + /* PAP */ + 80, 65, 80, + /* SWE */ + 83, 87, 69, + /* MAN */ + 77, 65, 78, + /* *CRI */ + 195, 82, 73, + /* DOL */ + 68, 79, 76, + /* BOA */ + 66, 79, 65, + /* HAM */ + 72, 65, 77, + /* GRA */ + 71, 82, 65, + /* BUT */ + 66, 85, 84, + /* PUP */ + 80, 85, 80, + /* STI */ + 83, 84, 73, + /* STA */ + 83, 84, 65, + /* BOO */ + 66, 79, 79, + /* CHA */ + 67, 72, 65, + /* ZAP */ + 90, 65, 80, + /* POT */ + 80, 79, 84, + /* CEL */ + 67, 69, 76, + /* BAR */ + 66, 65, 82, + /* LOC */ + 76, 79, 67, + /* LED */ + 76, 69, 68, + /* WOO */ + 87, 79, 79, + /* VOI */ + 86, 79, 73, + /* SIG */ + 83, 73, 71, + /* FLO */ + 70, 76, 79, + /* NAI */ + 78, 65, 73, + /* MUM */ + 77, 85, 77, + /* CRA */ + 67, 82, 65, + /* SAP */ + 83, 65, 80, + /* ROC */ + 82, 79, 67, + /* ARO */ + 65, 82, 79, + /* CRY */ + 67, 82, 89, + /* *RAV */ + 210, 65, 86, + /* 34 */ + 51, 52, 32, + /* 35 */ + 51, 53, 32, + /* 36 */ + 51, 54, 32, + /* 37 */ + 51, 55, 32, + /* LEA */ + 76, 69, 65, + /* MOA */ + 77, 79, 65, + /* PAG */ + 80, 65, 71, + 0, +}; +const uint8_t automap[] = { + /* KNI */ + 75, 78, 73, + 0, + /* WRI */ + 87, 82, 73, + 2, + /* HEA */ + 72, 69, 65, + 3, + /* GLA */ + 71, 76, 65, + 4, + /* SHI */ + 83, 72, 73, + 7, + /* IDO */ + 73, 68, 79, + 9, + /* CLO */ + 67, 76, 79, + 14, + /* POT */ + 80, 79, 84, + 16, + /* SOO */ + 83, 79, 79, + 21, + /* RIN */ + 82, 73, 78, + 25, + /* BAG */ + 66, 65, 71, + 26, + /* FOO */ + 70, 79, 79, + 32, + /* SWO */ + 83, 87, 79, + 33, + /* TUB */ + 84, 85, 66, + 36, + /* CHE */ + 67, 72, 69, + 38, + /* SHO */ + 83, 72, 79, + 39, + /* CHE */ + 67, 72, 69, + 40, + /* NAI */ + 78, 65, 73, + 42, + /* IDO */ + 73, 68, 79, + 43, + /* DOL */ + 68, 79, 76, + 44, + /* BOA */ + 66, 79, 65, + 45, + /* HAM */ + 72, 65, 77, + 47, + /* SAW */ + 83, 65, 87, + 49, + /* PAP */ + 80, 65, 80, + 51, + /* BOO */ + 66, 79, 79, + 52, + /* STA */ + 83, 84, 65, + 53, + /* STI */ + 83, 84, 73, + 54, + /* GRA */ + 71, 82, 65, + 59, + /* LEA */ + 76, 69, 65, + 60, + /* ROC */ + 82, 79, 67, + 63, + /* PAG */ + 80, 65, 71, + 64, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv05.c b/Applications/games/adv05.c new file mode 100644 index 00000000..b051d485 --- /dev/null +++ b/Applications/games/adv05.c @@ -0,0 +1,3116 @@ +#define NUM_OBJ 72 +#define WORDSIZE 3 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 175; +const uint8_t lightfill = 175; +const uint8_t startcarried = 1; +const uint8_t maxcar = 7; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 22; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +42, 73, 39, 109, 32, 108, 121, 105, 110, 103, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 98, 114, 97, 115, 115, 32, 98, 101, 100, 0 }; +const uint8_t loctxt_2[] = { +98, 101, 100, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 111, 110, 32, 65, 32, 108, 101, 100, 103, 101, 32, 111, 117, 116, 115, 105, 100, 101, 32, 65, 110, 32, 111, 112, 101, 110, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 104, 97, 110, 103, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 115, 104, 101, 101, 116, 44, 32, 73, 32, 109, 97, 100, 101, 32, 97, 32, 102, 111, 108, 100, 32, 105, 110, 32, 116, 104, 101, 32, 115, 104, 101, 101, 116, 10, 115, 111, 32, 73, 32, 99, 97, 110, 32, 108, 101, 97, 118, 101, 32, 116, 104, 105, 110, 103, 115, 32, 104, 101, 114, 101, 46, 32, 84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 119, 105, 110, 100, 111, 119, 32, 98, 111, 120, 32, 104, 101, 114, 101, 32, 111, 110, 32, 116, 104, 101, 10, 115, 105, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_5[] = { +102, 108, 111, 119, 101, 114, 32, 98, 111, 120, 32, 111, 117, 116, 115, 105, 100, 101, 32, 65, 110, 32, 111, 112, 101, 110, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t loctxt_6[] = { +67, 82, 89, 80, 84, 0 }; +const uint8_t loctxt_7[] = { +99, 108, 111, 115, 101, 116, 0 }; +const uint8_t loctxt_8[] = { +66, 97, 116, 104, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_9[] = { +42, 73, 39, 109, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_10[] = { +68, 79, 79, 82, 76, 69, 83, 83, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_11[] = { +104, 97, 108, 108, 32, 105, 110, 115, 105, 100, 101, 32, 116, 104, 101, 32, 99, 97, 115, 116, 108, 101, 0 }; +const uint8_t loctxt_12[] = { +107, 105, 116, 99, 104, 101, 110, 0 }; +const uint8_t loctxt_13[] = { +108, 97, 114, 103, 101, 32, 67, 79, 70, 70, 73, 78, 0 }; +const uint8_t loctxt_14[] = { +112, 65, 110, 116, 114, 121, 0 }; +const uint8_t loctxt_15[] = { +103, 105, 97, 110, 116, 32, 83, 79, 76, 65, 82, 32, 79, 86, 69, 78, 0 }; +const uint8_t loctxt_16[] = { +68, 117, 110, 103, 101, 111, 110, 0 }; +const uint8_t loctxt_17[] = { +77, 101, 97, 110, 100, 101, 114, 105, 110, 103, 32, 112, 97, 116, 104, 0 }; +const uint8_t loctxt_18[] = { +80, 105, 116, 0 }; +const uint8_t loctxt_19[] = { +68, 97, 114, 107, 32, 112, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_20[] = { +100, 117, 109, 98, 45, 119, 97, 105, 116, 101, 114, 32, 98, 121, 32, 97, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_21[] = { +119, 111, 114, 107, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_22[] = { +76, 79, 84, 32, 79, 70, 32, 84, 82, 79, 85, 66, 76, 69, 33, 32, 40, 65, 110, 100, 32, 115, 111, 32, 65, 114, 101, 32, 121, 111, 117, 33, 41, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_2, { 11, 0, 0, 0, 0, 0 } }, + { loctxt_3, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 19, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 21, 0, 0 } }, + { loctxt_8, { 0, 11, 0, 0, 0, 0 } }, + { loctxt_9, { 0, 0, 17, 11, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_11, { 8, 2, 9, 12, 0, 0 } }, + { loctxt_12, { 0, 0, 11, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 6, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 12, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 21, 0 } }, + { loctxt_17, { 0, 0, 0, 9, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_19, { 6, 10, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 0, 0, 16 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 1, + 0, + 2, + 1, + 3, + 9, + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 21, + 0, + 255, + 8, + 0, + 0, + 18, + 14, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 14, + 16, + 0, + 2, + 0, + 0, + 8, + 13, + 13, + 0, + 15, + 7, + 15, + 12, + 0, + 0, + 0, + 9, + 17, + 17, + 0, + 0, + 21, + 16, + 0, + 0, + 0, + 10, + 10, + 6, + 5, + 8, + 12, + 21, + 0, + 6, + 0, + 0, + 0, + 7, + 21, + 0, +}; + + +const uint8_t objtxt_0[] = { +83, 104, 101, 101, 116, 115, 0 }; +const uint8_t objtxt_1[] = { +79, 112, 101, 110, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_2[] = { +67, 108, 111, 115, 101, 100, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_3[] = { +80, 105, 108, 108, 111, 119, 0 }; +const uint8_t objtxt_4[] = { +70, 108, 97, 103, 32, 112, 111, 108, 101, 32, 105, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_5[] = { +67, 111, 97, 116, 45, 111, 102, 45, 97, 114, 109, 115, 0 }; +const uint8_t objtxt_6[] = { +83, 104, 101, 101, 116, 32, 103, 111, 105, 110, 103, 32, 105, 110, 116, 111, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_7[] = { +69, 110, 100, 32, 111, 102, 32, 115, 104, 101, 101, 116, 32, 116, 105, 101, 100, 32, 116, 111, 32, 102, 108, 65, 103, 112, 111, 108, 101, 0 }; +const uint8_t objtxt_8[] = { +49, 32, 110, 111, 100, 111, 122, 32, 116, 97, 98, 108, 101, 116, 0 }; +const uint8_t objtxt_9[] = { +76, 73, 84, 32, 116, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_10[] = { +76, 111, 111, 115, 101, 32, 101, 110, 100, 32, 111, 102, 32, 115, 104, 101, 101, 116, 32, 103, 111, 105, 110, 103, 32, 111, 118, 101, 114, 32, 108, 101, 100, 103, 101, 0 }; +const uint8_t objtxt_11[] = { +69, 110, 100, 32, 111, 102, 32, 115, 104, 101, 101, 116, 32, 104, 65, 110, 103, 105, 110, 103, 32, 104, 101, 114, 101, 0 }; +const uint8_t objtxt_12[] = { +67, 108, 111, 115, 101, 100, 32, 38, 32, 85, 78, 76, 79, 67, 75, 69, 68, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_13[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_14[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_15[] = { +80, 97, 112, 101, 114, 32, 99, 108, 105, 112, 0 }; +const uint8_t objtxt_16[] = { +84, 101, 110, 116, 32, 83, 84, 65, 75, 69, 0 }; +const uint8_t objtxt_17[] = { +77, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_18[] = { +66, 111, 116, 116, 108, 101, 32, 111, 102, 32, 116, 121, 112, 101, 32, 86, 32, 98, 108, 111, 111, 100, 0 }; +const uint8_t objtxt_19[] = { +69, 109, 112, 116, 121, 32, 98, 111, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_20[] = { +85, 110, 108, 105, 116, 32, 116, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_21[] = { +83, 117, 108, 102, 117, 114, 32, 109, 65, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_22[] = { +50, 32, 115, 109, 97, 108, 108, 32, 104, 111, 108, 101, 115, 32, 105, 110, 32, 109, 121, 32, 110, 101, 99, 107, 0 }; +const uint8_t objtxt_23[] = { +51, 32, 110, 111, 45, 100, 111, 122, 32, 116, 97, 98, 108, 101, 116, 115, 0 }; +const uint8_t objtxt_24[] = { +50, 32, 110, 111, 100, 111, 122, 32, 116, 97, 98, 108, 101, 116, 115, 0 }; +const uint8_t objtxt_25[] = { +80, 105, 108, 101, 115, 32, 111, 102, 32, 101, 120, 116, 105, 110, 103, 117, 105, 115, 104, 101, 100, 32, 99, 105, 103, 65, 114, 101, 116, 116, 101, 115, 0 }; +const uint8_t objtxt_26[] = { +80, 97, 99, 107, 32, 111, 102, 32, 84, 114, 97, 110, 115, 121, 108, 118, 97, 110, 105, 97, 110, 32, 99, 105, 103, 97, 114, 101, 116, 116, 101, 115, 0 }; +const uint8_t objtxt_27[] = { +76, 73, 84, 32, 99, 105, 103, 65, 114, 101, 116, 116, 101, 0 }; +const uint8_t objtxt_28[] = { +83, 116, 111, 110, 101, 32, 67, 79, 70, 70, 73, 78, 0 }; +const uint8_t objtxt_29[] = { +67, 111, 102, 102, 105, 110, 32, 105, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t objtxt_30[] = { +67, 111, 102, 102, 105, 110, 32, 105, 115, 32, 99, 108, 111, 115, 101, 100, 0 }; +const uint8_t objtxt_31[] = { +68, 117, 115, 116, 121, 32, 99, 108, 111, 118, 101, 32, 111, 102, 32, 103, 97, 114, 108, 105, 99, 0 }; +const uint8_t objtxt_32[] = { +68, 65, 82, 75, 32, 112, 105, 116, 0 }; +const uint8_t objtxt_33[] = { +67, 105, 103, 97, 114, 101, 116, 116, 101, 0 }; +const uint8_t objtxt_34[] = { +66, 114, 97, 115, 115, 32, 98, 101, 100, 0 }; +const uint8_t objtxt_35[] = { +84, 104, 101, 32, 111, 116, 104, 101, 114, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 115, 104, 101, 101, 116, 0 }; +const uint8_t objtxt_36[] = { +83, 104, 101, 101, 116, 32, 116, 105, 101, 100, 32, 116, 111, 32, 98, 101, 100, 0 }; +const uint8_t objtxt_37[] = { +80, 111, 99, 107, 101, 116, 32, 119, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_38[] = { +67, 111, 102, 102, 105, 110, 32, 108, 105, 100, 32, 105, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t objtxt_39[] = { +76, 111, 99, 107, 97, 98, 108, 101, 32, 115, 108, 105, 100, 101, 32, 98, 111, 108, 116, 0 }; +const uint8_t objtxt_40[] = { +66, 114, 111, 107, 101, 110, 32, 115, 108, 105, 100, 101, 32, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_41[] = { +76, 97, 114, 103, 101, 32, 116, 101, 109, 112, 101, 114, 101, 100, 32, 110, 97, 105, 108, 32, 102, 105, 108, 101, 0 }; +const uint8_t objtxt_42[] = { +83, 109, 97, 108, 108, 32, 86, 105, 97, 108, 0 }; +const uint8_t objtxt_43[] = { +76, 97, 114, 103, 101, 32, 100, 97, 114, 107, 32, 108, 101, 110, 115, 32, 115, 101, 116, 32, 105, 110, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_44[] = { +79, 118, 101, 110, 0 }; +const uint8_t objtxt_45[] = { +80, 97, 99, 107, 97, 103, 101, 0 }; +const uint8_t objtxt_46[] = { +69, 109, 112, 116, 121, 32, 98, 111, 120, 0 }; +const uint8_t objtxt_47[] = { +80, 111, 115, 116, 99, 97, 114, 100, 0 }; +const uint8_t objtxt_48[] = { +66, 101, 108, 108, 32, 112, 117, 108, 108, 0 }; +const uint8_t objtxt_49[] = { +67, 97, 115, 116, 108, 101, 32, 116, 111, 119, 101, 114, 105, 110, 103, 32, 97, 98, 111, 118, 101, 32, 109, 101, 0 }; +const uint8_t objtxt_50[] = { +70, 101, 110, 99, 101, 32, 119, 105, 116, 104, 32, 97, 110, 32, 111, 112, 101, 110, 32, 103, 97, 116, 101, 32, 38, 32, 97, 32, 99, 114, 111, 119, 100, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_51[] = { +78, 111, 116, 101, 0 }; +const uint8_t objtxt_52[] = { +68, 82, 65, 67, 85, 76, 65, 0 }; +const uint8_t objtxt_53[] = { +82, 117, 98, 98, 101, 114, 32, 109, 97, 108, 108, 101, 116, 0 }; +const uint8_t objtxt_54[] = { +73, 114, 111, 110, 32, 114, 105, 110, 103, 115, 32, 105, 110, 32, 119, 65, 108, 108, 0 }; +const uint8_t objtxt_55[] = { +83, 104, 101, 101, 116, 32, 116, 105, 101, 100, 32, 116, 111, 32, 114, 105, 110, 103, 32, 103, 111, 105, 110, 103, 32, 105, 110, 116, 111, 32, 112, 105, 116, 0 }; +const uint8_t objtxt_56[] = { +68, 65, 82, 75, 32, 102, 111, 114, 101, 98, 111, 100, 105, 110, 103, 32, 112, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t objtxt_57[] = { +46, 0 }; +const uint8_t objtxt_58[] = { +70, 117, 108, 108, 32, 115, 105, 122, 101, 32, 112, 111, 114, 116, 114, 97, 105, 116, 32, 111, 102, 32, 68, 82, 65, 67, 85, 76, 65, 0 }; +const uint8_t objtxt_59[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_60[] = { +86, 101, 110, 116, 0 }; +const uint8_t objtxt_61[] = { +68, 97, 105, 115, 105, 101, 115, 0 }; +const uint8_t objtxt_62[] = { +84, 111, 105, 108, 101, 116, 0 }; +const uint8_t objtxt_63[] = { +68, 117, 109, 98, 45, 119, 97, 105, 116, 101, 114, 0 }; +const uint8_t objtxt_64[] = { +86, 101, 110, 116, 0 }; +const uint8_t objtxt_65[] = { +76, 101, 116, 116, 101, 114, 0 }; +const uint8_t objtxt_66[] = { +83, 105, 103, 110, 32, 115, 97, 121, 115, 58, 32, 34, 80, 79, 83, 73, 84, 73, 86, 69, 76, 89, 32, 78, 79, 32, 83, 77, 79, 75, 73, 78, 71, 32, 65, 76, 76, 79, 87, 69, 68, 32, 72, 69, 82, 69, 33, 34, 32, 115, 105, 103, 110, 101, 100, 32, 68, 114, 97, 99, 117, 108, 97, 0 }; +const uint8_t objtxt_67[] = { +77, 111, 117, 108, 100, 121, 32, 111, 108, 100, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 119, 105, 116, 104, 32, 97, 32, 115, 116, 97, 107, 101, 32, 105, 110, 32, 116, 104, 101, 32, 114, 105, 98, 32, 99, 97, 103, 101, 0 }; +const uint8_t objtxt_68[] = { +46, 0 }; +const uint8_t objtxt_69[] = { +66, 114, 111, 107, 101, 110, 32, 103, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_70[] = { +67, 101, 110, 116, 117, 114, 121, 32, 119, 111, 114, 116, 104, 32, 111, 102, 32, 100, 117, 115, 116, 0 }; +const uint8_t objtxt_71[] = { +77, 101, 109, 111, 32, 116, 97, 99, 107, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_72[] = { +46, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +83, 111, 114, 114, 121, 32, 73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 0 }; +const uint8_t msgtxt_2[] = { +73, 32, 115, 101, 101, 32, 73, 32, 119, 97, 115, 32, 112, 117, 116, 32, 116, 111, 32, 98, 101, 100, 46, 32, 73, 116, 115, 32, 65, 70, 116, 101, 114, 110, 111, 111, 110, 32, 38, 32, 73, 32, 111, 118, 101, 114, 115, 108, 101, 112, 116, 33, 0 }; +const uint8_t msgtxt_3[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 68, 86, 69, 87, 78, 84, 85, 82, 69, 58, 32, 53, 32, 34, 84, 72, 69, 32, 67, 79, 85, 78, 84, 34, 46, 32, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 65, 108, 118, 105, 110, 32, 70, 105, 108, 101, 115, 46, 10, 0 }; +const uint8_t msgtxt_4[] = { +73, 39, 109, 32, 117, 112, 32, 105, 110, 32, 65, 32, 99, 65, 115, 116, 108, 101, 44, 32, 105, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 65, 110, 99, 101, 32, 73, 32, 115, 101, 101, 32, 86, 79, 79, 68, 79, 79, 32, 67, 65, 83, 84, 76, 69, 46, 32, 84, 104, 101, 114, 101, 39, 115, 115, 116, 65, 110, 100, 105, 110, 103, 32, 114, 111, 111, 109, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t msgtxt_5[] = { +83, 111, 109, 101, 32, 116, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 0 }; +const uint8_t msgtxt_6[] = { +73, 116, 32, 98, 101, 97, 114, 115, 32, 116, 104, 101, 32, 70, 97, 109, 105, 108, 121, 32, 67, 114, 101, 115, 116, 32, 111, 102, 32, 68, 82, 65, 67, 85, 76, 65, 33, 0 }; +const uint8_t msgtxt_7[] = { +84, 101, 108, 108, 32, 109, 101, 32, 116, 111, 32, 119, 104, 97, 116, 63, 32, 105, 46, 101, 46, 32, 34, 84, 79, 32, 84, 82, 69, 69, 34, 0 }; +const uint8_t msgtxt_8[] = { +104, 105, 103, 104, 101, 114, 0 }; +const uint8_t msgtxt_9[] = { +73, 32, 104, 101, 97, 114, 32, 116, 104, 101, 0 }; +const uint8_t msgtxt_10[] = { +70, 108, 97, 103, 112, 111, 108, 101, 32, 115, 112, 108, 105, 110, 116, 101, 114, 0 }; +const uint8_t msgtxt_11[] = { +111, 102, 32, 121, 111, 117, 32, 97, 108, 119, 97, 121, 115, 32, 97, 115, 107, 105, 110, 103, 32, 102, 111, 114, 32, 104, 101, 108, 112, 33, 0 }; +const uint8_t msgtxt_12[] = { +73, 32, 102, 97, 108, 108, 32, 116, 111, 32, 109, 121, 32, 100, 101, 97, 116, 104, 0 }; +const uint8_t msgtxt_13[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_14[] = { +73, 39, 118, 101, 32, 116, 117, 114, 110, 101, 100, 32, 105, 110, 116, 111, 32, 65, 32, 86, 65, 77, 80, 73, 82, 69, 33, 0 }; +const uint8_t msgtxt_15[] = { +73, 32, 116, 104, 105, 110, 107, 32, 73, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 116, 97, 107, 101, 0 }; +const uint8_t msgtxt_16[] = { +109, 111, 114, 101, 32, 100, 97, 121, 115, 32, 111, 102, 32, 116, 104, 105, 115, 33, 0 }; +const uint8_t msgtxt_17[] = { +73, 32, 97, 112, 112, 101, 97, 114, 32, 112, 97, 108, 101, 32, 38, 32, 100, 114, 97, 105, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_18[] = { +77, 121, 32, 110, 101, 99, 107, 32, 108, 111, 111, 107, 115, 32, 66, 73, 84, 84, 69, 78, 33, 0 }; +const uint8_t msgtxt_19[] = { +73, 116, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 68, 65, 82, 75, 32, 111, 117, 116, 115, 105, 100, 101, 33, 0 }; +const uint8_t msgtxt_20[] = { +73, 39, 109, 32, 103, 101, 116, 116, 105, 110, 103, 32, 118, 101, 114, 121, 32, 116, 105, 114, 101, 100, 0 }; +const uint8_t msgtxt_21[] = { +84, 104, 101, 32, 115, 117, 110, 32, 104, 97, 115, 32, 115, 101, 116, 33, 0 }; +const uint8_t msgtxt_22[] = { +84, 79, 68, 65, 89, 32, 73, 32, 108, 111, 111, 107, 32, 104, 101, 97, 108, 116, 104, 121, 46, 46, 46, 0 }; +const uint8_t msgtxt_23[] = { +65, 32, 98, 65, 116, 32, 102, 108, 101, 119, 32, 98, 121, 32, 38, 32, 76, 65, 85, 71, 72, 69, 68, 32, 65, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_24[] = { +73, 39, 109, 32, 114, 101, 97, 108, 32, 80, 69, 80, 80, 89, 32, 110, 111, 119, 33, 0 }; +const uint8_t msgtxt_25[] = { +84, 104, 101, 114, 101, 39, 115, 32, 65, 32, 67, 79, 85, 71, 72, 73, 78, 32, 40, 115, 105, 99, 41, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 46, 0 }; +const uint8_t msgtxt_26[] = { +67, 79, 85, 71, 72, 33, 0 }; +const uint8_t msgtxt_27[] = { +84, 104, 101, 32, 99, 105, 103, 65, 114, 101, 116, 116, 101, 32, 119, 101, 110, 116, 32, 111, 117, 116, 32, 38, 32, 116, 104, 101, 32, 99, 111, 102, 102, 105, 110, 32, 86, 65, 78, 73, 83, 72, 69, 68, 0 }; +const uint8_t msgtxt_28[] = { +72, 101, 32, 115, 109, 101, 108, 108, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 38, 32, 102, 108, 101, 119, 32, 111, 110, 0 }; +const uint8_t msgtxt_29[] = { +104, 101, 32, 115, 101, 116, 116, 108, 101, 100, 32, 111, 110, 32, 109, 121, 32, 78, 69, 67, 75, 33, 0 }; +const uint8_t msgtxt_30[] = { +83, 104, 101, 101, 116, 32, 99, 97, 109, 101, 32, 117, 110, 116, 105, 101, 100, 0 }; +const uint8_t msgtxt_31[] = { +83, 116, 114, 97, 110, 103, 101, 32, 119, 97, 116, 99, 104, 32, 115, 97, 121, 115, 0 }; +const uint8_t msgtxt_32[] = { +109, 111, 118, 101, 115, 32, 116, 105, 108, 108, 32, 115, 117, 110, 115, 101, 116, 0 }; +const uint8_t msgtxt_33[] = { +73, 32, 99, 108, 111, 115, 101, 100, 32, 116, 104, 101, 32, 108, 105, 100, 32, 97, 110, 100, 32, 73, 32, 115, 117, 102, 102, 111, 99, 97, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_34[] = { +73, 116, 115, 32, 76, 79, 67, 75, 69, 68, 32, 102, 114, 111, 109, 32, 73, 78, 83, 73, 68, 69, 33, 0 }; +const uint8_t msgtxt_35[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 116, 104, 101, 114, 101, 44, 32, 109, 97, 121, 98, 101, 32, 73, 32, 115, 104, 111, 117, 108, 100, 0 }; +const uint8_t msgtxt_36[] = { +103, 111, 32, 116, 104, 101, 114, 101, 63, 0 }; +const uint8_t msgtxt_37[] = { +101, 109, 112, 116, 121, 32, 105, 116, 63, 0 }; +const uint8_t msgtxt_38[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_39[] = { +79, 75, 0 }; +const uint8_t msgtxt_40[] = { +84, 104, 101, 114, 101, 39, 115, 32, 65, 32, 116, 114, 101, 109, 101, 110, 100, 111, 117, 115, 32, 65, 109, 111, 117, 110, 116, 32, 111, 102, 32, 72, 69, 65, 84, 32, 38, 32, 83, 85, 78, 76, 73, 71, 72, 84, 32, 99, 111, 109, 105, 110, 103, 32, 111, 117, 116, 46, 0 }; +const uint8_t msgtxt_41[] = { +68, 101, 65, 114, 32, 68, 82, 65, 67, 75, 89, 44, 32, 68, 111, 110, 39, 116, 32, 111, 112, 101, 110, 32, 116, 104, 105, 115, 32, 112, 114, 101, 115, 101, 110, 116, 32, 116, 105, 108, 108, 32, 72, 65, 76, 76, 79, 87, 69, 69, 78, 46, 10, 32, 115, 105, 103, 110, 101, 100, 32, 67, 79, 85, 78, 84, 32, 89, 79, 82, 71, 65, 46, 0 }; +const uint8_t msgtxt_42[] = { +32, 10, 65, 32, 98, 101, 108, 108, 32, 114, 105, 110, 103, 115, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 58, 32, 34, 68, 73, 78, 71, 45, 68, 79, 78, 71, 34, 46, 10, 0 }; +const uint8_t msgtxt_43[] = { +80, 101, 97, 115, 97, 110, 116, 115, 32, 97, 116, 116, 97, 99, 107, 32, 109, 101, 44, 32, 73, 32, 119, 97, 115, 32, 83, 85, 80, 80, 79, 83, 69, 68, 32, 116, 111, 32, 100, 101, 115, 116, 114, 111, 121, 32, 116, 104, 101, 32, 86, 65, 77, 80, 73, 82, 69, 33, 0 }; +const uint8_t msgtxt_44[] = { +89, 79, 85, 32, 72, 65, 86, 69, 32, 76, 79, 83, 84, 33, 0 }; +const uint8_t msgtxt_45[] = { +73, 116, 115, 32, 102, 111, 114, 32, 68, 82, 65, 67, 85, 76, 65, 44, 32, 105, 116, 115, 32, 97, 110, 100, 32, 69, 65, 84, 73, 78, 71, 32, 38, 32, 71, 72, 79, 85, 76, 73, 78, 71, 32, 98, 105, 108, 108, 32, 102, 114, 111, 109, 32, 97, 10, 108, 111, 99, 97, 108, 32, 109, 111, 114, 116, 117, 97, 114, 121, 33, 0 }; +const uint8_t msgtxt_46[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 110, 111, 116, 101, 32, 80, 65, 80, 69, 82, 32, 67, 76, 73, 80, 80, 69, 68, 32, 116, 111, 32, 116, 104, 101, 32, 112, 111, 115, 116, 99, 97, 114, 100, 0 }; +const uint8_t msgtxt_47[] = { +80, 111, 115, 116, 109, 97, 115, 116, 101, 114, 32, 115, 97, 121, 115, 32, 104, 101, 39, 108, 108, 32, 98, 101, 32, 100, 101, 108, 105, 118, 101, 114, 105, 110, 103, 32, 97, 32, 112, 97, 99, 107, 97, 103, 101, 32, 116, 111, 109, 111, 114, 114, 111, 119, 46, 0 }; +const uint8_t msgtxt_48[] = { +73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 116, 111, 32, 108, 111, 111, 107, 0 }; +const uint8_t msgtxt_49[] = { +73, 32, 100, 114, 105, 118, 101, 32, 116, 104, 101, 32, 115, 116, 97, 107, 101, 32, 116, 104, 114, 111, 117, 103, 104, 32, 104, 105, 115, 32, 72, 69, 65, 82, 84, 46, 32, 84, 104, 101, 32, 116, 111, 119, 110, 115, 112, 101, 111, 112, 108, 101, 10, 99, 111, 109, 101, 32, 97, 110, 100, 32, 99, 97, 114, 114, 121, 32, 109, 101, 32, 111, 102, 102, 32, 99, 104, 101, 101, 114, 105, 110, 103, 33, 32, 40, 68, 111, 110, 39, 116, 32, 119, 111, 114, 114, 121, 44, 32, 73, 32, 116, 101, 108, 108, 32, 116, 104, 101, 109, 32, 73, 10, 111, 119, 101, 32, 105, 116, 32, 97, 108, 108, 32, 116, 111, 32, 121, 111, 117, 33, 33, 33, 33, 41, 0 }; +const uint8_t msgtxt_50[] = { +84, 114, 121, 58, 32, 34, 67, 76, 73, 77, 66, 32, 83, 72, 69, 69, 84, 34, 0 }; +const uint8_t msgtxt_51[] = { +73, 39, 109, 32, 65, 32, 112, 114, 101, 116, 116, 121, 32, 103, 111, 111, 100, 32, 76, 79, 67, 75, 32, 80, 73, 67, 75, 33, 0 }; +const uint8_t msgtxt_52[] = { +73, 39, 109, 32, 110, 111, 116, 32, 97, 110, 32, 97, 114, 115, 111, 110, 105, 115, 116, 33, 0 }; +const uint8_t msgtxt_53[] = { +84, 104, 101, 32, 116, 111, 114, 99, 104, 32, 98, 117, 114, 110, 116, 32, 116, 104, 114, 117, 32, 116, 104, 101, 32, 115, 104, 101, 101, 116, 33, 0 }; +const uint8_t msgtxt_54[] = { +65, 104, 32, 116, 104, 97, 116, 39, 115, 32, 109, 117, 99, 104, 32, 98, 101, 116, 116, 101, 114, 33, 0 }; +const uint8_t msgtxt_55[] = { +84, 104, 101, 114, 101, 39, 115, 32, 119, 114, 105, 116, 105, 110, 103, 32, 111, 110, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_56[] = { +77, 111, 98, 32, 108, 111, 111, 107, 115, 32, 65, 78, 71, 82, 89, 0 }; +const uint8_t msgtxt_57[] = { +73, 39, 118, 101, 32, 97, 32, 104, 117, 110, 99, 104, 32, 73, 39, 118, 101, 32, 98, 101, 101, 110, 32, 114, 111, 98, 98, 101, 100, 33, 0 }; +const uint8_t msgtxt_58[] = { +79, 100, 100, 44, 32, 73, 32, 119, 97, 115, 110, 39, 116, 32, 98, 105, 116, 116, 101, 110, 32, 108, 97, 115, 116, 32, 110, 105, 116, 101, 33, 0 }; +const uint8_t msgtxt_59[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 46, 0 }; +const uint8_t msgtxt_60[] = { +108, 111, 119, 101, 114, 0 }; +const uint8_t msgtxt_61[] = { +73, 39, 109, 32, 65, 116, 32, 116, 104, 101, 32, 116, 105, 112, 32, 111, 102, 32, 116, 104, 101, 32, 112, 111, 108, 101, 0 }; +const uint8_t msgtxt_62[] = { +73, 32, 110, 111, 116, 105, 99, 101, 32, 97, 32, 68, 65, 82, 75, 32, 87, 73, 78, 68, 79, 87, 32, 85, 78, 68, 69, 82, 32, 116, 104, 101, 32, 98, 101, 100, 114, 111, 111, 109, 32, 119, 105, 110, 100, 111, 119, 32, 108, 101, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_63[] = { +97, 115, 32, 73, 32, 102, 97, 108, 108, 0 }; +const uint8_t msgtxt_64[] = { +69, 88, 67, 69, 80, 84, 0 }; +const uint8_t msgtxt_65[] = { +73, 116, 32, 119, 111, 110, 39, 116, 32, 103, 111, 32, 97, 110, 121, 0 }; +const uint8_t msgtxt_66[] = { +116, 114, 121, 32, 108, 111, 111, 107, 105, 110, 103, 32, 97, 116, 32, 105, 116, 0 }; +const uint8_t msgtxt_67[] = { +84, 104, 101, 32, 112, 97, 112, 101, 114, 32, 99, 108, 105, 112, 32, 105, 115, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 121, 33, 0 }; +const uint8_t msgtxt_68[] = { +73, 32, 107, 110, 111, 119, 32, 104, 111, 119, 32, 116, 111, 32, 82, 65, 73, 83, 69, 32, 97, 110, 100, 32, 76, 79, 87, 69, 82, 32, 116, 104, 105, 115, 32, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_69[] = { +71, 69, 84, 32, 85, 80, 32, 121, 111, 117, 32, 115, 108, 101, 101, 112, 121, 32, 104, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_70[] = { +84, 114, 121, 32, 101, 120, 97, 109, 105, 110, 105, 110, 103, 32, 116, 104, 105, 110, 103, 115, 46, 0 }; +const uint8_t msgtxt_71[] = { +73, 39, 118, 101, 32, 110, 111, 32, 109, 97, 116, 99, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_72[] = { +84, 104, 101, 32, 109, 97, 116, 99, 104, 32, 102, 108, 97, 114, 101, 115, 32, 117, 112, 32, 98, 114, 105, 101, 102, 108, 121, 32, 46, 46, 46, 0 }; +const uint8_t msgtxt_73[] = { +73, 116, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 111, 112, 101, 110, 46, 0 }; +const uint8_t msgtxt_74[] = { +84, 114, 121, 58, 32, 34, 67, 76, 73, 77, 66, 32, 80, 79, 76, 69, 34, 0 }; +const uint8_t msgtxt_75[] = { +84, 114, 121, 58, 32, 34, 83, 65, 86, 69, 32, 71, 65, 77, 69, 34, 0 }; +const uint8_t msgtxt_76[] = { +65, 32, 98, 97, 116, 32, 109, 105, 103, 104, 116, 32, 109, 97, 107, 101, 32, 105, 116, 44, 32, 98, 117, 116, 32, 110, 111, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_77[] = { +70, 105, 114, 115, 116, 32, 73, 32, 110, 101, 101, 100, 32, 97, 110, 32, 117, 110, 108, 105, 116, 32, 99, 105, 103, 97, 114, 101, 116, 116, 101, 46, 0 }; +const uint8_t msgtxt_78[] = { +84, 101, 108, 108, 32, 109, 101, 32, 119, 105, 116, 104, 32, 119, 104, 97, 116, 63, 32, 76, 105, 107, 101, 58, 32, 34, 87, 73, 84, 72, 32, 70, 73, 83, 84, 34, 0 }; +const uint8_t msgtxt_79[] = { +73, 116, 32, 100, 111, 101, 115, 110, 39, 116, 32, 119, 111, 114, 107, 33, 0 }; +const uint8_t msgtxt_80[] = { +77, 97, 121, 98, 101, 32, 73, 32, 115, 104, 111, 117, 108, 100, 32, 66, 82, 69, 65, 75, 32, 105, 116, 63, 0 }; +const uint8_t msgtxt_81[] = { +89, 117, 99, 107, 33, 0 }; +const uint8_t msgtxt_82[] = { +97, 110, 100, 32, 116, 104, 101, 110, 32, 103, 111, 101, 115, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_83[] = { +77, 105, 114, 114, 111, 114, 32, 115, 104, 97, 116, 116, 101, 114, 115, 33, 32, 84, 104, 97, 116, 39, 115, 32, 55, 32, 121, 101, 97, 114, 115, 32, 98, 97, 100, 32, 108, 117, 99, 107, 33, 0 }; +const uint8_t msgtxt_84[] = { +73, 32, 115, 101, 116, 32, 116, 104, 101, 32, 109, 105, 114, 114, 111, 114, 32, 111, 110, 32, 116, 104, 101, 32, 112, 105, 108, 108, 111, 119, 46, 0 }; +const uint8_t msgtxt_85[] = { +84, 114, 121, 58, 32, 34, 71, 79, 32, 82, 79, 79, 77, 34, 0 }; +const uint8_t msgtxt_86[] = { +87, 104, 97, 116, 32, 97, 32, 68, 82, 69, 65, 77, 32, 73, 32, 106, 117, 115, 116, 32, 104, 97, 100, 32, 33, 33, 33, 33, 0 }; +const uint8_t msgtxt_87[] = { +68, 101, 97, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 58, 10, 32, 73, 32, 119, 97, 110, 116, 101, 100, 32, 116, 111, 32, 116, 97, 107, 101, 32, 116, 104, 105, 115, 32, 116, 105, 109, 101, 32, 40, 49, 32, 109, 111, 118, 101, 33, 41, 32, 116, 111, 32, 116, 104, 97, 110, 107, 32, 65, 76, 76, 32, 111, 102, 32, 121, 111, 117, 32, 111, 117, 116, 10, 116, 104, 101, 114, 101, 32, 105, 110, 32, 65, 68, 118, 101, 110, 116, 117, 114, 101, 108, 97, 110, 100, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 97, 110, 116, 97, 115, 116, 105, 99, 97, 108, 108, 121, 32, 119, 97, 114, 109, 32, 114, 101, 99, 101, 112, 116, 105, 111, 110, 10, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 104, 97, 115, 32, 114, 101, 99, 101, 105, 118, 101, 100, 33, 10, 72, 97, 112, 112, 121, 32, 65, 100, 118, 101, 110, 116, 117, 114, 105, 110, 103, 44, 10, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 10, 40, 67, 104, 105, 101, 102, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 41, 0 }; +const uint8_t msgtxt_88[] = { +65, 32, 99, 104, 111, 111, 111, 111, 111, 111, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, +}; + + +const uint8_t status[] = { +/* AUTO 100 DECRMNT MINUTES*/ + 161, + 77, 73, +/* AUTO 0 INTRO*/ + 211, + 9, 1, 0, 3, 0, 0, 0, 65, + 3, 79, 81, 79, +/* AUTO 0 INTRO*/ + 211, + 9, 1, 0, 3, 0, 0, 0, 3, + 2, 81, 79, 81, +/* AUTO 0 18*/ + 212, + 15, 10, 16, 1, 9, 2, 7, 18, 7, 6, + 19, +/* AUTO 0 GETTING TIRED*/ + 208, + 15, 4, 9, 4, 16, 1, 9, 2, + 20, +/* AUTO 0 SUNSET*/ + 198, + 19, 1, + 56, 21, 64, +/* AUTO 100 SHEET OVER LEDGE*/ + 176, + 2, 35, 4, 3, 0, 35, 0, 10, + 72, +/* AUTO 100 DEC PILL*/ + 170, + 8, 4, 0, 1, + 81, 77, 73, +/* AUTO 0 WEARING OFF*/ + 200, + 15, 8, 15, 4, + 20, +/* AUTO 0 WORE OFF*/ + 200, + 15, 0, 0, 4, + 60, +/* AUTO 0 RESET COUNTER*/ + 196, + 0, 1, + 81, +/* AUTO 33 POLE BROKE*/ + 143, 33, + 4, 4, 13, 7, 0, 22, + 9, 10, 12, 54, +/* AUTO 100 UNTIE SHEET*/ + 178, + 1, 35, 4, 11, 0, 36, 0, 35, + 59, 72, 30, +/* AUTO 100 FELL ASLEEP*/ + 177, + 15, 0, 9, 4, 0, 2, 7, 22, + 58, 70, +/* AUTO 25 BAT AT NITE*/ + 145, 25, + 15, 0, 1, 31, 9, 2, 7, 22, + 23, 28, +/* AUTO 40 BAT BITE AT NITE*/ + 151, 40, + 15, 0, 6, 31, 9, 2, 7, 22, 0, 2, + 23, 29, 58, 88, +/* AUTO 50 BURNT SHEET*/ + 142, 50, + 4, 4, 3, 9, 0, 22, + 103, 12, 54, +/* AUTO 100 FELL SLEEP?*/ + 183, + 8, 2, 0, 7, 0, 3, 0, 2, 7, 22, + 73, 54, 58, 60, +/* AUTO 0 OPEN IF DOOR UNLOCKED*/ + 214, + 14, 14, 0, 0, 0, 13, 0, 21, 0, 12, + 54, 62, 59, +/* AUTO 0 STEAL STAKE*/ + 209, + 13, 16, 5, 16, 0, 16, 0, 9, + 59, 58, +/* AUTO 0 RETURN SHEE*/ + 211, + 0, 6, 0, 7, 0, 10, 0, 35, + 59, 59, 59, 59, +/* AUTO 0 CLOSE WINDOW*/ + 215, + 0, 1, 0, 2, 0, 2, 0, 65, 0, 55, + 59, 62, 79, 59, +/* AUTO 0 GET PACKAGE*/ + 209, + 13, 45, 5, 45, 0, 45, 0, 9, + 59, 58, +/* AUTO 0 GET CIGS*/ + 213, + 13, 26, 5, 26, 0, 26, 0, 13, 0, 9, + 62, 58, +/* AUTO 0 DREAMING?*/ + 201, + 4, 0, 0, 1, + 54, 136, +/* AUTO 0 RIPPED OFF?*/ + 206, + 8, 9, 0, 9, 0, 1, + 60, 54, 107, +/* AUTO 0 PUT TO BED*/ + 199, + 0, 1, + 54, 57, 2, 53, +/* AUTO 0 GET BLOOD*/ + 210, + 3, 18, 0, 3, 0, 18, 0, 19, + 60, 72, 108, +/* AUTO 0 SHEETS*/ + 203, + 0, 4, 0, 36, + 60, 59, 53, 64, +/* AUTO 100 DEC DAYS*/ + 171, + 8, 3, 0, 3, + 60, 81, 77, 73, +/* AUTO 0 LOST GAME*/ + 202, + 15, 0, 0, 22, + 18, 14, 54, +/* AUTO 0 RESET DAY + REPORT BITE*/ + 202, + 0, 0, 0, 22, + 18, 81, 74, +/* AUTO 50 CIGARETTE OUT*/ + 142, 50, + 13, 27, 7, 13, 0, 2, + 81, 77, 73, +/* AUTO 0 GONE OUT?*/ + 215, + 19, 0, 0, 27, 0, 28, 0, 29, 0, 30, + 59, 59, 59, 59, +/* AUTO 0 REPORT IT*/ + 200, + 4, 6, 19, 0, + 27, +/* AUTO 0 RESET COUNTER*/ + 196, + 0, 2, + 81, +/* AUTO 100 END GAME*/ + 165, + 4, 22, + 44, 63, +/* AUTO 30 DELIVER PACKAGE*/ + 149, 30, + 15, 25, 14, 45, 0, 0, 7, 9, 14, 46, + 73, 81, +/* AUTO 0 CHECK DAY*/ + 214, + 19, 2, 0, 45, 0, 9, 0, 65, 0, 9, + 62, 62, 42, +/* AUTO 0 RESET COUNTER*/ + 192, + 81, +/* AUTO 100 MORE INTRO*/ + 168, + 9, 1, 0, 1, + 58, +/* AUTO 100 SUNSET?*/ + 169, + 15, 1, 12, 9, + 56, 64, +/* AUTO 100 LITE DOORLW*/ + 173, + 4, 10, 16, 0, 8, 15, + 57, 76, +/* AUTO 29 DELIVER POSTCARD*/ + 149, 29, + 15, 39, 14, 47, 0, 47, 0, 9, 7, 9, + 62, 42, +}; +const uint8_t actions[] = { +/* TIE SHE */ + 4, 31, 7, + 3, 0, + 7, +/* GO WIN */ + 10, 1, 9, + 4, 4, 0, 5, + 54, 76, 39, +/* GO WIN */ + 10, 1, 9, + 4, 5, 0, 10, + 54, 76, 39, +/* LOO MIR */ + 11, 8, 43, + 3, 17, 13, 22, + 73, 18, 17, 15, +/* AUTO 0 */ + 195, + 81, 78, 81, 16, +/* UNL TOR */ + 14, 43, 20, + 3, 9, 0, 9, 0, 20, + 72, 39, 64, +/* LIG TOR */ + 18, 45, 20, + 3, 20, 3, 21, 0, 9, 0, 20, + 72, 76, 39, +/* EMP BOT */ + 13, 50, 41, + 3, 18, 0, 18, 0, 19, + 72, 39, +/* LOO MIR */ + 8, 8, 43, + 3, 17, 14, 22, + 22, +/* LOO WIN */ + 4, 8, 9, + 4, 2, + 4, +/* CLO WIN CLO*/ + 14, 34, 9, + 2, 1, 0, 1, 0, 2, + 72, 76, 39, +/* GO WIN */ + 19, 1, 9, + 2, 1, 1, 35, 0, 3, 0, 6, + 54, 53, 76, 39, +/* TO BED */ + 23, 42, 33, + 3, 0, 2, 34, 0, 0, 0, 35, 0, 36, + 59, 53, 53, 76, +/* TO POL */ + 23, 42, 12, + 3, 0, 3, 4, 0, 0, 0, 7, 0, 10, + 59, 53, 53, 76, +/* CLI ANY */ + 10, 28, 0, + 2, 10, 0, 4, + 54, 76, 39, +/* CLI ANY */ + 10, 28, 0, + 2, 11, 0, 4, + 54, 76, 39, +/* SLE ANY */ + 10, 40, 0, + 0, 2, 0, 4, + 58, 70, 60, +/* LOO WAT */ + 6, 8, 46, + 3, 37, + 31, 78, 32, +/* GO WIN */ + 19, 1, 9, + 4, 3, 1, 35, 0, 2, 0, 6, + 54, 59, 76, 39, +/* LOO OVE */ + 8, 8, 44, + 16, 0, 3, 44, + 40, +/* LOO OVE */ + 9, 8, 44, + 3, 44, 15, 0, + 35, 36, +/* TO RIN */ + 23, 42, 55, + 2, 54, 0, 0, 0, 35, 0, 18, 0, 55, + 59, 62, 53, 76, +/* UNT ANY */ + 15, 32, 0, + 2, 55, 0, 35, 0, 55, + 59, 59, 53, 76, +/* UNT ANY */ + 15, 32, 0, + 2, 7, 0, 7, 0, 10, + 59, 59, 53, 76, +/* LOO DUM */ + 6, 8, 37, + 2, 63, + 39, 35, 36, +/* EAT TAB */ + 23, 58, 53, + 3, 23, 0, 4, 0, 23, 0, 24, 0, 1, + 58, 72, 81, 73, +/* AUTO 0 */ + 203, + 0, 40, 0, 1, + 79, 81, 39, 24, +/* EAT TAB PILL 2*/ + 23, 58, 53, + 3, 24, 0, 4, 0, 24, 0, 8, 0, 1, + 58, 72, 81, 73, +/* AUTO 0 */ + 203, + 0, 40, 0, 1, + 79, 81, 39, 24, +/* LOO PAC */ + 5, 8, 21, + 4, 4, + 35, 36, +/* SMO ANY */ + 22, 25, 0, + 3, 27, 4, 6, 0, 28, 0, 30, 14, 28, + 25, 53, 53, +/* LOO TOI */ + 5, 8, 54, + 2, 62, + 35, 36, +/* LOO ROO */ + 5, 8, 16, + 4, 20, + 35, 36, +/* LIG CIG */ + 23, 45, 29, + 3, 33, 3, 21, 0, 2, 0, 8, 0, 2, + 81, 79, 81, 73, +/* AUTO 0 */ + 201, + 0, 33, 0, 27, + 72, 39, +/* GET CIG */ + 9, 10, 29, + 3, 33, 0, 33, + 52, 39, +/* LOO POS */ + 4, 8, 48, + 3, 47, + 105, +/* LOO LET */ + 4, 8, 59, + 3, 65, + 105, +/* GET CIG */ + 9, 10, 29, + 3, 27, 0, 27, + 52, 39, +/* LOO GAT */ + 4, 8, 50, + 3, 50, + 106, +/* LOO COF */ + 4, 8, 34, + 2, 30, + 38, +/* LOO COF */ + 5, 8, 34, + 2, 29, + 35, 36, +/* LOO VIA */ + 9, 8, 47, + 3, 42, 9, 6, + 35, 37, +/* OPE DOO */ + 14, 37, 19, + 2, 12, 0, 12, 0, 13, + 72, 76, 39, +/* CLO DOO */ + 14, 34, 19, + 2, 13, 0, 12, 0, 13, + 72, 76, 39, +/* LOC DOO */ + 18, 29, 19, + 2, 12, 3, 15, 0, 12, 0, 14, + 72, 76, 39, +/* LOO CAS */ + 7, 8, 28, + 2, 49, + 39, 38, 114, 112, +/* GET LOC .*/ + 18, 10, 56, + 2, 14, 3, 15, 0, 14, 0, 12, + 72, 76, 39, +/* REA NOT */ + 8, 41, 17, + 3, 47, 14, 51, + 117, +/* GO BED */ + 10, 1, 33, + 2, 34, 0, 1, + 54, 76, 39, +/* GO OVE */ + 9, 1, 44, + 3, 44, 16, 0, + 1, 40, +/* GO OVE */ + 14, 1, 44, + 3, 44, 15, 0, 0, 15, + 54, 76, 39, +/* WIT FIL */ + 18, 61, 39, + 3, 41, 2, 39, 0, 39, 0, 40, + 72, 76, 39, +/* OPE WIN */ + 14, 37, 9, + 2, 2, 0, 1, 0, 2, + 72, 76, 39, +/* GO DUM */ + 10, 1, 37, + 2, 63, 0, 20, + 54, 76, 39, +/* KIL BAT WIN*/ + 23, 22, 25, + 3, 52, 3, 16, 3, 53, 0, 52, 0, 67, + 72, 76, 49, 63, +/* GO ROO */ + 18, 1, 16, + 9, 8, 9, 7, 4, 20, 0, 12, + 54, 76, 39, +/* EMP VIA .*/ + 18, 50, 47, + 3, 42, 0, 23, 9, 6, 0, 6, + 53, 76, 58, +/* UNT ANY */ + 19, 32, 0, + 2, 36, 0, 36, 0, 6, 0, 35, + 59, 59, 59, 73, +/* AUTO 0 */ + 198, + 0, 10, + 59, 53, 76, +/* CUT FIL */ + 7, 52, 39, + 3, 41, + 39, 5, 77, 77, +/* WAI ANY */ + 9, 49, 0, + 16, 5, 0, 5, + 5, 83, +/* PUL BEL */ + 5, 56, 58, + 2, 48, + 39, 42, +/* EAT TAB */ + 19, 58, 53, + 3, 8, 0, 4, 0, 8, 0, 1, + 58, 59, 81, 73, +/* AUTO 0 */ + 203, + 0, 40, 0, 1, + 79, 81, 39, 24, +/* WIT FIL NO FILE*/ + 5, 61, 39, + 12, 41, + 1, 107, +/* GO PAS */ + 11, 1, 32, + 2, 56, 0, 19, + 54, 56, 76, 39, +/* FIN ANY */ + 1, 26, 0, + 1, 48, +/* GO WIN */ + 10, 1, 9, + 4, 10, 0, 5, + 54, 76, 39, +/* GET POR */ + 18, 10, 36, + 3, 58, 0, 58, 0, 56, 0, 10, + 52, 62, 39, +/* CLI ANY */ + 15, 28, 0, + 2, 35, 4, 18, 0, 16, + 54, 57, 76, 39, +/* CLI ANY */ + 11, 28, 0, + 2, 32, 0, 18, + 56, 54, 76, 39, +/* GO SHE */ + 0, 1, 7, + 50, +/* GO PIT */ + 11, 1, 18, + 2, 32, 0, 18, + 56, 54, 76, 39, +/* CLO ANY */ + 5, 34, 0, + 2, 38, + 33, 63, +/* CLO ANY */ + 13, 34, 0, + 2, 29, 0, 29, 0, 30, + 72, 76, +/* OPE COF */ + 13, 37, 34, + 2, 28, 13, 39, 16, 0, + 1, 34, +/* OPE COF */ + 15, 37, 34, + 2, 28, 0, 30, 0, 29, + 59, 53, 76, 73, +/* AUTO 0 PUT DRACKY*/ + 204, + 16, 0, 0, 52, 0, 13, + 62, +/* EAT GAR */ + 9, 58, 30, + 3, 31, 0, 31, + 39, 59, +/* GO GAT */ + 6, 1, 50, + 2, 50, + 43, 44, 63, +/* GO ROO */ + 14, 1, 16, + 4, 20, 8, 7, 0, 21, + 54, 76, 39, +/* REA LET */ + 4, 41, 59, + 3, 65, + 41, +/* REA POS */ + 8, 41, 48, + 3, 47, 13, 51, + 45, +/* REA POS */ + 9, 41, 48, + 3, 47, 14, 51, + 45, 46, +/* REA NOT */ + 4, 41, 17, + 3, 51, + 47, +/* GET CLI */ + 19, 10, 23, + 3, 47, 14, 15, 0, 15, 0, 51, + 74, 74, 70, 39, +/* UNC ANY */ + 19, 7, 0, + 3, 47, 14, 15, 0, 15, 0, 51, + 74, 74, 70, 39, +/* GET NOT */ + 9, 10, 17, + 3, 51, 0, 51, + 74, 39, +/* GET CLI */ + 9, 10, 23, + 3, 15, 0, 15, + 74, 39, +/* OPE PAC */ + 19, 37, 21, + 3, 45, 0, 46, 0, 26, 0, 18, + 53, 53, 53, 73, +/* AUTO 0 */ + 197, + 0, 45, + 59, 39, +/* HEL ANY */ + 4, 27, 0, + 2, 14, + 51, +/* LIG MAT */ + 11, 45, 22, + 3, 21, 8, 15, + 57, 76, 122, 73, +/* AUTO 0 */ + 195, + 88, 88, 88, 132, +/* AUTO 0 */ + 193, + 56, 76, +/* JUM ANY */ + 11, 48, 0, + 4, 3, 0, 22, + 12, 113, 112, 54, +/* GO ROO */ + 14, 1, 16, + 4, 20, 8, 8, 0, 14, + 54, 76, 39, +/* CLI ANY */ + 10, 28, 0, + 4, 4, 0, 3, + 54, 76, 39, +/* SAV GAM */ + 1, 24, 63, + 39, 71, +/* GET SHE */ + 5, 10, 7, + 3, 0, + 52, 39, +/* OPE WIN */ + 6, 37, 9, + 4, 4, + 1, 35, 36, +/* GO TOI */ + 5, 1, 54, + 2, 62, + 39, 104, +/* TO ANY */ + 8, 42, 0, + 3, 0, 7, 1, + 1, +/* GET SHE */ + 9, 10, 7, + 3, 35, 0, 35, + 52, 39, +/* REA MEM */ + 4, 41, 78, + 3, 71, + 137, +/* GET UP */ + 10, 10, 5, + 4, 1, 0, 2, + 54, 76, 39, +/* OUT ANY */ + 4, 16, 0, + 4, 20, + 135, +/* FLY ANY */ + 255, 33, 0, + 4, 0, +/* OPE LET */ + 4, 37, 59, + 3, 65, + 105, +/* EAT BOT */ + 9, 58, 41, + 3, 18, 0, 22, + 54, 14, +/* GO DOO */ + 10, 1, 19, + 2, 13, 0, 7, + 54, 76, 39, +/* PUL ANY */ + 0, 56, 0, + 109, +/* SMO ANY */ + 4, 25, 0, + 3, 27, + 26, +/* UNL DOO */ + 4, 43, 19, + 2, 14, + 13, +/* HEL ANY */ + 4, 27, 0, + 4, 20, + 118, +/* QUI ANY */ + 0, 6, 0, + 63, +/* CLI POL */ + 7, 28, 12, + 2, 4, + 70, 111, 73, 9, +/* AUTO 0 */ + 199, + 0, 22, + 10, 113, 54, 112, +/* PUT DUM */ + 10, 18, 37, + 4, 20, 8, 7, + 1, 115, 110, +/* PUT DUM */ + 22, 18, 37, + 4, 20, 8, 8, 0, 8, 0, 63, 0, 12, + 60, 39, 62, +/* PUT DUM */ + 18, 18, 37, + 4, 20, 0, 7, 0, 63, 0, 21, + 58, 39, 62, +/* OPE DUM OPE*/ + 10, 37, 37, + 4, 20, 8, 8, + 1, 115, 8, +/* OPE DUM RAISE DUMBWAITER*/ + 22, 37, 37, + 8, 7, 4, 20, 0, 7, 0, 63, 0, 12, + 60, 39, 62, +/* OPE DUM RAISE DUMBWAITER*/ + 18, 37, 37, + 4, 20, 0, 8, 0, 63, 0, 14, + 58, 39, 62, +/* GET CIG */ + 9, 10, 29, + 3, 26, 0, 33, + 52, 39, +/* GO SLE */ + 5, 1, 60, + 0, 2, + 58, 70, +/* LOO UP */ + 7, 8, 5, + 4, 9, + 39, 38, 114, 112, +/* LOO CAS */ + 7, 8, 28, + 4, 9, + 39, 38, 114, 112, +/* LOO UP */ + 7, 8, 5, + 2, 49, + 39, 38, 114, 112, +/* WAI ANY */ + 0, 49, 0, + 5, +/* JUM ANY */ + 1, 48, 0, + 39, 109, +/* GO COF */ + 10, 1, 34, + 2, 29, 0, 13, + 54, 76, 39, +/* WIT ANY */ + 1, 61, 0, + 129, 109, +/* OUT ANY */ + 1, 16, 0, + 36, 13, +/* OPE DUM */ + 5, 37, 37, + 2, 63, + 35, 36, +/* GET INV */ + 0, 10, 14, + 66, +/* CUT ANY */ + 0, 52, 0, + 128, +/* LOO NEC */ + 0, 8, 70, + 66, +/* LOO MIR */ + 4, 8, 43, + 12, 17, + 13, +/* HEL ANY */ + 4, 27, 0, + 4, 1, + 119, +/* HEL ANY */ + 10, 27, 0, + 0, 3, 0, 1, + 81, 82, 73, +/* AUTO 0 */ + 202, + 16, 4, 0, 3, + 20, 11, 81, +/* AUTO 0 */ + 201, + 15, 4, 0, 3, + 120, 81, +/* GET GLA */ + 5, 10, 74, + 2, 69, + 131, 1, +/* LIG CIG */ + 4, 45, 29, + 12, 33, + 127, +/* LIG MAT */ + 7, 45, 22, + 3, 21, + 122, 88, 88, 132, +/* LIG ANY */ + 5, 45, 0, + 6, 21, + 13, 121, +/* LIG ANY */ + 5, 45, 0, + 3, 21, + 1, 102, +/* OPE OVE */ + 0, 37, 44, + 123, +/* CLO OVE */ + 0, 34, 44, + 1, +/* GO POL */ + 4, 1, 12, + 4, 3, + 124, +/* FLU TOI */ + 4, 60, 54, + 2, 62, + 39, +/* SAV ANY */ + 0, 24, 0, + 125, +/* TIE ANY */ + 0, 31, 0, + 1, +/* GO VEN */ + 1, 1, 52, + 1, 126, +/* LOO DOO */ + 5, 8, 19, + 4, 21, + 35, 36, +/* LOO DUS */ + 5, 8, 76, + 3, 70, + 138, 38, +/* GO WIN */ + 14, 1, 9, + 2, 1, 0, 3, 6, 35, + 54, 76, 39, +/* JAM ANY */ + 0, 62, 0, + 130, +/* EAT STA DRIVE STAKE*/ + 23, 58, 24, + 3, 52, 3, 16, 3, 53, 0, 52, 0, 67, + 72, 76, 49, 63, +/* GO WIN */ + 14, 1, 9, + 4, 3, 0, 2, 6, 35, + 54, 76, 39, +/* SAY ANY */ + 1, 65, 0, + 39, 85, +/* MAK BED */ + 0, 67, 33, + 39, +/* SCO ANY */ + 0, 68, 0, + 13, +/* SME ANY */ + 0, 69, 0, + 39, +/* EAT ANY */ + 0, 58, 0, + 131, +/* FEE ANY */ + 1, 71, 0, + 39, 38, +/* PUT MIR */ + 18, 18, 43, + 1, 17, 5, 3, 0, 17, 0, 69, + 59, 53, 133, +/* PUT MIR */ + 14, 18, 43, + 1, 17, 2, 3, 0, 17, + 39, 53, 134, +/* LOO COA */ + 4, 8, 15, + 3, 5, + 6, +/* REA ANY */ + 0, 41, 0, + 116, +/* LOO MEM */ + 4, 8, 78, + 3, 71, + 105, +/* LOO NOT */ + 4, 8, 17, + 3, 51, + 105, +/* INV ANY */ + 0, 30, 0, + 66, +/* LOO ANY */ + 1, 8, 0, + 76, 38, + 255, +}; + + +const uint8_t verbs[] = { + /* AUT */ + 65, 85, 84, + /* GO */ + 71, 79, 32, + /* *RUN */ + 210, 85, 78, + /* *WAL */ + 215, 65, 76, + /* *ENT */ + 197, 78, 84, + /* *USE */ + 213, 83, 69, + /* QUI */ + 81, 85, 73, + /* UNC */ + 85, 78, 67, + /* LOO */ + 76, 79, 79, + /* *EXA */ + 197, 88, 65, + /* GET */ + 71, 69, 84, + /* *TAK */ + 212, 65, 75, + /* *PIC */ + 208, 73, 67, + /* *CAT */ + 195, 65, 84, + /* *REM */ + 210, 69, 77, + /* *MOV */ + 205, 79, 86, + /* OUT */ + 79, 85, 84, + /* *EXI */ + 197, 88, 73, + /* PUT */ + 80, 85, 84, + /* *DRO */ + 196, 82, 79, + /* *LEA */ + 204, 69, 65, + /* *LOW */ + 204, 79, 87, + /* KIL */ + 75, 73, 76, + /* *ATT */ + 193, 84, 84, + /* SAV */ + 83, 65, 86, + /* SMO */ + 83, 77, 79, + /* FIN */ + 70, 73, 78, + /* HEL */ + 72, 69, 76, + /* CLI */ + 67, 76, 73, + /* LOC */ + 76, 79, 67, + /* INV */ + 73, 78, 86, + /* TIE */ + 84, 73, 69, + /* UNT */ + 85, 78, 84, + /* FLY */ + 70, 76, 89, + /* CLO */ + 67, 76, 79, + /* *SHU */ + 211, 72, 85, + /* . */ + 46, 32, 32, + /* OPE */ + 79, 80, 69, + /* *LIF */ + 204, 73, 70, + /* *RAI */ + 210, 65, 73, + /* SLE */ + 83, 76, 69, + /* REA */ + 82, 69, 65, + /* TO */ + 84, 79, 32, + /* UNL */ + 85, 78, 76, + /* *EXT */ + 197, 88, 84, + /* LIG */ + 76, 73, 71, + /* *BUR */ + 194, 85, 82, + /* *IGN */ + 201, 71, 78, + /* JUM */ + 74, 85, 77, + /* WAI */ + 87, 65, 73, + /* EMP */ + 69, 77, 80, + /* *SPI */ + 211, 80, 73, + /* CUT */ + 67, 85, 84, + /* *BRE */ + 194, 82, 69, + /* *FIL */ + 198, 73, 76, + /* *TRI */ + 212, 82, 73, + /* PUL */ + 80, 85, 76, + /* *RIN */ + 210, 73, 78, + /* EAT */ + 69, 65, 84, + /* *DRI */ + 196, 82, 73, + /* FLU */ + 70, 76, 85, + /* WIT */ + 87, 73, 84, + /* JAM */ + 74, 65, 77, + /* *SMA */ + 211, 77, 65, + /* *BUS */ + 194, 85, 83, + /* SAY */ + 83, 65, 89, + /* *YEL */ + 217, 69, 76, + /* MAK */ + 77, 65, 75, + /* SCO */ + 83, 67, 79, + /* SME */ + 83, 77, 69, + /* *SNI */ + 211, 78, 73, + /* FEE */ + 70, 69, 69, + /* *TOU */ + 212, 79, 85, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, + /* NORTH */ + 78, 79, 82, + /* SOUTH */ + 83, 79, 85, + /* EAST */ + 69, 65, 83, + /* WEST */ + 87, 69, 83, + /* UP */ + 85, 80, 32, + /* DOWN */ + 68, 79, 87, + /* SHE */ + 83, 72, 69, + /* *END */ + 197, 78, 68, + /* WIN */ + 87, 73, 78, + /* *BOX */ + 194, 79, 88, + /* *LED */ + 204, 69, 68, + /* POL */ + 80, 79, 76, + /* *FLA */ + 198, 76, 65, + /* INV */ + 73, 78, 86, + /* COA */ + 67, 79, 65, + /* ROO */ + 82, 79, 79, + /* NOT */ + 78, 79, 84, + /* PIT */ + 80, 73, 84, + /* DOO */ + 68, 79, 79, + /* TOR */ + 84, 79, 82, + /* PAC */ + 80, 65, 67, + /* MAT */ + 77, 65, 84, + /* CLI */ + 67, 76, 73, + /* STA */ + 83, 84, 65, + /* BAT */ + 66, 65, 84, + /* *VAM */ + 214, 65, 77, + /* *DRA */ + 196, 82, 65, + /* CAS */ + 67, 65, 83, + /* CIG */ + 67, 73, 71, + /* GAR */ + 71, 65, 82, + /* DAI */ + 68, 65, 73, + /* PAS */ + 80, 65, 83, + /* BED */ + 66, 69, 68, + /* COF */ + 67, 79, 70, + /* *LID */ + 204, 73, 68, + /* POR */ + 80, 79, 82, + /* DUM */ + 68, 85, 77, + /* MAL */ + 77, 65, 76, + /* FIL */ + 70, 73, 76, + /* *NAI */ + 206, 65, 73, + /* BOT */ + 66, 79, 84, + /* *BLO */ + 194, 76, 79, + /* MIR */ + 77, 73, 82, + /* OVE */ + 79, 86, 69, + /* LEN */ + 76, 69, 78, + /* WAT */ + 87, 65, 84, + /* VIA */ + 86, 73, 65, + /* POS */ + 80, 79, 83, + /* *CAR */ + 195, 65, 82, + /* GAT */ + 71, 65, 84, + /* *CRO */ + 195, 82, 79, + /* VEN */ + 86, 69, 78, + /* TAB */ + 84, 65, 66, + /* TOI */ + 84, 79, 73, + /* RIN */ + 82, 73, 78, + /* LOC */ + 76, 79, 67, + /* ARO */ + 65, 82, 79, + /* BEL */ + 66, 69, 76, + /* LET */ + 76, 69, 84, + /* SLE */ + 83, 76, 69, + /* BOL */ + 66, 79, 76, + /* HOL */ + 72, 79, 76, + /* GAM */ + 71, 65, 77, + /* PIL */ + 80, 73, 76, + /* FIS */ + 70, 73, 83, + /* *HAN */ + 200, 65, 78, + /* *FOO */ + 198, 79, 79, + /* *FEE */ + 198, 69, 69, + /* HEL */ + 72, 69, 76, + /* NEC */ + 78, 69, 67, + /* *BIT */ + 194, 73, 84, + /* KEY */ + 75, 69, 89, + /* TRE */ + 84, 82, 69, + /* GLA */ + 71, 76, 65, + /* DRE */ + 68, 82, 69, + /* DUS */ + 68, 85, 83, + /* TAC */ + 84, 65, 67, + /* MEM */ + 77, 69, 77, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* SHE */ + 83, 72, 69, + 0, + /* PIL */ + 80, 73, 76, + 3, + /* COA */ + 67, 79, 65, + 5, + /* TAB */ + 84, 65, 66, + 8, + /* TOR */ + 84, 79, 82, + 9, + /* CLI */ + 67, 76, 73, + 15, + /* STA */ + 83, 84, 65, + 16, + /* MIR */ + 77, 73, 82, + 17, + /* BOT */ + 66, 79, 84, + 18, + /* BOT */ + 66, 79, 84, + 19, + /* TOR */ + 84, 79, 82, + 20, + /* MAT */ + 77, 65, 84, + 21, + /* TAB */ + 84, 65, 66, + 23, + /* TAB */ + 84, 65, 66, + 24, + /* PAC */ + 80, 65, 67, + 26, + /* CIG */ + 67, 73, 71, + 27, + /* GAR */ + 71, 65, 82, + 31, + /* CIG */ + 67, 73, 71, + 33, + /* SHE */ + 83, 72, 69, + 35, + /* WAT */ + 87, 65, 84, + 37, + /* FIL */ + 70, 73, 76, + 41, + /* VIA */ + 86, 73, 65, + 42, + /* PAC */ + 80, 65, 67, + 45, + /* WIN */ + 87, 73, 78, + 46, + /* POS */ + 80, 79, 83, + 47, + /* NOT */ + 78, 79, 84, + 51, + /* BAT */ + 66, 65, 84, + 52, + /* MAL */ + 77, 65, 76, + 53, + /* POR */ + 80, 79, 82, + 58, + /* DAI */ + 68, 65, 73, + 61, + /* LET */ + 76, 69, 84, + 65, + /* KEY */ + 75, 69, 89, + 68, + /* DUS */ + 68, 85, 83, + 70, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv06.c b/Applications/games/adv06.c new file mode 100644 index 00000000..9eb4caaa --- /dev/null +++ b/Applications/games/adv06.c @@ -0,0 +1,3082 @@ +#define NUM_OBJ 55 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 22; +const uint8_t treasures = 5; +const uint8_t lastloc = 35; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +46, 0 }; +const uint8_t loctxt_1[] = { +111, 110, 101, 32, 109, 97, 110, 32, 115, 99, 111, 117, 116, 115, 104, 105, 112, 0 }; +const uint8_t loctxt_2[] = { +115, 109, 97, 108, 108, 32, 97, 105, 114, 108, 111, 99, 107, 0 }; +const uint8_t loctxt_3[] = { +108, 97, 114, 103, 101, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 108, 97, 110, 101, 116, 111, 105, 100, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 108, 97, 110, 101, 116, 111, 105, 100, 0 }; +const uint8_t loctxt_6[] = { +115, 116, 114, 97, 110, 103, 101, 32, 104, 101, 120, 97, 103, 111, 110, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_7[] = { +115, 116, 111, 114, 97, 103, 101, 32, 104, 111, 108, 100, 0 }; +const uint8_t loctxt_8[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 108, 97, 110, 101, 116, 111, 105, 100, 0 }; +const uint8_t loctxt_9[] = { +76, 97, 114, 103, 101, 32, 103, 114, 97, 115, 115, 121, 32, 112, 108, 97, 105, 110, 32, 97, 116, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 106, 117, 110, 103, 108, 101, 0 }; +const uint8_t loctxt_10[] = { +109, 101, 116, 104, 97, 110, 101, 32, 115, 110, 111, 119, 32, 115, 116, 111, 114, 109, 0 }; +const uint8_t loctxt_11[] = { +115, 109, 97, 108, 108, 32, 100, 101, 114, 101, 108, 105, 99, 116, 32, 115, 112, 97, 99, 101, 99, 114, 97, 102, 116, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, 101, 32, 97, 105, 114, 108, 111, 99, 107, 32, 111, 110, 32, 97, 32, 108, 101, 100, 103, 101, 46, 10, 84, 104, 101, 32, 103, 114, 111, 117, 110, 100, 32, 105, 115, 32, 57, 48, 32, 109, 101, 116, 101, 114, 115, 32, 98, 101, 108, 111, 119, 0 }; +const uint8_t loctxt_13[] = { +65, 108, 105, 101, 110, 32, 65, 114, 116, 32, 77, 117, 115, 101, 117, 109, 0 }; +const uint8_t loctxt_14[] = { +100, 101, 115, 101, 114, 116, 101, 100, 32, 74, 111, 118, 105, 97, 110, 32, 109, 105, 110, 105, 110, 103, 32, 99, 111, 108, 111, 110, 121, 0 }; +const uint8_t loctxt_15[] = { +83, 116, 114, 97, 110, 103, 101, 32, 106, 117, 110, 103, 108, 101, 0 }; +const uint8_t loctxt_16[] = { +46, 0 }; +const uint8_t loctxt_17[] = { +66, 76, 65, 67, 75, 32, 69, 77, 80, 84, 73, 78, 69, 83, 83, 0 }; +const uint8_t loctxt_18[] = { +109, 101, 116, 104, 97, 110, 101, 32, 115, 110, 111, 119, 32, 115, 116, 111, 114, 109, 0 }; +const uint8_t loctxt_19[] = { +109, 101, 116, 104, 97, 110, 101, 32, 115, 110, 111, 119, 32, 115, 116, 111, 114, 109, 0 }; +const uint8_t loctxt_20[] = { +109, 101, 116, 104, 97, 110, 101, 32, 115, 110, 111, 119, 32, 115, 116, 111, 114, 109, 0 }; +const uint8_t loctxt_21[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 114, 117, 105, 110, 115, 32, 111, 102, 32, 97, 110, 32, 105, 110, 116, 101, 114, 103, 97, 108, 97, 116, 105, 99, 32, 90, 79, 79, 0 }; +const uint8_t loctxt_22[] = { +115, 116, 111, 114, 97, 103, 101, 32, 104, 111, 108, 100, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 116, 104, 101, 114, 32, 115, 104, 105, 112, 0 }; +const uint8_t loctxt_23[] = { +109, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 99, 114, 97, 119, 108, 32, 119, 97, 121, 0 }; +const uint8_t loctxt_24[] = { +104, 111, 108, 108, 111, 119, 32, 105, 99, 101, 32, 109, 111, 117, 110, 100, 0 }; +const uint8_t loctxt_25[] = { +0 }; +const uint8_t loctxt_26[] = { +0 }; +const uint8_t loctxt_27[] = { +0 }; +const uint8_t loctxt_28[] = { +0 }; +const uint8_t loctxt_29[] = { +0 }; +const uint8_t loctxt_30[] = { +0 }; +const uint8_t loctxt_31[] = { +0 }; +const uint8_t loctxt_32[] = { +0 }; +const uint8_t loctxt_33[] = { +0 }; +const uint8_t loctxt_34[] = { +0 }; +const uint8_t loctxt_35[] = { +108, 111, 116, 32, 111, 102, 32, 84, 82, 79, 85, 66, 76, 69, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 0, 0, 7 } }, + { loctxt_2, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_3, { 0, 0, 0, 0, 8, 0 } }, + { loctxt_4, { 5, 8, 5, 8, 0, 0 } }, + { loctxt_5, { 8, 5, 8, 4, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 0, 1, 0 } }, + { loctxt_8, { 4, 5, 5, 4, 0, 0 } }, + { loctxt_9, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_10, { 19, 19, 19, 20, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 15, 15, 21, 9, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 19, 20, 10, 20, 0, 0 } }, + { loctxt_19, { 10, 18, 20, 18, 0, 0 } }, + { loctxt_20, { 20, 20, 20, 20, 0, 0 } }, + { loctxt_21, { 0, 15, 0, 0, 0, 0 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 0, 7, 0 } }, + { loctxt_24, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_35, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 0, + 0, + 7, + 13, + 1, + 7, + 0, + 17, + 0, + 7, + 0, + 1, + 0, + 6, + 8, + 0, + 2, + 2, + 0, + 0, + 2, + 11, + 0, + 3, + 6, + 0, + 6, + 0, + 18, + 21, + 0, + 11, + 22, + 14, + 23, + 23, + 0, + 0, + 0, + 0, + 14, + 0, + 24, + 0, + 0, + 0, + 13, + 0, + 15, + 13, + 6, + 0, + 7, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +46, 0 }; +const uint8_t objtxt_1[] = { +83, 116, 114, 97, 110, 103, 101, 32, 102, 108, 105, 99, 107, 101, 114, 105, 110, 103, 32, 99, 117, 114, 116, 97, 105, 110, 32, 111, 102, 32, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_2[] = { +83, 99, 111, 117, 116, 115, 104, 105, 112, 0 }; +const uint8_t objtxt_3[] = { +77, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 97, 99, 99, 101, 115, 115, 32, 104, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_4[] = { +65, 108, 105, 101, 110, 32, 115, 105, 103, 110, 0 }; +const uint8_t objtxt_5[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_6[] = { +83, 112, 97, 99, 101, 32, 115, 117, 105, 116, 0 }; +const uint8_t objtxt_7[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_8[] = { +66, 108, 97, 99, 107, 32, 72, 111, 108, 101, 0 }; +const uint8_t objtxt_9[] = { +46, 0 }; +const uint8_t objtxt_10[] = { +80, 104, 97, 115, 101, 114, 0 }; +const uint8_t objtxt_11[] = { +80, 104, 97, 115, 101, 114, 0 }; +const uint8_t objtxt_12[] = { +67, 108, 111, 115, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_13[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_14[] = { +83, 116, 114, 97, 110, 103, 101, 32, 102, 108, 105, 99, 107, 101, 114, 105, 110, 103, 32, 99, 117, 114, 116, 97, 105, 110, 32, 111, 102, 32, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_15[] = { +67, 97, 118, 101, 0 }; +const uint8_t objtxt_16[] = { +69, 109, 112, 116, 121, 32, 102, 108, 97, 115, 107, 0 }; +const uint8_t objtxt_17[] = { +82, 101, 100, 32, 98, 117, 116, 116, 111, 110, 32, 98, 121, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_18[] = { +67, 108, 111, 115, 101, 100, 32, 111, 117, 116, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_19[] = { +79, 80, 101, 110, 32, 111, 117, 116, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_20[] = { +67, 108, 111, 115, 101, 100, 32, 105, 110, 110, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_21[] = { +79, 112, 101, 110, 32, 105, 110, 110, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_22[] = { +65, 108, 105, 101, 110, 32, 109, 97, 99, 104, 105, 110, 101, 0 }; +const uint8_t objtxt_23[] = { +72, 111, 115, 101, 32, 99, 111, 110, 110, 101, 99, 116, 115, 32, 109, 121, 32, 115, 117, 105, 116, 32, 116, 111, 32, 109, 97, 99, 104, 105, 110, 101, 0 }; +const uint8_t objtxt_24[] = { +76, 97, 114, 103, 101, 32, 98, 111, 117, 108, 100, 101, 114, 0 }; +const uint8_t objtxt_25[] = { +83, 109, 97, 108, 108, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 112, 108, 97, 115, 116, 105, 99, 32, 102, 108, 117, 115, 104, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_26[] = { +46, 0 }; +const uint8_t objtxt_27[] = { +82, 111, 100, 32, 106, 117, 116, 116, 105, 110, 103, 32, 115, 116, 114, 97, 105, 103, 104, 116, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_28[] = { +66, 114, 111, 107, 101, 110, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 114, 111, 100, 0 }; +const uint8_t objtxt_29[] = { +83, 116, 114, 97, 110, 103, 101, 32, 108, 105, 103, 104, 116, 32, 102, 97, 114, 32, 116, 111, 32, 116, 104, 101, 32, 78, 79, 82, 84, 72, 0 }; +const uint8_t objtxt_30[] = { +82, 105, 103, 105, 108, 105, 97, 110, 32, 68, 105, 97, 45, 73, 99, 101, 32, 72, 111, 117, 110, 100, 0 }; +const uint8_t objtxt_31[] = { +83, 116, 117, 110, 110, 101, 100, 32, 68, 105, 97, 45, 73, 99, 101, 32, 72, 111, 117, 110, 100, 0 }; +const uint8_t objtxt_32[] = { +86, 105, 101, 119, 112, 111, 114, 116, 0 }; +const uint8_t objtxt_33[] = { +83, 105, 103, 110, 58, 32, 34, 76, 101, 97, 118, 101, 32, 84, 114, 101, 97, 115, 117, 114, 101, 115, 32, 104, 101, 114, 101, 32, 115, 97, 121, 58, 32, 83, 67, 79, 82, 69, 34, 0 }; +const uint8_t objtxt_34[] = { +42, 32, 65, 78, 67, 73, 69, 78, 84, 32, 70, 76, 65, 83, 75, 32, 83, 65, 85, 82, 73, 65, 78, 32, 66, 82, 65, 78, 68, 89, 32, 42, 0 }; +const uint8_t objtxt_35[] = { +69, 109, 112, 116, 121, 32, 99, 114, 121, 115, 116, 97, 108, 32, 104, 111, 108, 100, 101, 114, 0 }; +const uint8_t objtxt_36[] = { +66, 114, 111, 107, 101, 110, 32, 112, 105, 101, 99, 101, 115, 32, 111, 102, 32, 80, 111, 119, 101, 114, 32, 67, 114, 121, 115, 116, 97, 108, 0 }; +const uint8_t objtxt_37[] = { +66, 114, 111, 107, 101, 110, 32, 114, 111, 100, 32, 105, 110, 32, 112, 111, 119, 101, 114, 32, 104, 111, 108, 100, 101, 114, 0 }; +const uint8_t objtxt_38[] = { +76, 97, 114, 103, 101, 32, 105, 99, 101, 32, 109, 111, 117, 110, 100, 0 }; +const uint8_t objtxt_39[] = { +65, 110, 99, 105, 101, 110, 116, 32, 105, 99, 101, 32, 112, 105, 99, 107, 0 }; +const uint8_t objtxt_40[] = { +66, 114, 111, 107, 101, 110, 32, 105, 99, 101, 32, 112, 105, 99, 107, 0 }; +const uint8_t objtxt_41[] = { +83, 104, 111, 114, 116, 32, 116, 119, 105, 115, 116, 101, 100, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 109, 101, 116, 97, 108, 0 }; +const uint8_t objtxt_42[] = { +69, 110, 116, 114, 97, 110, 99, 101, 32, 116, 111, 32, 97, 32, 99, 114, 97, 119, 108, 119, 97, 121, 0 }; +const uint8_t objtxt_43[] = { +42, 32, 82, 73, 71, 73, 76, 73, 65, 78, 32, 73, 67, 69, 32, 68, 73, 65, 77, 79, 78, 68, 32, 42, 0 }; +const uint8_t objtxt_44[] = { +42, 32, 83, 84, 82, 65, 78, 71, 69, 32, 65, 76, 73, 69, 78, 32, 66, 69, 76, 84, 32, 42, 0 }; +const uint8_t objtxt_45[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_46[] = { +38, 32, 105, 116, 115, 32, 97, 99, 116, 105, 118, 97, 116, 101, 100, 0 }; +const uint8_t objtxt_47[] = { +42, 32, 82, 65, 82, 69, 32, 65, 76, 73, 69, 78, 32, 80, 65, 73, 78, 84, 73, 78, 71, 32, 42, 0 }; +const uint8_t objtxt_48[] = { +82, 111, 99, 107, 32, 100, 117, 115, 116, 0 }; +const uint8_t objtxt_49[] = { +67, 101, 110, 116, 117, 114, 105, 111, 110, 32, 83, 108, 105, 109, 101, 32, 84, 114, 101, 101, 115, 0 }; +const uint8_t objtxt_50[] = { +42, 32, 65, 76, 73, 69, 78, 32, 83, 67, 85, 76, 80, 84, 85, 82, 69, 32, 42, 0 }; +const uint8_t objtxt_51[] = { +83, 116, 114, 97, 110, 103, 101, 32, 108, 111, 111, 107, 105, 110, 103, 32, 103, 111, 103, 103, 108, 101, 115, 0 }; +const uint8_t objtxt_52[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_53[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_54[] = { +66, 114, 111, 107, 101, 110, 32, 115, 112, 108, 105, 110, 116, 101, 114, 101, 100, 32, 115, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_55[] = { +69, 86, 69, 82, 89, 84, 72, 73, 78, 71, 32, 72, 65, 83, 32, 65, 32, 66, 76, 85, 69, 73, 83, 72, 32, 84, 73, 78, 84, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 58, 32, 54, 32, 34, 83, 84, 82, 65, 78, 71, 69, 32, 79, 68, 89, 83, 83, 69, 89, 34, 32, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 46, 10, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 78, 111, 118, 97, 107, 115, 46, 10, 0 }; +const uint8_t msgtxt_2[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_3[] = { +79, 75, 0 }; +const uint8_t msgtxt_4[] = { +80, 114, 101, 115, 115, 117, 114, 101, 32, 103, 97, 117, 103, 101, 32, 115, 97, 121, 115, 0 }; +const uint8_t msgtxt_5[] = { +109, 111, 118, 101, 115, 32, 116, 105, 108, 108, 32, 115, 117, 105, 116, 32, 97, 105, 114, 32, 101, 120, 112, 101, 110, 100, 101, 100, 46, 32, 65, 105, 114, 32, 111, 117, 116, 115, 105, 100, 101, 32, 115, 117, 105, 116, 32, 105, 115, 0 }; +const uint8_t msgtxt_6[] = { +84, 104, 101, 32, 111, 117, 116, 115, 105, 100, 101, 32, 104, 97, 115, 32, 97, 32, 112, 114, 101, 115, 115, 117, 114, 101, 32, 103, 97, 117, 103, 101, 32, 38, 32, 97, 32, 99, 111, 110, 110, 101, 99, 116, 101, 114, 32, 102, 111, 114, 32, 97, 32, 104, 111, 115, 101, 46, 0 }; +const uint8_t msgtxt_7[] = { +98, 114, 101, 97, 116, 104, 97, 98, 108, 101, 46, 0 }; +const uint8_t msgtxt_8[] = { +110, 111, 116, 0 }; +const uint8_t msgtxt_9[] = { +83, 116, 97, 108, 101, 32, 97, 105, 114, 32, 105, 115, 0 }; +const uint8_t msgtxt_10[] = { +73, 116, 32, 105, 115, 0 }; +const uint8_t msgtxt_11[] = { +77, 121, 32, 97, 105, 114, 32, 114, 97, 110, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_12[] = { +83, 111, 109, 101, 32, 71, 65, 83, 32, 99, 111, 109, 101, 115, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 104, 111, 115, 101, 32, 102, 111, 114, 32, 97, 119, 104, 105, 108, 101, 32, 116, 104, 101, 110, 32, 115, 116, 111, 112, 115, 46, 0 }; +const uint8_t msgtxt_13[] = { +10, 80, 104, 97, 115, 101, 114, 32, 105, 115, 32, 115, 101, 116, 32, 111, 110, 58, 0 }; +const uint8_t msgtxt_14[] = { +68, 69, 83, 84, 82, 79, 89, 33, 0 }; +const uint8_t msgtxt_15[] = { +115, 116, 117, 110, 46, 0 }; +const uint8_t msgtxt_16[] = { +34, 84, 79, 32, 83, 84, 85, 78, 34, 32, 111, 114, 32, 34, 84, 79, 32, 68, 69, 83, 84, 82, 79, 89, 34, 32, 63, 0 }; +const uint8_t msgtxt_17[] = { +40, 117, 115, 101, 32, 50, 32, 119, 111, 114, 100, 115, 41, 0 }; +const uint8_t msgtxt_18[] = { +10, 77, 121, 32, 115, 117, 105, 116, 32, 112, 111, 112, 112, 101, 100, 32, 111, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_19[] = { +87, 97, 114, 110, 105, 110, 103, 32, 108, 105, 103, 104, 116, 32, 115, 97, 121, 115, 58, 32, 34, 80, 79, 87, 69, 82, 32, 67, 82, 89, 83, 84, 65, 76, 32, 68, 65, 77, 65, 71, 69, 68, 34, 0 }; +const uint8_t msgtxt_20[] = { +66, 108, 117, 101, 32, 98, 117, 116, 116, 111, 110, 32, 109, 97, 114, 107, 101, 100, 32, 34, 66, 76, 65, 83, 84, 32, 79, 70, 70, 34, 32, 38, 32, 97, 32, 117, 110, 109, 97, 114, 107, 101, 100, 32, 114, 101, 100, 32, 98, 117, 116, 116, 111, 110, 0 }; +const uint8_t msgtxt_21[] = { +67, 111, 110, 115, 111, 108, 101, 32, 114, 101, 112, 108, 105, 101, 115, 58, 32, 34, 73, 78, 83, 85, 70, 70, 73, 67, 73, 69, 78, 84, 32, 80, 79, 87, 69, 82, 34, 0 }; +const uint8_t msgtxt_22[] = { +65, 108, 105, 101, 110, 32, 115, 99, 114, 105, 112, 116, 32, 99, 111, 118, 101, 114, 115, 32, 105, 116, 0 }; +const uint8_t msgtxt_23[] = { +73, 32, 102, 105, 114, 101, 32, 116, 104, 101, 32, 80, 104, 97, 115, 101, 114, 44, 0 }; +const uint8_t msgtxt_24[] = { +73, 32, 100, 101, 115, 116, 114, 111, 121, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_25[] = { +65, 105, 114, 32, 105, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 115, 116, 97, 108, 101, 33, 32, 82, 101, 97, 100, 32, 103, 97, 117, 103, 101, 33, 0 }; +const uint8_t msgtxt_26[] = { +119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_27[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_28[] = { +73, 116, 115, 32, 115, 111, 109, 101, 32, 115, 111, 114, 116, 32, 111, 102, 32, 102, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 46, 0 }; +const uint8_t msgtxt_29[] = { +73, 32, 114, 117, 105, 110, 101, 100, 32, 116, 104, 101, 32, 115, 104, 105, 112, 33, 0 }; +const uint8_t msgtxt_30[] = { +69, 105, 116, 104, 101, 114, 32, 73, 32, 109, 105, 115, 115, 101, 100, 32, 111, 114, 32, 98, 101, 97, 109, 32, 119, 97, 115, 32, 97, 98, 115, 111, 114, 98, 101, 100, 32, 119, 105, 116, 104, 111, 117, 116, 32, 118, 105, 115, 105, 98, 108, 101, 32, 101, 102, 102, 101, 99, 116, 33, 0 }; +const uint8_t msgtxt_31[] = { +73, 116, 115, 32, 101, 109, 112, 116, 121, 46, 0 }; +const uint8_t msgtxt_32[] = { +67, 104, 97, 114, 103, 101, 32, 108, 101, 102, 116, 32, 114, 101, 103, 105, 115, 116, 101, 114, 115, 58, 0 }; +const uint8_t msgtxt_33[] = { +73, 116, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 98, 101, 32, 97, 115, 32, 102, 97, 114, 0 }; +const uint8_t msgtxt_34[] = { +111, 117, 116, 0 }; +const uint8_t msgtxt_35[] = { +105, 110, 0 }; +const uint8_t msgtxt_36[] = { +97, 115, 32, 105, 116, 32, 119, 105, 108, 108, 32, 103, 111, 46, 0 }; +const uint8_t msgtxt_37[] = { +79, 100, 100, 32, 105, 116, 32, 111, 110, 108, 121, 32, 114, 101, 113, 117, 105, 114, 101, 100, 32, 118, 101, 114, 121, 32, 108, 105, 116, 116, 108, 101, 32, 102, 111, 114, 99, 101, 0 }; +const uint8_t msgtxt_38[] = { +102, 111, 114, 32, 105, 116, 32, 116, 111, 32, 98, 114, 101, 97, 107, 32, 111, 102, 102, 32, 105, 110, 32, 109, 121, 32, 104, 97, 110, 100, 32, 119, 105, 116, 104, 32, 97, 10, 67, 82, 89, 83, 84, 65, 76, 76, 73, 78, 69, 32, 115, 110, 97, 112, 33, 0 }; +const uint8_t msgtxt_39[] = { +72, 79, 87, 63, 0 }; +const uint8_t msgtxt_40[] = { +84, 104, 101, 32, 112, 108, 97, 115, 116, 105, 99, 32, 71, 76, 79, 87, 69, 68, 32, 98, 114, 105, 101, 102, 108, 121, 0 }; +const uint8_t msgtxt_41[] = { +116, 105, 109, 101, 115, 46, 0 }; +const uint8_t msgtxt_42[] = { +102, 111, 114, 32, 105, 116, 32, 116, 111, 32, 115, 104, 97, 116, 116, 101, 114, 33, 0 }; +const uint8_t msgtxt_43[] = { +73, 32, 102, 101, 101, 108, 32, 115, 116, 114, 97, 110, 103, 101, 108, 121, 32, 100, 105, 115, 111, 114, 105, 101, 110, 116, 101, 100, 32, 102, 111, 114, 32, 97, 32, 109, 111, 109, 101, 110, 116, 33, 0 }; +const uint8_t msgtxt_44[] = { +116, 111, 32, 115, 108, 105, 100, 101, 0 }; +const uint8_t msgtxt_45[] = { +73, 99, 101, 32, 72, 111, 117, 110, 100, 32, 97, 116, 116, 97, 99, 107, 115, 32, 109, 101, 32, 117, 110, 101, 120, 112, 101, 99, 116, 105, 100, 108, 121, 33, 0 }; +const uint8_t msgtxt_46[] = { +73, 116, 32, 119, 111, 107, 101, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_47[] = { +73, 32, 102, 111, 117, 110, 100, 32, 110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_48[] = { +87, 101, 39, 114, 101, 32, 100, 114, 105, 102, 116, 105, 110, 103, 32, 105, 110, 32, 115, 112, 97, 99, 101, 33, 0 }; +const uint8_t msgtxt_49[] = { +73, 32, 115, 101, 101, 58, 32, 97, 32, 98, 108, 97, 99, 107, 32, 98, 117, 116, 116, 111, 110, 44, 32, 97, 32, 119, 104, 105, 116, 101, 32, 98, 117, 116, 116, 111, 110, 44, 32, 97, 32, 104, 111, 115, 101, 46, 0 }; +const uint8_t msgtxt_50[] = { +72, 111, 115, 101, 32, 114, 105, 112, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_51[] = { +84, 105, 103, 104, 116, 32, 102, 105, 116, 33, 0 }; +const uint8_t msgtxt_52[] = { +76, 105, 102, 116, 32, 111, 102, 102, 33, 33, 32, 65, 102, 116, 101, 114, 32, 97, 32, 98, 114, 105, 101, 102, 32, 102, 108, 105, 103, 104, 116, 32, 119, 101, 32, 97, 114, 114, 105, 118, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_53[] = { +84, 104, 101, 32, 73, 99, 101, 32, 72, 111, 117, 110, 100, 32, 98, 117, 114, 114, 111, 119, 115, 32, 111, 102, 102, 46, 46, 46, 0 }; +const uint8_t msgtxt_54[] = { +73, 99, 101, 32, 102, 105, 108, 108, 115, 32, 98, 97, 99, 107, 32, 105, 110, 32, 97, 114, 111, 117, 110, 100, 32, 109, 101, 32, 97, 115, 32, 73, 32, 100, 105, 103, 32, 109, 121, 32, 119, 97, 121, 32, 105, 110, 46, 32, 84, 104, 101, 10, 112, 105, 99, 107, 32, 98, 114, 111, 107, 101, 32, 98, 117, 116, 32, 73, 32, 109, 97, 100, 101, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_55[] = { +73, 99, 101, 32, 105, 115, 32, 118, 101, 114, 121, 32, 115, 109, 111, 111, 116, 104, 32, 38, 32, 104, 97, 114, 100, 33, 0 }; +const uint8_t msgtxt_56[] = { +73, 32, 115, 108, 105, 100, 101, 32, 98, 97, 99, 107, 32, 100, 111, 119, 110, 46, 0 }; +const uint8_t msgtxt_57[] = { +73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 116, 111, 32, 108, 111, 111, 107, 0 }; +const uint8_t msgtxt_58[] = { +84, 114, 121, 58, 32, 34, 83, 72, 79, 79, 84, 32, 83, 79, 77, 69, 84, 72, 73, 78, 71, 34, 0 }; +const uint8_t msgtxt_59[] = { +83, 97, 121, 32, 97, 103, 97, 105, 110, 32, 38, 32, 117, 115, 101, 32, 97, 32, 99, 111, 108, 111, 114, 0 }; +const uint8_t msgtxt_60[] = { +84, 104, 101, 114, 101, 39, 115, 32, 119, 114, 105, 116, 105, 110, 103, 32, 116, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_61[] = { +73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 0 }; +const uint8_t msgtxt_62[] = { +87, 104, 111, 111, 111, 115, 104, 33, 0 }; +const uint8_t msgtxt_63[] = { +84, 104, 101, 32, 103, 114, 97, 118, 105, 116, 121, 32, 104, 101, 114, 101, 32, 105, 115, 32, 118, 101, 114, 121, 0 }; +const uint8_t msgtxt_64[] = { +115, 116, 114, 111, 110, 103, 46, 0 }; +const uint8_t msgtxt_65[] = { +119, 101, 97, 107, 46, 0 }; +const uint8_t msgtxt_66[] = { +73, 116, 115, 32, 115, 116, 117, 99, 107, 46, 0 }; +const uint8_t msgtxt_67[] = { +73, 39, 109, 32, 83, 81, 85, 65, 83, 72, 69, 68, 33, 0 }; +const uint8_t msgtxt_68[] = { +84, 104, 101, 32, 112, 111, 119, 101, 114, 32, 99, 114, 121, 115, 116, 97, 108, 32, 119, 97, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 104, 97, 112, 101, 32, 111, 102, 32, 97, 32, 116, 104, 105, 110, 32, 114, 111, 100, 46, 0 }; +const uint8_t msgtxt_69[] = { +73, 32, 102, 101, 101, 108, 32, 76, 73, 71, 72, 84, 32, 72, 69, 65, 68, 69, 68, 33, 0 }; +const uint8_t msgtxt_70[] = { +73, 116, 32, 102, 108, 111, 97, 116, 115, 33, 0 }; +const uint8_t msgtxt_71[] = { +65, 32, 103, 101, 110, 116, 108, 101, 32, 116, 111, 117, 99, 104, 32, 119, 105, 108, 108, 32, 119, 111, 114, 107, 32, 119, 111, 110, 100, 101, 114, 115, 33, 0 }; +const uint8_t msgtxt_72[] = { +73, 116, 32, 115, 104, 111, 117, 108, 100, 32, 102, 105, 116, 46, 32, 73, 116, 32, 104, 97, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 98, 117, 99, 107, 108, 101, 46, 0 }; +const uint8_t msgtxt_73[] = { +80, 97, 105, 110, 116, 105, 110, 103, 32, 105, 115, 32, 111, 102, 32, 97, 110, 32, 65, 108, 105, 101, 110, 32, 116, 119, 105, 115, 116, 105, 110, 103, 32, 97, 32, 98, 117, 99, 107, 108, 101, 32, 111, 110, 32, 97, 32, 98, 101, 108, 116, 46, 0 }; +const uint8_t msgtxt_74[] = { +87, 105, 114, 105, 110, 103, 32, 98, 101, 104, 105, 110, 100, 32, 112, 108, 97, 115, 116, 105, 99, 32, 115, 104, 111, 114, 116, 115, 32, 38, 32, 73, 39, 109, 32, 101, 108, 101, 99, 116, 114, 111, 99, 117, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_75[] = { +73, 32, 115, 101, 101, 32, 97, 32, 112, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 97, 110, 32, 65, 76, 73, 69, 78, 32, 84, 69, 78, 84, 65, 67, 76, 69, 46, 0 }; +const uint8_t msgtxt_76[] = { +87, 111, 110, 100, 101, 114, 102, 117, 108, 46, 32, 73, 116, 32, 65, 84, 69, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_77[] = { +73, 116, 32, 105, 115, 32, 111, 102, 32, 97, 110, 32, 97, 108, 105, 101, 110, 32, 98, 101, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_78[] = { +73, 116, 115, 32, 119, 101, 97, 114, 105, 110, 103, 32, 111, 110, 108, 121, 32, 97, 32, 115, 116, 114, 97, 110, 103, 101, 32, 98, 101, 108, 116, 33, 0 }; +const uint8_t msgtxt_79[] = { +87, 97, 116, 99, 104, 32, 105, 116, 33, 32, 73, 116, 115, 32, 107, 110, 111, 119, 110, 32, 116, 111, 32, 115, 112, 105, 116, 32, 109, 111, 108, 116, 101, 110, 32, 68, 73, 65, 77, 79, 78, 68, 83, 33, 0 }; +const uint8_t msgtxt_80[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 98, 111, 120, 32, 111, 110, 32, 105, 116, 32, 119, 105, 116, 104, 32, 97, 32, 121, 101, 108, 108, 111, 119, 32, 98, 117, 116, 116, 111, 110, 46, 0 }; +const uint8_t msgtxt_81[] = { +73, 32, 106, 117, 115, 116, 32, 115, 101, 101, 32, 115, 104, 97, 100, 101, 115, 32, 111, 102, 32, 98, 108, 97, 99, 107, 44, 32, 105, 116, 32, 109, 97, 107, 101, 115, 32, 109, 121, 32, 101, 121, 101, 115, 32, 115, 119, 105, 109, 33, 0 }; +const uint8_t msgtxt_82[] = { +73, 32, 116, 104, 105, 110, 107, 32, 105, 116, 115, 32, 98, 114, 111, 107, 101, 110, 33, 0 }; +const uint8_t msgtxt_83[] = { +73, 32, 102, 111, 117, 110, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_84[] = { +79, 117, 99, 104, 33, 0 }; +const uint8_t msgtxt_85[] = { +105, 116, 115, 32, 115, 116, 117, 110, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_86[] = { +84, 104, 101, 32, 109, 101, 116, 97, 108, 32, 104, 101, 108, 112, 101, 100, 33, 0 }; +const uint8_t msgtxt_87[] = { +71, 101, 116, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 55, 32, 34, 77, 89, 83, 84, 69, 82, 89, 32, 70, 85, 78, 32, 72, 79, 85, 83, 69, 34, 32, 102, 114, 111, 109, 32, 121, 111, 117, 114, 32, 102, 97, 118, 111, 114, 105, 116, 101, 32, 68, 101, 97, 108, 101, 114, 33, 10, 72, 97, 118, 101, 32, 121, 111, 117, 32, 103, 111, 116, 116, 101, 110, 32, 121, 111, 117, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 84, 45, 83, 72, 73, 82, 84, 32, 121, 101, 116, 63, 10, 0 }; +const uint8_t msgtxt_88[] = { +84, 105, 100, 97, 108, 32, 102, 111, 114, 99, 101, 32, 114, 105, 112, 115, 32, 109, 101, 32, 97, 112, 97, 114, 116, 33, 0 }; +const uint8_t msgtxt_89[] = { +73, 39, 109, 32, 110, 111, 116, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_90[] = { +77, 121, 32, 104, 97, 110, 100, 32, 119, 101, 110, 116, 32, 84, 72, 82, 79, 85, 71, 72, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_91[] = { +68, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_92[] = { +0 }; +const uint8_t msgtxt_93[] = { +0 }; +const uint8_t msgtxt_94[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, +}; + + +const uint8_t status[] = { +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 100 JOVIAN SQUASH*/ + 171, + 4, 14, 6, 45, + 113, 114, 117, 63, +/* AUTO 100 AIR GOOD*/ + 168, + 2, 18, 0, 2, + 60, +/* AUTO 100 JOVIAN SQUASH*/ + 171, + 4, 14, 6, 46, + 113, 114, 117, 63, +/* AUTO 100 INTRO*/ + 179, + 9, 1, 0, 1, 0, 5, 0, 6, + 58, 73, 58, 58, +/* AUTO 0 SET PHASER*/ + 207, + 0, 2, 0, 28, 0, 2, + 81, 79, 81, 1, +/* AUTO 0 AIR SUIT*/ + 211, + 0, 1, 0, 110, 0, 1, 0, 6, + 81, 79, 81, 54, +/* AUTO 0 ROD COUNTER*/ + 207, + 0, 3, 0, 2, 0, 3, + 81, 79, 81, 80, +/* AUTO 0 STRT RM.GOGGLE CNTR*/ + 211, + 0, 1, 0, 5, 0, 20, 0, 5, + 54, 81, 79, 81, +/* AUTO 100 AIR SUIT*/ + 170, + 3, 7, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 196, + 15, 27, + 25, +/* AUTO 0 */ + 197, + 15, 0, + 11, 61, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 ACT BELT*/ + 176, + 1, 44, 13, 46, 6, 46, 0, 46, + 52, +/* AUTO 100 ACT BELT*/ + 176, + 2, 44, 13, 46, 5, 46, 0, 46, + 53, +/* AUTO 30 HOUND ATTACKS*/ + 133, 30, + 1, 30, + 45, 61, +/* AUTO 15 HOUND ATTACKS*/ + 133, 15, + 2, 30, + 45, 61, +/* AUTO 100 HOUND WAKES*/ + 170, + 13, 31, 0, 4, + 81, 77, 73, +/* AUTO 0 */ + 204, + 15, 0, 0, 31, 0, 30, + 72, +/* AUTO 0 */ + 196, + 3, 30, + 46, +/* AUTO 0 RESET COUNTER*/ + 196, + 0, 4, + 81, +/* AUTO 100 PHASER FIRED*/ + 174, + 8, 4, 0, 4, 0, 2, + 73, 60, 81, +/* AUTO 0 STUN*/ + 205, + 9, 3, 0, 4, 0, 2, + 83, 81, +/* AUTO 0 KILL*/ + 205, + 8, 3, 0, 7, 0, 2, + 83, 81, +/* AUTO 0 */ +/* AUTO 100 DIE NO AIR*/ + 171, + 8, 2, 6, 7, + 10, 8, 7, 63, +/* AUTO 0 .*/ +/* AUTO 100 EMPTY PHASER*/ + 165, + 0, 2, + 81, 73, +/* AUTO 0 */ + 208, + 15, 0, 14, 11, 0, 11, 0, 10, + 72, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 0 */ +/* AUTO 100 DROP ROD*/ + 183, + 2, 35, 2, 28, 0, 28, 0, 37, 0, 35, + 72, 59, 51, 76, +/* AUTO 100 ICE HOUND*/ + 164, + 2, 30, + 73, +/* AUTO 0 */ + 210, + 4, 18, 0, 38, 0, 20, 0, 30, + 62, 59, 103, +/* AUTO 0 */ + 210, + 4, 19, 0, 38, 0, 20, 0, 30, + 62, 59, 103, +/* AUTO 0 */ + 210, + 4, 20, 0, 38, 0, 20, 0, 30, + 62, 59, 103, +/* AUTO 0 */ + 210, + 4, 10, 0, 38, 0, 20, 0, 30, + 62, 59, 103, +/* AUTO 0 */ + 204, + 14, 30, 0, 30, 0, 24, + 62, +/* AUTO 100 DEAD!*/ + 164, + 4, 35, + 63, +/* AUTO 100 .*/ + 170, + 8, 9, 0, 5, + 81, 77, 73, +/* AUTO 0 BURNT OUT*/ + 205, + 15, 1, 0, 9, 0, 10, + 60, 58, +/* AUTO 0 WEARING GOOD*/ + 206, + 1, 52, 1, 51, 0, 55, + 57, 53, 76, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* AUTO 100 WEAR OFF GOGGLES*/ + 173, + 1, 52, 9, 9, 9, 15, + 56, 76, +}; +const uint8_t actions[] = { +/* LOOK GAUG */ + 4, 37, 74, + 3, 6, + 110, +/* CHAR ANY */ + 23, 46, 0, + 3, 6, 2, 9, 0, 1, 0, 75, 0, 1, + 3, 81, 79, 81, +/* SET PHAS */ + 5, 55, 22, + 3, 10, + 16, 17, +/* TO STUN */ + 9, 9, 73, + 3, 10, 0, 3, + 60, 3, +/* TO DEST */ + 9, 9, 72, + 3, 10, 0, 3, + 58, 3, +/* DIG ANY */ + 5, 71, 0, + 4, 24, + 111, 105, +/* WAKE HOUN */ + 13, 32, 8, + 3, 31, 0, 31, 0, 30, + 3, 72, +/* PUSH RED */ + 13, 25, 27, + 4, 1, 0, 12, 0, 13, + 72, 3, +/* PUSH RED */ + 23, 25, 27, + 2, 17, 0, 18, 0, 19, 0, 20, 0, 21, + 3, 72, 72, 73, +/* AUTO 0 */ + 205, + 9, 7, 2, 19, 0, 2, + 58, 112, +/* AUTO 0 */ + 204, + 9, 7, 2, 18, 0, 2, + 60, +/* PUSH BLAC */ + 9, 25, 37, + 3, 22, 5, 23, + 3, 12, +/* PUSH WHIT */ + 14, 25, 79, + 3, 22, 0, 8, 9, 8, + 3, 2, 58, +/* PUSH BLAC */ + 15, 25, 37, + 3, 22, 3, 23, 9, 8, + 3, 12, 10, 73, +/* AUTO 0 */ + 194, + 8, 7, 61, +/* PUSH BLAC CHARGE SUIT*/ + 23, 25, 37, + 3, 22, 3, 23, 0, 1, 0, 25, 8, 8, + 81, 3, 73, 82, +/* AUTO 0 */ + 199, + 16, 110, + 12, 18, 11, 61, +/* AUTO 0 */ + 197, + 0, 1, + 12, 81, +/* GET HOSE */ + 13, 10, 26, + 2, 22, 0, 23, 14, 23, + 3, 53, +/* DROP HOSE */ + 9, 18, 26, + 2, 23, 0, 23, + 3, 59, +/* GO DOOR */ + 14, 1, 31, + 2, 19, 9, 7, 0, 12, + 3, 54, 76, +/* GO DOOR */ + 10, 1, 31, + 2, 21, 0, 1, + 3, 54, 76, +/* GO DOOR */ + 10, 1, 31, + 2, 13, 0, 2, + 3, 54, 76, +/* LOOK CONS .*/ + 4, 37, 30, + 2, 5, + 20, +/* PUSH BLUE */ + 11, 25, 28, + 2, 5, 14, 37, + 3, 21, 19, 2, +/* SHOO BOUL */ + 19, 51, 71, + 1, 10, 8, 3, 2, 24, 0, 4, + 23, 73, 58, 88, +/* AUTO 0 */ + 207, + 0, 24, 0, 1, 0, 48, + 72, 24, 53, 76, +/* PUSH WHIT */ + 14, 25, 79, + 3, 22, 8, 8, 0, 8, + 3, 2, 60, +/* WEAR SUIT */ + 14, 58, 20, + 3, 6, 0, 7, 0, 6, + 74, 74, 3, +/* SUIT UP */ + 14, 57, 5, + 3, 6, 0, 7, 0, 6, + 74, 74, 3, +/* DROP SUIT */ + 14, 18, 20, + 3, 6, 0, 6, 0, 7, + 53, 59, 3, +/* LOOK CURT */ + 4, 37, 32, + 2, 1, + 28, +/* SHOO CURT */ + 15, 51, 32, + 1, 10, 0, 4, 2, 1, + 28, 23, 30, 58, +/* SHOO SHIP */ + 23, 51, 34, + 1, 10, 8, 3, 2, 2, 0, 4, 0, 2, + 23, 58, 24, 59, +/* GO CAVE */ + 10, 1, 40, + 2, 15, 0, 3, + 3, 54, 76, +/* SHOO ANY IN SHIP*/ + 19, 51, 0, + 1, 10, 8, 3, 4, 1, 0, 35, + 23, 54, 29, 63, +/* SHOO ANY IN SHIP*/ + 19, 51, 0, + 1, 10, 8, 3, 4, 7, 0, 35, + 23, 54, 29, 63, +/* SHOO ANY IN SHIP*/ + 19, 51, 0, + 1, 10, 8, 3, 4, 2, 0, 35, + 23, 54, 29, 63, +/* LOOK PHAS */ + 15, 37, 22, + 3, 10, 0, 2, 9, 15, + 73, 81, 32, 78, +/* AUTO 0 */ + 202, + 8, 3, 0, 2, + 13, 14, 81, +/* AUTO 0 */ + 202, + 9, 3, 0, 2, + 13, 15, 81, +/* LOOK PHAS EMPTY*/ + 9, 37, 22, + 3, 11, 9, 15, + 32, 31, +/* GO HOLE */ + 5, 1, 60, + 2, 8, + 138, 61, +/* PULL ROD */ + 11, 17, 39, + 2, 27, 9, 5, + 2, 33, 34, 36, +/* PUSH ROD */ + 11, 25, 39, + 2, 27, 8, 5, + 2, 33, 35, 36, +/* BEND ROD */ + 15, 62, 39, + 2, 27, 0, 27, 0, 28, + 37, 38, 59, 74, +/* GET ROD */ + 4, 10, 39, + 2, 27, + 39, +/* GET ROD */ + 9, 10, 39, + 3, 28, 0, 28, + 3, 52, +/* SHOO ROD */ + 23, 51, 39, + 1, 10, 8, 3, 2, 27, 0, 27, 0, 4, + 23, 24, 59, 58, +/* SHOO PLAS */ + 23, 51, 41, + 1, 10, 8, 3, 2, 25, 0, 25, 0, 4, + 23, 24, 59, 58, +/* SHOO PLAS */ + 17, 51, 41, + 1, 10, 9, 3, 2, 25, 0, 4, + 40, 58, +/* PUSH PLAS */ + 7, 25, 41, + 2, 25, + 37, 42, 124, 61, +/* SHOO PLAS */ + 23, 51, 41, + 1, 10, 8, 3, 3, 29, 0, 29, 0, 4, + 23, 24, 59, 58, +/* TOUC PLAS OUT*/ + 15, 33, 41, + 2, 25, 9, 5, 0, 3, + 40, 73, 81, 79, +/* AUTO 0 RESET*/ + 196, + 0, 3, + 81, +/* PUSH ROD */ + 15, 25, 39, + 2, 27, 9, 5, 0, 3, + 73, 37, 44, 81, +/* AUTO 0 */ + 202, + 0, 1, 0, 5, + 35, 82, 58, +/* AUTO 0 */ + 199, + 0, 3, + 40, 78, 41, 81, +/* PULL ROD */ + 15, 17, 39, + 2, 27, 8, 5, 0, 5, + 37, 44, 34, 60, +/* READ SIGN */ + 5, 24, 78, + 3, 4, + 3, 137, +/* TOUC PLAS IN*/ + 15, 33, 41, + 2, 25, 8, 5, 0, 3, + 73, 81, 80, 3, +/* AUTO 0 TRANSFERS*/ + 194, + 43, 88, 88, +/* AUTO 0 */ + 205, + 19, 1, 0, 3, 0, 6, + 54, 58, +/* AUTO 0 */ + 205, + 19, 2, 0, 9, 0, 6, + 54, 60, +/* AUTO 0 */ + 205, + 19, 3, 0, 10, 0, 6, + 54, 58, +/* AUTO 0 */ + 205, + 19, 4, 0, 11, 0, 6, + 54, 58, +/* AUTO 0 */ + 205, + 19, 5, 0, 17, 0, 6, + 54, 58, +/* AUTO 0 */ + 204, + 19, 6, 0, 13, 0, 6, + 54, +/* AUTO 0 */ + 204, + 19, 7, 0, 14, 0, 6, + 54, +/* AUTO 0 */ + 205, + 16, 7, 0, 17, 0, 6, + 54, 58, +/* AUTO 0 */ + 198, + 0, 3, + 80, 76, 81, +/* SHOO PHAS */ + 0, 51, 22, + 108, +/* TOUC CURT */ + 5, 33, 32, + 2, 1, + 3, 140, +/* TOUC CURT */ + 5, 33, 32, + 2, 14, + 3, 140, +/* DIG ANY */ + 22, 71, 0, + 14, 40, 3, 53, 4, 9, 14, 39, 0, 39, + 53, 3, 133, +/* GO CURT OUT NO AIR*/ + 19, 1, 32, + 4, 6, 0, 1, 8, 6, 0, 2, + 80, 53, 76, 58, +/* GO CURT IN GOOD AIR*/ + 15, 1, 32, + 2, 1, 14, 23, 0, 2, + 80, 76, 60, 3, +/* GO CURT OUT AIR*/ + 19, 1, 32, + 4, 6, 0, 1, 9, 6, 0, 2, + 80, 53, 76, 60, +/* SHOO HOUN */ + 23, 51, 8, + 1, 10, 3, 30, 8, 3, 0, 4, 0, 30, + 58, 23, 24, 59, +/* SHOO HOUN STUN IT*/ + 19, 51, 8, + 1, 10, 0, 4, 3, 30, 9, 3, + 58, 23, 73, 135, +/* AUTO 0 */ + 215, + 0, 30, 0, 31, 0, 4, 0, 17, 0, 4, + 72, 81, 79, 81, +/* GO CURT IN HOSE*/ + 10, 1, 32, + 2, 1, 13, 23, + 50, 18, 61, +/* JUMP ANY GO SHIP*/ + 10, 69, 0, + 2, 2, 0, 2, + 3, 54, 76, +/* LOOK VIEW */ + 9, 37, 10, + 2, 32, 9, 15, + 3, 48, +/* SCOR ANY */ + 0, 60, 0, + 65, +/* LOOK MACH */ + 9, 37, 24, + 3, 22, 9, 15, + 3, 49, +/* LOOK PAIN */ + 17, 37, 59, + 3, 47, 8, 9, 1, 52, 9, 15, + 3, 123, +/* PUSH BLUE */ + 17, 25, 28, + 2, 5, 13, 37, 9, 7, 0, 7, + 102, 58, +/* PUSH BLUE */ + 17, 25, 28, + 2, 5, 13, 37, 8, 7, 0, 7, + 102, 60, +/* GO DOOR */ + 19, 1, 31, + 2, 19, 8, 7, 0, 22, 0, 2, + 3, 54, 53, 76, +/* GO SHIP */ + 10, 1, 34, + 2, 2, 0, 2, + 3, 54, 76, +/* SHOO MOUN */ + 23, 51, 44, + 1, 10, 8, 3, 2, 38, 0, 38, 0, 4, + 23, 24, 59, 58, +/* DIG ANY */ + 23, 71, 0, + 2, 38, 0, 24, 1, 39, 0, 39, 0, 40, + 104, 54, 72, 76, +/* SHOO MOUN */ + 23, 51, 44, + 4, 24, 8, 3, 1, 10, 0, 18, 0, 4, + 54, 58, 24, 103, +/* GO MOUN */ + 10, 1, 44, + 2, 38, 6, 39, + 39, 105, 106, +/* DIG ANY */ + 9, 71, 0, + 2, 38, 6, 39, + 39, 105, +/* MELT MOUN */ + 4, 74, 44, + 2, 38, + 39, +/* OPEN DOOR */ + 4, 68, 31, + 4, 1, + 39, +/* JUMP ANY */ + 7, 69, 0, + 4, 12, + 3, 113, 115, 73, +/* AUTO 0 */ + 194, + 88, 88, 88, +/* AUTO 0 */ + 202, + 0, 4, 0, 2, + 54, 53, 76, +/* JUMP ANY */ + 0, 69, 0, + 3, +/* GO JUNG */ + 10, 1, 9, + 4, 9, 0, 15, + 3, 54, 76, +/* GET HATC */ + 13, 10, 48, + 2, 3, 12, 41, 14, 42, + 111, 116, +/* GET HATC */ + 23, 10, 48, + 2, 3, 3, 41, 0, 3, 0, 42, 14, 42, + 52, 53, 3, 136, +/* GO CRAW */ + 9, 1, 55, + 2, 42, 0, 23, + 54, 76, +/* DRIN FLAS */ + 14, 45, 14, + 3, 34, 0, 34, 0, 16, + 72, 3, 112, +/* GET HATC */ + 13, 10, 48, + 3, 3, 0, 3, 13, 42, + 52, 3, +/* WEAR BELT */ + 15, 58, 58, + 3, 44, 0, 45, 0, 44, + 74, 3, 73, 74, +/* AUTO 0 */ + 201, + 13, 46, 0, 46, + 74, 119, +/* DROP BELT */ + 15, 18, 58, + 3, 44, 0, 45, 0, 44, + 59, 3, 73, 53, +/* AUTO 0 */ + 201, + 13, 46, 0, 46, + 53, 120, +/* BEND BUCK */ + 18, 62, 57, + 3, 44, 14, 46, 0, 46, 0, 44, + 75, 3, 120, +/* BEND BUCK */ + 13, 62, 57, + 3, 44, 13, 46, 0, 46, + 3, 59, +/* LOOK BELT */ + 8, 37, 58, + 3, 44, 9, 15, + 122, +/* LOOK PAIN */ + 9, 37, 59, + 3, 47, 9, 15, + 3, 131, +/* FIRE MACH */ + 0, 15, 24, + 39, +/* GO BOUL */ + 5, 1, 71, + 2, 24, + 47, 106, +/* LOOK BOUL */ + 5, 37, 71, + 2, 24, + 3, 22, +/* OPEN SUIT */ + 9, 68, 20, + 1, 7, 0, 7, + 3, 59, +/* CLOS SUIT */ + 9, 65, 20, + 1, 6, 0, 7, + 3, 74, +/* GO GROU */ + 4, 1, 63, + 4, 12, + 39, +/* LOOK CRYS */ + 8, 37, 12, + 3, 36, 9, 15, + 118, +/* HELP ANY */ + 4, 8, 0, + 4, 6, + 121, +/* OPEN HATC */ + 13, 68, 48, + 2, 3, 12, 41, 14, 42, + 111, 116, +/* OPEN HATC */ + 19, 68, 48, + 2, 3, 3, 41, 0, 3, 0, 42, + 52, 53, 3, 136, +/* GO SHIP */ + 10, 1, 34, + 4, 12, 0, 2, + 3, 54, 76, +/* GET PLAS */ + 4, 10, 41, + 2, 25, + 39, +/* LOOK PLAS */ + 8, 37, 41, + 2, 25, 9, 15, + 125, +/* TOUC ANY */ + 1, 33, 0, + 3, 2, +/* CONN ANY .*/ + 13, 30, 0, + 2, 22, 14, 23, 0, 23, + 53, 3, +/* GO TREE */ + 5, 1, 67, + 2, 49, + 126, 61, +/* LOOK SCUL */ + 10, 37, 69, + 3, 50, 9, 15, + 73, 3, 127, +/* AUTO 0 */ + 196, + 14, 44, + 128, +/* GET BELT */ + 13, 10, 58, + 3, 50, 14, 44, 0, 44, + 3, 52, +/* GET BELT */ + 9, 10, 58, + 3, 44, 0, 44, + 3, 52, +/* LOOK HOUN */ + 8, 37, 8, + 3, 30, 9, 15, + 129, +/* SHOO BELT */ + 22, 51, 58, + 3, 50, 1, 10, 8, 3, 0, 50, 0, 4, + 59, 58, 73, +/* AUTO 0 */ + 198, + 0, 44, + 59, 23, 24, +/* WEAR GOGG */ + 15, 58, 75, + 3, 51, 0, 51, 0, 52, + 74, 74, 3, 73, +/* LOOK GOGG */ + 8, 37, 75, + 3, 51, 9, 15, + 130, +/* DROP GOGG */ + 15, 18, 75, + 1, 51, 0, 51, 0, 52, + 53, 59, 57, 73, +/* AUTO 0 */ + 198, + 0, 55, + 3, 59, 76, +/* PUSH YELL */ + 17, 25, 77, + 3, 51, 9, 10, 9, 9, 0, 9, + 3, 58, +/* LOOK PAIN */ + 13, 37, 59, + 3, 47, 6, 52, 9, 15, + 3, 131, +/* PUSH YELL */ + 17, 25, 77, + 3, 51, 9, 10, 8, 9, 0, 9, + 3, 60, +/* PUSH YELL BURNT OUT*/ + 10, 25, 77, + 3, 51, 8, 10, + 3, 2, 132, +/* LOOK SUIT */ + 4, 37, 20, + 3, 6, + 6, +/* READ GAUG */ + 11, 24, 74, + 3, 6, 0, 1, + 4, 81, 78, 73, +/* AUTO 0 */ + 192, + 5, +/* AUTO 0 */ + 196, + 8, 2, + 8, +/* AUTO 0 */ + 197, + 0, 1, + 7, 81, +/* DIG ANY */ + 19, 71, 0, + 2, 38, 3, 53, 0, 53, 0, 54, + 3, 37, 42, 72, +/* SAY ANY */ + 1, 41, 0, + 3, 85, +/* PUSH BUTT */ + 0, 25, 29, + 109, +/* FIRE PHAS */ + 4, 15, 22, + 3, 10, + 108, +/* SHOO ANY */ + 7, 51, 0, + 3, 11, + 3, 23, 2, 31, +/* SHOO ANY */ + 11, 51, 0, + 1, 10, 0, 4, + 58, 23, 2, 30, +/* MOVE ANY */ + 0, 54, 0, + 26, +/* LOOK ANY */ + 1, 37, 0, + 27, 76, +/* INVE ANY */ + 0, 61, 0, + 66, +/* DIG ANY DIG*/ + 4, 71, 0, + 3, 53, + 47, +/* FIND ANY */ + 1, 53, 0, + 47, 107, +/* READ ANY */ + 0, 24, 0, + 111, +/* HELP ANY */ + 1, 8, 0, + 3, 39, +/* QUIT ANY */ + 0, 7, 0, + 63, +/* SAVE GAME */ + 0, 6, 51, + 71, +/* KICK ANY */ + 1, 29, 0, + 134, 2, +/* CLOS ANY */ + 0, 65, 0, + 39, +/* GO ROD */ + 15, 1, 39, + 2, 27, 0, 27, 0, 28, + 37, 38, 59, 74, +/* LIFT GOGG */ + 14, 77, 75, + 1, 52, 0, 52, 0, 55, + 3, 59, 59, +/* REMO SUIT */ + 9, 48, 20, + 1, 7, 0, 7, + 3, 59, +/* REMO GOGG */ + 15, 48, 75, + 1, 52, 0, 52, 0, 55, + 57, 59, 59, 76, +/* REMO ANY */ + 1, 48, 0, + 111, 139, +/* BEND BUCK */ + 5, 62, 57, + 14, 44, + 111, 141, +/* EMPT FLAS */ + 13, 79, 14, + 3, 34, 0, 34, 0, 16, + 72, 3, +/* GET INVE */ + 0, 10, 7, + 66, +/* GO HATC */ + 10, 1, 48, + 2, 42, 0, 23, + 2, 54, 76, +/* FIX CRYS */ + 255, 75, 12, + 4, 0, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *RUN */ + 210, 85, 78, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *CLIM */ + 195, 76, 73, 77, + /* SAVE */ + 83, 65, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* HELP */ + 72, 69, 76, 80, + /* TO */ + 84, 79, 32, 32, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* *. */ + 174, 32, 32, 32, + /* *UNST */ + 213, 78, 83, 84, + /* FIRE */ + 70, 73, 82, 69, + /* *ACTI */ + 193, 67, 84, 73, + /* PULL */ + 80, 85, 76, 76, + /* DROP */ + 68, 82, 79, 80, + /* *PUT */ + 208, 85, 84, 32, + /* *DISC */ + 196, 73, 83, 67, + /* *LEAV */ + 204, 69, 65, 86, + /* *THRO */ + 212, 72, 82, 79, + /* . */ + 46, 32, 32, 32, + /* READ */ + 82, 69, 65, 68, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* *BANG */ + 194, 65, 78, 71, + /* *HIT */ + 200, 73, 84, 32, + /* KICK */ + 75, 73, 67, 75, + /* CONN */ + 67, 79, 78, 78, + /* *HOOK */ + 200, 79, 79, 75, + /* WAKE */ + 87, 65, 75, 69, + /* TOUC */ + 84, 79, 85, 67, + /* *RUB */ + 210, 85, 66, 32, + /* *FEEL */ + 198, 69, 69, 76, + /* *PET */ + 208, 69, 84, 32, + /* LOOK */ + 76, 79, 79, 75, + /* *DESC */ + 196, 69, 83, 67, + /* *EXAM */ + 197, 88, 65, 77, + /* *SEE */ + 211, 69, 69, 32, + /* SAY */ + 83, 65, 89, 32, + /* *YELL */ + 217, 69, 76, 76, + /* *HOLL */ + 200, 79, 76, 76, + /* *SCRE */ + 211, 67, 82, 69, + /* DRIN */ + 68, 82, 73, 78, + /* CHAR */ + 67, 72, 65, 82, + /* *RECH */ + 210, 69, 67, 72, + /* REMO */ + 82, 69, 77, 79, + /* *UNWE */ + 213, 78, 87, 69, + /* AT */ + 65, 84, 32, 32, + /* SHOO */ + 83, 72, 79, 79, + /* *BLAS */ + 194, 76, 65, 83, + /* FIND */ + 70, 73, 78, 68, + /* MOVE */ + 77, 79, 86, 69, + /* SET */ + 83, 69, 84, 32, + /* *RESE */ + 210, 69, 83, 69, + /* SUIT */ + 83, 85, 73, 84, + /* WEAR */ + 87, 69, 65, 82, + /* *FAST */ + 198, 65, 83, 84, + /* SCOR */ + 83, 67, 79, 82, + /* INVE */ + 73, 78, 86, 69, + /* BEND */ + 66, 69, 78, 68, + /* *TWIS */ + 212, 87, 73, 83, + /* *BREA */ + 194, 82, 69, 65, + /* CLOS */ + 67, 76, 79, 83, + /* *SHUT */ + 211, 72, 85, 84, + /* *SLAM */ + 211, 76, 65, 77, + /* OPEN */ + 79, 80, 69, 78, + /* JUMP */ + 74, 85, 77, 80, + /* *FALL */ + 198, 65, 76, 76, + /* DIG */ + 68, 73, 71, 32, + /* *PICK */ + 208, 73, 67, 75, + /* *CRA */ + 195, 82, 65, 32, + /* MELT */ + 77, 69, 76, 84, + /* FIX */ + 70, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* LIFT */ + 76, 73, 70, 84, + /* *RAIS */ + 210, 65, 73, 83, + /* EMPT */ + 69, 77, 80, 84, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* INVE */ + 73, 78, 86, 69, + /* HOUN */ + 72, 79, 85, 78, + /* JUNG */ + 74, 85, 78, 71, + /* VIEW */ + 86, 73, 69, 87, + /* HELL */ + 72, 69, 76, 76, + /* CRYS */ + 67, 82, 89, 83, + /* HELP */ + 72, 69, 76, 80, + /* FLAS */ + 70, 76, 65, 83, + /* *BRAN */ + 194, 82, 65, 78, + /* OUT */ + 79, 85, 84, 32, + /* IN */ + 73, 78, 32, 32, + /* ZOO */ + 90, 79, 79, 32, + /* SHOV */ + 83, 72, 79, 86, + /* SUIT */ + 83, 85, 73, 84, + /* *HELM */ + 200, 69, 76, 77, + /* PHAS */ + 80, 72, 65, 83, + /* *GUN */ + 199, 85, 78, 32, + /* MACH */ + 77, 65, 67, 72, + /* MINE */ + 77, 73, 78, 69, + /* HOSE */ + 72, 79, 83, 69, + /* RED */ + 82, 69, 68, 32, + /* BLUE */ + 66, 76, 85, 69, + /* BUTT */ + 66, 85, 84, 84, + /* CONS */ + 67, 79, 78, 83, + /* DOOR */ + 68, 79, 79, 82, + /* CURT */ + 67, 85, 82, 84, + /* *LIGH */ + 204, 73, 71, 72, + /* SHIP */ + 83, 72, 73, 80, + /* *SCOU */ + 211, 67, 79, 85, + /* *AIRL */ + 193, 73, 82, 76, + /* BLAC */ + 66, 76, 65, 67, + /* SNOW */ + 83, 78, 79, 87, + /* ROD */ + 82, 79, 68, 32, + /* CAVE */ + 67, 65, 86, 69, + /* PLAS */ + 80, 76, 65, 83, + /* *FING */ + 198, 73, 78, 71, + /* PICK */ + 80, 73, 67, 75, + /* MOUN */ + 77, 79, 85, 78, + /* *ICE */ + 201, 67, 69, 32, + /* *WALL */ + 215, 65, 76, 76, + /* HOLD */ + 72, 79, 76, 68, + /* HATC */ + 72, 65, 84, 67, + /* TOOL */ + 84, 79, 79, 76, + /* CONN */ + 67, 79, 78, 78, + /* GAME */ + 71, 65, 77, 69, + /* LEDG */ + 76, 69, 68, 71, + /* AROU */ + 65, 82, 79, 85, + /* META */ + 77, 69, 84, 65, + /* CRAW */ + 67, 82, 65, 87, + /* DIAM */ + 68, 73, 65, 77, + /* BUCK */ + 66, 85, 67, 75, + /* BELT */ + 66, 69, 76, 84, + /* PAIN */ + 80, 65, 73, 78, + /* HOLE */ + 72, 79, 76, 69, + /* SCRI */ + 83, 67, 82, 73, + /* ALIE */ + 65, 76, 73, 69, + /* GROU */ + 71, 82, 79, 85, + /* *PLAN */ + 208, 76, 65, 78, + /* NOVA */ + 78, 79, 86, 65, + /* DUST */ + 68, 85, 83, 84, + /* TREE */ + 84, 82, 69, 69, + /* *SLIM */ + 211, 76, 73, 77, + /* SCUL */ + 83, 67, 85, 76, + /* */ + 32, 32, 32, 32, + /* BOUL */ + 66, 79, 85, 76, + /* DEST */ + 68, 69, 83, 84, + /* STUN */ + 83, 84, 85, 78, + /* GAUG */ + 71, 65, 85, 71, + /* GOGG */ + 71, 79, 71, 71, + /* BOX */ + 66, 79, 88, 32, + /* YELL */ + 89, 69, 76, 76, + /* SIGN */ + 83, 73, 71, 78, + /* WHIT */ + 87, 72, 73, 84, + 0, +}; +const uint8_t automap[] = { + /* HATC */ + 72, 65, 84, 67, + 3, + /* SIGN */ + 83, 73, 71, 78, + 4, + /* SUIT */ + 83, 85, 73, 84, + 6, + /* PHAS */ + 80, 72, 65, 83, + 10, + /* PHAS */ + 80, 72, 65, 83, + 11, + /* FLAS */ + 70, 76, 65, 83, + 16, + /* ROD */ + 82, 79, 68, 32, + 28, + /* HOUN */ + 72, 79, 85, 78, + 30, + /* HOUN */ + 72, 79, 85, 78, + 31, + /* FLAS */ + 70, 76, 65, 83, + 34, + /* CRYS */ + 67, 82, 89, 83, + 36, + /* PICK */ + 80, 73, 67, 75, + 39, + /* PICK */ + 80, 73, 67, 75, + 40, + /* META */ + 77, 69, 84, 65, + 41, + /* DIAM */ + 68, 73, 65, 77, + 43, + /* BELT */ + 66, 69, 76, 84, + 44, + /* PAIN */ + 80, 65, 73, 78, + 47, + /* DUST */ + 68, 85, 83, 84, + 48, + /* SCUL */ + 83, 67, 85, 76, + 50, + /* GOGG */ + 71, 79, 71, 71, + 51, + /* SHOV */ + 83, 72, 79, 86, + 53, + /* SHOV */ + 83, 72, 79, 86, + 54, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv07.c b/Applications/games/adv07.c new file mode 100644 index 00000000..a87a841b --- /dev/null +++ b/Applications/games/adv07.c @@ -0,0 +1,3167 @@ +#define NUM_OBJ 74 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 3; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 35; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +42, 73, 39, 109, 32, 105, 110, 32, 102, 114, 111, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 70, 85, 78, 32, 72, 79, 85, 83, 69, 0 }; +const uint8_t loctxt_2[] = { +77, 97, 103, 105, 99, 97, 108, 32, 77, 105, 114, 114, 111, 114, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 108, 97, 110, 100, 105, 110, 103, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 98, 101, 115, 105, 100, 101, 32, 97, 32, 76, 65, 82, 71, 69, 32, 116, 97, 110, 107, 0 }; +const uint8_t loctxt_5[] = { +119, 105, 110, 100, 111, 119, 101, 100, 32, 116, 97, 110, 107, 0 }; +const uint8_t loctxt_6[] = { +104, 105, 100, 100, 101, 110, 32, 108, 97, 98, 111, 114, 97, 116, 111, 114, 121, 0 }; +const uint8_t loctxt_7[] = { +77, 101, 114, 114, 121, 45, 71, 111, 45, 82, 111, 117, 110, 100, 32, 111, 110, 32, 97, 32, 119, 111, 111, 100, 101, 110, 32, 104, 111, 114, 115, 101, 0 }; +const uint8_t loctxt_8[] = { +115, 109, 97, 108, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_9[] = { +115, 108, 111, 112, 105, 110, 103, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_10[] = { +114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 97, 32, 108, 111, 119, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t loctxt_11[] = { +108, 97, 114, 103, 101, 32, 114, 111, 108, 108, 105, 110, 103, 32, 98, 97, 114, 114, 101, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_12[] = { +115, 116, 111, 114, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_13[] = { +77, 97, 110, 104, 111, 108, 101, 0 }; +const uint8_t loctxt_14[] = { +115, 104, 111, 111, 116, 105, 110, 103, 32, 103, 97, 108, 108, 101, 114, 121, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 101, 100, 103, 101, 32, 111, 118, 101, 114, 32, 97, 32, 100, 101, 101, 112, 32, 112, 105, 116, 0 }; +const uint8_t loctxt_16[] = { +80, 105, 116, 0 }; +const uint8_t loctxt_17[] = { +79, 98, 115, 101, 114, 118, 97, 116, 105, 111, 110, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 77, 101, 114, 114, 121, 45, 71, 111, 45, 82, 111, 117, 110, 100, 0 }; +const uint8_t loctxt_19[] = { +87, 105, 110, 100, 121, 32, 104, 97, 108, 108, 0 }; +const uint8_t loctxt_20[] = { +114, 105, 99, 107, 101, 116, 121, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_21[] = { +108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 116, 97, 108, 108, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 116, 104, 101, 32, 114, 105, 100, 101, 0 }; +const uint8_t loctxt_23[] = { +115, 109, 97, 108, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_24[] = { +115, 109, 97, 108, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_25[] = { +108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_26[] = { +80, 97, 114, 107, 105, 110, 103, 32, 108, 111, 116, 0 }; +const uint8_t loctxt_27[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 84, 114, 97, 109, 112, 111, 108, 105, 110, 101, 0 }; +const uint8_t loctxt_28[] = { +83, 101, 119, 101, 114, 32, 115, 121, 115, 116, 101, 109, 0 }; +const uint8_t loctxt_29[] = { +119, 105, 110, 100, 121, 32, 109, 97, 122, 101, 0 }; +const uint8_t loctxt_30[] = { +119, 105, 110, 100, 121, 32, 109, 97, 122, 101, 0 }; +const uint8_t loctxt_31[] = { +119, 105, 110, 100, 121, 32, 109, 97, 122, 101, 0 }; +const uint8_t loctxt_32[] = { +119, 105, 110, 100, 121, 32, 109, 97, 122, 101, 0 }; +const uint8_t loctxt_33[] = { +99, 97, 116, 119, 97, 108, 107, 0 }; +const uint8_t loctxt_34[] = { +108, 111, 110, 103, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_35[] = { +76, 111, 116, 32, 111, 102, 32, 84, 82, 79, 85, 66, 76, 69, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 26, 0, 0, 0 } }, + { loctxt_2, { 30, 1, 0, 0, 0, 0 } }, + { loctxt_3, { 9, 0, 19, 0, 20, 0 } }, + { loctxt_4, { 0, 0, 10, 0, 9, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_6, { 25, 0, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 0, 0, 18 } }, + { loctxt_8, { 0, 14, 0, 0, 10, 0 } }, + { loctxt_9, { 0, 0, 0, 0, 3, 4 } }, + { loctxt_10, { 0, 0, 0, 4, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 33, 0, 0 } }, + { loctxt_13, { 0, 0, 28, 0, 26, 0 } }, + { loctxt_14, { 8, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 20, 11, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 2, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 21 } }, + { loctxt_19, { 0, 0, 30, 3, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 15, 3 } }, + { loctxt_21, { 0, 23, 0, 0, 0, 0 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 7 } }, + { loctxt_23, { 0, 0, 21, 0, 0, 10 } }, + { loctxt_24, { 32, 0, 0, 10, 0, 0 } }, + { loctxt_25, { 0, 6, 0, 0, 0, 34 } }, + { loctxt_26, { 0, 0, 0, 1, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_29, { 31, 30, 32, 24, 0, 0 } }, + { loctxt_30, { 32, 31, 2, 31, 0, 0 } }, + { loctxt_31, { 32, 31, 29, 29, 0, 0 } }, + { loctxt_32, { 31, 29, 31, 32, 0, 0 } }, + { loctxt_33, { 0, 0, 12, 0, 0, 22 } }, + { loctxt_34, { 0, 0, 0, 0, 25, 28 } }, + { loctxt_35, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 5, + 0, + 2, + 255, + 0, + 3, + 6, + 10, + 12, + 0, + 28, + 12, + 10, + 0, + 15, + 16, + 0, + 15, + 8, + 12, + 33, + 1, + 1, + 0, + 0, + 255, + 0, + 5, + 11, + 0, + 5, + 21, + 21, + 16, + 34, + 17, + 0, + 0, + 0, + 0, + 11, + 18, + 28, + 28, + 0, + 0, + 14, + 0, + 23, + 33, + 0, + 26, + 5, + 26, + 0, + 0, + 255, + 0, + 0, + 0, + 0, + 7, + 4, + 14, + 23, + 25, + 0, + 6, + 26, + 11, + 0, + 17, + 17, + 21, + 0, +}; + + +const uint8_t objtxt_0[] = { +67, 108, 111, 115, 101, 100, 32, 100, 114, 97, 105, 110, 46, 32, 87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_1[] = { +82, 111, 112, 101, 32, 104, 97, 110, 103, 105, 110, 103, 32, 102, 114, 111, 109, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_2[] = { +83, 116, 114, 97, 110, 103, 101, 32, 77, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_3[] = { +83, 104, 111, 101, 115, 0 }; +const uint8_t objtxt_4[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_5[] = { +83, 108, 105, 112, 112, 101, 114, 121, 32, 83, 108, 105, 100, 101, 46, 32, 83, 105, 103, 110, 32, 111, 110, 32, 115, 108, 105, 100, 101, 0 }; +const uint8_t objtxt_6[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_7[] = { +83, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t objtxt_8[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_10[] = { +79, 112, 101, 110, 32, 102, 108, 111, 111, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_11[] = { +82, 101, 100, 32, 107, 110, 111, 98, 32, 105, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_12[] = { +83, 116, 114, 97, 110, 103, 101, 32, 107, 110, 111, 98, 115, 32, 111, 110, 32, 119, 97, 108, 108, 58, 32, 89, 101, 108, 108, 111, 119, 44, 32, 71, 114, 101, 101, 110, 44, 32, 66, 108, 117, 101, 0 }; +const uint8_t objtxt_13[] = { +67, 108, 111, 115, 101, 100, 32, 102, 108, 111, 111, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_14[] = { +76, 97, 100, 100, 101, 114, 32, 103, 111, 105, 110, 103, 32, 100, 111, 119, 110, 0 }; +const uint8_t objtxt_15[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_16[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 32, 119, 105, 116, 104, 32, 115, 109, 97, 108, 108, 32, 115, 104, 101, 108, 118, 101, 115, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_17[] = { +83, 105, 103, 110, 32, 111, 110, 32, 108, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_18[] = { +83, 109, 97, 108, 108, 32, 84, 114, 97, 109, 112, 111, 108, 105, 110, 101, 0 }; +const uint8_t objtxt_19[] = { +87, 114, 101, 110, 99, 104, 0 }; +const uint8_t objtxt_20[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_21[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_22[] = { +84, 105, 99, 107, 101, 116, 32, 67, 111, 117, 110, 116, 101, 114, 0 }; +const uint8_t objtxt_23[] = { +84, 105, 99, 107, 101, 116, 0 }; +const uint8_t objtxt_24[] = { +66, 111, 116, 116, 111, 109, 32, 111, 102, 32, 104, 101, 101, 108, 0 }; +const uint8_t objtxt_25[] = { +87, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_26[] = { +68, 97, 114, 107, 32, 109, 97, 110, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_27[] = { +77, 101, 114, 109, 97, 105, 100, 0 }; +const uint8_t objtxt_28[] = { +67, 111, 109, 98, 0 }; +const uint8_t objtxt_29[] = { +81, 117, 105, 101, 116, 32, 67, 97, 108, 108, 105, 111, 112, 101, 0 }; +const uint8_t objtxt_30[] = { +82, 117, 115, 116, 121, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_31[] = { +76, 79, 85, 68, 32, 83, 116, 101, 97, 109, 32, 67, 97, 108, 108, 105, 111, 112, 101, 0 }; +const uint8_t objtxt_32[] = { +77, 101, 114, 114, 121, 45, 71, 111, 45, 82, 111, 117, 110, 100, 0 }; +const uint8_t objtxt_33[] = { +86, 97, 108, 118, 101, 32, 111, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 119, 97, 114, 109, 32, 112, 105, 112, 101, 0 }; +const uint8_t objtxt_34[] = { +72, 97, 110, 100, 108, 101, 32, 105, 115, 32, 111, 110, 32, 118, 97, 108, 118, 101, 0 }; +const uint8_t objtxt_35[] = { +86, 97, 108, 118, 101, 32, 104, 97, 110, 100, 108, 101, 32, 119, 105, 116, 104, 32, 110, 111, 32, 118, 97, 108, 118, 101, 0 }; +const uint8_t objtxt_36[] = { +83, 104, 111, 114, 116, 32, 102, 117, 115, 101, 0 }; +const uint8_t objtxt_37[] = { +70, 117, 115, 101, 32, 105, 115, 32, 115, 116, 117, 99, 107, 32, 105, 110, 32, 103, 117, 109, 0 }; +const uint8_t objtxt_38[] = { +79, 112, 101, 110, 32, 68, 114, 97, 105, 110, 0 }; +const uint8_t objtxt_39[] = { +76, 101, 116, 116, 101, 114, 0 }; +const uint8_t objtxt_40[] = { +69, 120, 105, 116, 0 }; +const uint8_t objtxt_41[] = { +87, 111, 111, 100, 101, 110, 32, 104, 111, 114, 115, 101, 0 }; +const uint8_t objtxt_42[] = { +68, 97, 114, 107, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_43[] = { +76, 97, 114, 103, 101, 32, 103, 114, 97, 116, 101, 32, 119, 101, 108, 100, 101, 100, 32, 111, 118, 101, 114, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_44[] = { +80, 105, 108, 101, 32, 111, 102, 32, 98, 111, 110, 101, 115, 0 }; +const uint8_t objtxt_45[] = { +76, 111, 111, 115, 101, 32, 103, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_46[] = { +83, 116, 114, 97, 110, 103, 101, 32, 115, 112, 101, 99, 116, 97, 99, 108, 101, 115, 0 }; +const uint8_t objtxt_47[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_48[] = { +70, 111, 114, 116, 117, 110, 101, 32, 116, 101, 108, 108, 105, 110, 103, 32, 109, 97, 99, 104, 105, 110, 101, 0 }; +const uint8_t objtxt_49[] = { +82, 111, 112, 101, 32, 104, 97, 110, 103, 105, 110, 103, 32, 100, 111, 119, 110, 0 }; +const uint8_t objtxt_50[] = { +71, 117, 109, 32, 105, 115, 32, 115, 116, 117, 99, 107, 32, 116, 111, 32, 103, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_51[] = { +82, 117, 115, 116, 121, 32, 99, 108, 111, 115, 101, 100, 32, 103, 114, 97, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_52[] = { +66, 111, 116, 116, 111, 109, 32, 111, 102, 32, 115, 108, 105, 100, 101, 0 }; +const uint8_t objtxt_53[] = { +68, 101, 97, 100, 32, 116, 114, 101, 101, 0 }; +const uint8_t objtxt_54[] = { +83, 105, 108, 118, 101, 114, 32, 68, 111, 108, 108, 97, 114, 0 }; +const uint8_t objtxt_55[] = { +66, 114, 111, 107, 101, 110, 32, 98, 114, 97, 110, 99, 104, 0 }; +const uint8_t objtxt_56[] = { +72, 97, 114, 100, 32, 100, 114, 121, 32, 99, 104, 101, 119, 105, 110, 103, 32, 103, 117, 109, 0 }; +const uint8_t objtxt_57[] = { +83, 111, 102, 116, 32, 99, 104, 101, 119, 105, 110, 103, 32, 103, 117, 109, 0 }; +const uint8_t objtxt_58[] = { +83, 116, 105, 99, 107, 32, 119, 105, 116, 104, 32, 103, 117, 109, 32, 111, 110, 32, 101, 110, 100, 0 }; +const uint8_t objtxt_59[] = { +66, 111, 116, 116, 111, 109, 32, 111, 102, 32, 115, 116, 97, 105, 114, 115, 0 }; +const uint8_t objtxt_60[] = { +66, 114, 111, 107, 101, 110, 32, 103, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_61[] = { +80, 111, 108, 101, 32, 99, 111, 109, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 104, 111, 114, 115, 101, 39, 115, 32, 98, 97, 99, 107, 0 }; +const uint8_t objtxt_62[] = { +87, 105, 110, 100, 111, 119, 32, 105, 110, 32, 116, 97, 110, 107, 0 }; +const uint8_t objtxt_63[] = { +87, 105, 110, 100, 111, 119, 46, 32, 71, 117, 110, 32, 112, 111, 105, 110, 116, 105, 110, 103, 32, 105, 110, 116, 111, 32, 38, 32, 109, 111, 117, 110, 116, 101, 100, 32, 98, 121, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_64[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_65[] = { +67, 108, 97, 121, 32, 112, 105, 103, 101, 111, 110, 115, 0 }; +const uint8_t objtxt_66[] = { +70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_67[] = { +77, 105, 115, 115, 105, 110, 103, 32, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 32, 112, 108, 97, 110, 115, 0 }; +const uint8_t objtxt_68[] = { +53, 32, 68, 111, 108, 108, 97, 114, 32, 66, 105, 108, 108, 0 }; +const uint8_t objtxt_69[] = { +77, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_70[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 32, 105, 110, 32, 103, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_71[] = { +49, 32, 119, 97, 121, 32, 109, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_72[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_73[] = { +66, 108, 117, 101, 32, 98, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_74[] = { +83, 111, 103, 103, 121, 32, 102, 117, 115, 101, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +71, 111, 111, 100, 32, 116, 104, 105, 110, 103, 32, 116, 104, 105, 115, 32, 114, 111, 112, 101, 115, 32, 110, 111, 116, 32, 116, 111, 111, 32, 108, 111, 110, 103, 0 }; +const uint8_t msgtxt_2[] = { +79, 75, 0 }; +const uint8_t msgtxt_3[] = { +73, 32, 115, 101, 101, 32, 97, 32, 98, 117, 110, 99, 104, 32, 111, 102, 32, 99, 108, 97, 121, 32, 112, 105, 103, 101, 111, 110, 115, 0 }; +const uint8_t msgtxt_4[] = { +83, 112, 108, 97, 115, 104, 44, 32, 79, 104, 32, 110, 111, 32, 73, 32, 97, 109, 32, 97, 108, 108, 32, 119, 97, 115, 104, 101, 100, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_5[] = { +84, 105, 99, 107, 101, 116, 32, 108, 97, 100, 121, 32, 114, 105, 112, 115, 32, 117, 112, 32, 98, 105, 108, 108, 32, 38, 32, 115, 97, 121, 115, 32, 34, 36, 53, 32, 103, 114, 111, 99, 101, 114, 121, 32, 98, 105, 108, 108, 10, 97, 105, 110, 39, 116, 32, 109, 111, 110, 101, 121, 32, 98, 117, 98, 33, 34, 0 }; +const uint8_t msgtxt_6[] = { +84, 111, 111, 32, 115, 116, 101, 101, 112, 0 }; +const uint8_t msgtxt_7[] = { +84, 101, 108, 108, 32, 109, 101, 32, 119, 104, 101, 114, 101, 32, 116, 111, 32, 108, 111, 111, 107, 33, 0 }; +const uint8_t msgtxt_8[] = { +73, 32, 115, 101, 101, 32, 97, 32, 104, 105, 100, 100, 101, 110, 32, 100, 111, 111, 114, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_9[] = { +73, 39, 118, 101, 32, 110, 111, 32, 109, 97, 116, 99, 104, 33, 0 }; +const uint8_t msgtxt_10[] = { +66, 111, 117, 110, 99, 101, 114, 32, 116, 104, 114, 111, 119, 115, 32, 109, 101, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_11[] = { +80, 97, 114, 107, 32, 99, 108, 111, 115, 101, 115, 32, 97, 116, 32, 109, 105, 100, 110, 105, 103, 104, 116, 46, 32, 83, 104, 111, 101, 115, 32, 114, 101, 113, 117, 105, 114, 101, 100, 32, 97, 116, 32, 97, 108, 108, 32, 116, 105, 109, 101, 115, 46, 10, 77, 97, 110, 97, 103, 101, 109, 101, 110, 116, 32, 78, 79, 84, 32, 114, 101, 115, 112, 111, 110, 115, 105, 98, 108, 101, 32, 102, 111, 114, 32, 97, 99, 99, 105, 100, 101, 110, 116, 115, 33, 33, 10, 67, 65, 85, 84, 73, 79, 78, 32, 116, 104, 105, 115, 32, 112, 97, 114, 107, 32, 105, 115, 32, 68, 65, 78, 71, 69, 82, 111, 117, 115, 33, 10, 0 }; +const uint8_t msgtxt_12[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 32, 109, 121, 115, 101, 108, 102, 32, 116, 104, 105, 110, 44, 102, 97, 116, 32, 38, 32, 116, 97, 108, 108, 0 }; +const uint8_t msgtxt_13[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 116, 114, 97, 110, 103, 101, 32, 109, 117, 115, 105, 99, 32, 112, 108, 97, 121, 105, 110, 103, 0 }; +const uint8_t msgtxt_14[] = { +83, 111, 117, 110, 100, 115, 32, 108, 105, 107, 101, 32, 97, 32, 115, 112, 97, 99, 101, 32, 111, 112, 101, 114, 97, 0 }; +const uint8_t msgtxt_15[] = { +116, 105, 108, 108, 32, 109, 105, 100, 110, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_16[] = { +84, 104, 101, 32, 112, 97, 114, 107, 32, 105, 115, 32, 99, 108, 111, 115, 105, 110, 103, 32, 105, 110, 0 }; +const uint8_t msgtxt_17[] = { +116, 117, 114, 110, 115, 0 }; +const uint8_t msgtxt_18[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 32, 55, 44, 32, 34, 77, 89, 83, 84, 69, 82, 89, 32, 70, 85, 78, 32, 72, 79, 85, 83, 69, 34, 32, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 10, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 77, 97, 114, 105, 110, 32, 67, 111, 109, 112, 117, 116, 101, 114, 32, 67, 101, 110, 116, 101, 114, 46, 0 }; +const uint8_t msgtxt_19[] = { +83, 104, 101, 32, 116, 104, 97, 110, 107, 115, 32, 109, 101, 32, 38, 32, 116, 117, 114, 110, 115, 32, 97, 32, 104, 105, 100, 100, 101, 110, 32, 107, 110, 111, 98, 0 }; +const uint8_t msgtxt_20[] = { +111, 102, 32, 111, 114, 100, 101, 114, 0 }; +const uint8_t msgtxt_21[] = { +83, 104, 101, 39, 115, 32, 112, 114, 101, 116, 116, 121, 44, 32, 98, 117, 116, 32, 104, 97, 115, 32, 114, 101, 97, 108, 108, 121, 32, 115, 110, 97, 114, 108, 101, 100, 32, 104, 97, 105, 114, 33, 0 }; +const uint8_t msgtxt_22[] = { +87, 104, 101, 101, 101, 101, 0 }; +const uint8_t msgtxt_23[] = { +83, 104, 101, 39, 115, 32, 116, 111, 111, 32, 102, 97, 115, 116, 32, 102, 111, 114, 32, 109, 101, 0 }; +const uint8_t msgtxt_24[] = { +78, 111, 116, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_25[] = { +73, 32, 97, 109, 0 }; +const uint8_t msgtxt_26[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_27[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_28[] = { +65, 32, 109, 101, 114, 109, 97, 105, 100, 32, 115, 119, 105, 109, 115, 32, 98, 121, 32, 97, 110, 100, 32, 119, 97, 118, 101, 115, 0 }; +const uint8_t msgtxt_29[] = { +46, 0 }; +const uint8_t msgtxt_30[] = { +83, 111, 109, 101, 111, 110, 101, 32, 115, 104, 111, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_31[] = { +65, 108, 108, 32, 116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 114, 97, 110, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_32[] = { +70, 111, 114, 32, 86, 97, 110, 100, 97, 108, 105, 115, 109, 0 }; +const uint8_t msgtxt_33[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 100, 114, 111, 112, 112, 101, 100, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_34[] = { +79, 110, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_35[] = { +65, 116, 32, 87, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_36[] = { +83, 105, 122, 122, 108, 101, 44, 32, 105, 116, 32, 98, 117, 114, 110, 115, 32, 119, 105, 116, 104, 32, 97, 32, 100, 117, 108, 108, 32, 103, 108, 111, 119, 46, 0 }; +const uint8_t msgtxt_37[] = { +105, 116, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_38[] = { +73, 32, 119, 97, 115, 32, 104, 111, 108, 100, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_39[] = { +84, 114, 121, 58, 32, 34, 83, 84, 73, 67, 75, 32, 71, 85, 77, 34, 0 }; +const uint8_t msgtxt_40[] = { +73, 32, 115, 104, 111, 116, 32, 97, 32, 99, 108, 97, 121, 32, 112, 105, 103, 101, 111, 110, 33, 0 }; +const uint8_t msgtxt_41[] = { +73, 116, 32, 99, 111, 108, 108, 97, 112, 115, 101, 100, 32, 105, 110, 116, 111, 32, 97, 32, 112, 105, 108, 101, 32, 111, 102, 32, 98, 111, 110, 101, 115, 0 }; +const uint8_t msgtxt_42[] = { +67, 97, 108, 108, 105, 111, 112, 101, 32, 105, 115, 32, 115, 111, 32, 76, 79, 85, 68, 32, 73, 32, 99, 97, 110, 39, 116, 32, 104, 101, 97, 114, 32, 99, 108, 101, 97, 114, 108, 121, 33, 0 }; +const uint8_t msgtxt_43[] = { +115, 116, 97, 114, 116, 115, 46, 0 }; +const uint8_t msgtxt_44[] = { +84, 105, 110, 121, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 104, 101, 109, 112, 32, 102, 97, 108, 108, 115, 32, 111, 110, 32, 109, 121, 32, 104, 101, 97, 100, 32, 97, 110, 100, 32, 118, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_45[] = { +84, 97, 115, 116, 101, 115, 32, 72, 79, 82, 82, 73, 66, 76, 69, 33, 0 }; +const uint8_t msgtxt_46[] = { +70, 105, 114, 101, 32, 108, 97, 100, 100, 101, 114, 32, 114, 101, 116, 114, 97, 99, 116, 115, 32, 97, 110, 100, 32, 108, 101, 97, 118, 101, 115, 32, 109, 101, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +105, 116, 32, 115, 97, 121, 115, 0 }; +const uint8_t msgtxt_48[] = { +84, 105, 99, 107, 101, 116, 32, 108, 97, 100, 121, 32, 97, 115, 107, 115, 32, 109, 101, 32, 119, 104, 97, 116, 32, 73, 32, 119, 97, 110, 116, 0 }; +const uint8_t msgtxt_49[] = { +83, 104, 101, 32, 104, 97, 110, 100, 115, 32, 109, 101, 32, 97, 32, 116, 105, 99, 107, 101, 116, 0 }; +const uint8_t msgtxt_50[] = { +73, 116, 115, 32, 116, 111, 111, 32, 116, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_51[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_52[] = { +79, 117, 99, 104, 0 }; +const uint8_t msgtxt_53[] = { +83, 104, 101, 32, 115, 97, 121, 115, 58, 32, 34, 84, 104, 97, 116, 39, 108, 108, 32, 98, 101, 32, 97, 32, 100, 111, 108, 108, 97, 114, 34, 0 }; +const uint8_t msgtxt_54[] = { +73, 32, 115, 101, 101, 32, 97, 32, 115, 104, 105, 110, 121, 32, 67, 79, 73, 78, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 100, 114, 97, 105, 110, 33, 0 }; +const uint8_t msgtxt_55[] = { +73, 32, 99, 97, 110, 39, 116, 32, 114, 101, 97, 99, 104, 32, 105, 116, 44, 32, 109, 121, 32, 97, 114, 109, 32, 105, 115, 32, 116, 111, 111, 32, 115, 104, 111, 114, 116, 33, 0 }; +const uint8_t msgtxt_56[] = { +71, 111, 116, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_57[] = { +84, 111, 111, 32, 104, 97, 114, 100, 0 }; +const uint8_t msgtxt_58[] = { +73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 0 }; +const uint8_t msgtxt_59[] = { +79, 110, 108, 121, 32, 116, 104, 105, 110, 103, 32, 108, 101, 102, 116, 32, 105, 115, 32, 111, 110, 101, 32, 98, 97, 114, 101, 32, 98, 114, 97, 110, 99, 104, 0 }; +const uint8_t msgtxt_60[] = { +68, 111, 101, 115, 110, 39, 116, 32, 119, 111, 114, 107, 0 }; +const uint8_t msgtxt_61[] = { +73, 32, 106, 117, 115, 116, 32, 112, 117, 115, 104, 32, 105, 116, 32, 97, 114, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_62[] = { +83, 97, 121, 32, 97, 103, 97, 105, 110, 32, 38, 32, 117, 115, 101, 32, 97, 32, 99, 111, 108, 111, 114, 0 }; +const uint8_t msgtxt_63[] = { +87, 97, 108, 108, 32, 115, 119, 105, 110, 103, 115, 32, 109, 101, 32, 97, 114, 111, 117, 110, 100, 32, 38, 32, 73, 39, 109, 32, 101, 108, 115, 101, 119, 104, 101, 114, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_64[] = { +74, 97, 109, 101, 115, 58, 10, 87, 101, 32, 109, 117, 115, 116, 32, 103, 101, 116, 32, 116, 104, 101, 32, 112, 108, 97, 110, 115, 32, 98, 97, 99, 107, 32, 98, 121, 32, 116, 111, 110, 105, 103, 104, 116, 33, 32, 87, 101, 32, 98, 101, 108, 105, 101, 118, 101, 32, 116, 104, 101, 121, 39, 114, 101, 32, 104, 105, 100, 100, 101, 110, 119, 105, 116, 104, 105, 110, 32, 104, 105, 115, 32, 70, 117, 110, 32, 72, 111, 117, 115, 101, 33, 32, 32, 83, 105, 103, 110, 101, 100, 44, 10, 77, 10, 80, 46, 83, 46, 32, 81, 32, 115, 97, 121, 115, 32, 101, 110, 106, 111, 121, 32, 116, 104, 101, 32, 103, 117, 109, 33, 0 }; +const uint8_t msgtxt_65[] = { +84, 114, 121, 32, 69, 88, 65, 77, 73, 78, 73, 78, 71, 32, 116, 104, 105, 110, 103, 115, 33, 0 }; +const uint8_t msgtxt_66[] = { +73, 32, 115, 97, 121, 58, 0 }; +const uint8_t msgtxt_67[] = { +73, 39, 109, 32, 110, 111, 116, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 0 }; +const uint8_t msgtxt_68[] = { +80, 79, 80, 0 }; +const uint8_t msgtxt_69[] = { +72, 85, 72, 63, 32, 87, 104, 121, 32, 100, 111, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 109, 101, 32, 116, 111, 32, 77, 65, 82, 82, 89, 63, 0 }; +const uint8_t msgtxt_70[] = { +84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 32, 104, 97, 110, 100, 108, 101, 32, 111, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_71[] = { +77, 121, 32, 115, 104, 111, 101, 32, 104, 101, 101, 108, 32, 105, 115, 32, 108, 111, 111, 115, 101, 0 }; +const uint8_t msgtxt_72[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 101, 108, 108, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_73[] = { +65, 85, 84, 72, 79, 82, 73, 90, 69, 68, 32, 80, 69, 82, 83, 79, 78, 78, 69, 76, 32, 79, 78, 76, 89, 33, 0 }; +const uint8_t msgtxt_74[] = { +71, 117, 97, 114, 100, 32, 104, 101, 97, 114, 115, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 32, 38, 32, 115, 104, 111, 111, 116, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_75[] = { +70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 32, 116, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_76[] = { +102, 108, 97, 116, 32, 111, 110, 32, 109, 121, 32, 102, 97, 99, 101, 33, 0 }; +const uint8_t msgtxt_77[] = { +82, 105, 100, 101, 0 }; +const uint8_t msgtxt_78[] = { +115, 116, 111, 112, 115, 46, 0 }; +const uint8_t msgtxt_79[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 114, 101, 100, 32, 98, 117, 116, 116, 111, 110, 0 }; +const uint8_t msgtxt_80[] = { +98, 105, 103, 32, 98, 111, 108, 116, 115, 32, 104, 111, 108, 100, 32, 105, 116, 32, 100, 111, 119, 110, 0 }; +const uint8_t msgtxt_81[] = { +73, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 114, 101, 109, 111, 118, 101, 32, 49, 32, 98, 111, 108, 116, 33, 0 }; +const uint8_t msgtxt_82[] = { +49, 0 }; +const uint8_t msgtxt_83[] = { +50, 0 }; +const uint8_t msgtxt_84[] = { +87, 97, 108, 108, 32, 99, 108, 111, 115, 101, 100, 32, 98, 101, 104, 105, 110, 100, 32, 109, 101, 0 }; +const uint8_t msgtxt_85[] = { +84, 111, 111, 32, 104, 105, 103, 104, 32, 102, 111, 114, 32, 109, 101, 0 }; +const uint8_t msgtxt_86[] = { +77, 111, 118, 105, 110, 103, 32, 114, 105, 100, 101, 32, 116, 104, 114, 111, 119, 115, 32, 109, 101, 32, 111, 102, 102, 32, 98, 97, 108, 97, 110, 99, 101, 0 }; +const uint8_t msgtxt_87[] = { +73, 32, 102, 101, 108, 108, 0 }; +const uint8_t msgtxt_88[] = { +71, 101, 110, 116, 108, 101, 32, 97, 105, 114, 32, 98, 108, 97, 115, 116, 32, 98, 108, 111, 119, 115, 32, 117, 112, 32, 109, 121, 32, 108, 101, 103, 46, 0 }; +const uint8_t msgtxt_89[] = { +72, 97, 114, 100, 32, 98, 108, 97, 115, 116, 32, 111, 102, 32, 97, 105, 114, 32, 114, 105, 112, 115, 32, 109, 121, 32, 98, 111, 100, 121, 32, 97, 112, 97, 114, 116, 0 }; +const uint8_t msgtxt_90[] = { +77, 97, 99, 104, 105, 110, 101, 32, 108, 105, 103, 104, 116, 115, 32, 117, 112, 32, 97, 110, 100, 32, 115, 97, 121, 115, 0 }; +const uint8_t msgtxt_91[] = { +72, 85, 82, 82, 65, 72, 33, 32, 89, 111, 117, 39, 118, 101, 32, 100, 111, 110, 101, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_92[] = { +73, 32, 115, 101, 101, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 109, 105, 114, 114, 111, 114, 32, 114, 111, 111, 109, 0 }; +const uint8_t msgtxt_93[] = { +110, 111, 116, 32, 111, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_94[] = { +116, 111, 111, 32, 104, 111, 116, 0 }; +const uint8_t msgtxt_95[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 99, 97, 116, 119, 97, 108, 107, 32, 97, 98, 111, 118, 101, 32, 116, 104, 101, 32, 114, 105, 100, 101, 0 }; +const uint8_t msgtxt_96[] = { +67, 108, 105, 99, 107, 33, 0 }; +const uint8_t msgtxt_97[] = { +0 }; +const uint8_t msgtxt_98[] = { +0 }; +const uint8_t msgtxt_99[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, + msgtxt_97, + msgtxt_98, + msgtxt_99, +}; + + +const uint8_t status[] = { +/* AUTO 100 INTRO*/ + 175, + 9, 1, 64, 88, 0, 1, + 79, 58, 18, 66, +/* AUTO 100 DECREMENT COUNTER*/ + 164, + 16, 0, + 77, +/* AUTO 100 PARK IS CLOSING*/ + 166, + 15, 40, + 16, 78, 17, +/* AUTO 40 AIR BLAST*/ + 136, 40, + 4, 3, 9, 7, + 138, +/* AUTO 100 WALL CLOSES*/ + 173, + 4, 10, 9, 5, 0, 5, + 58, 134, +/* AUTO 100 WALL RESET*/ + 168, + 7, 10, 0, 5, + 60, +/* AUTO 5 HEEL LOOSE*/ + 136, 5, + 3, 4, 14, 24, + 121, +/* AUTO 100 WALL*/ + 172, + 4, 4, 9, 5, 0, 5, + 58, +/* AUTO 100 AUTHORIZE*/ + 168, + 4, 2, 0, 4, + 60, +/* AUTO 100 LOUD CALIOPE*/ + 164, + 2, 31, + 42, +/* AUTO 40 AIR BLAST HARD*/ + 137, 40, + 4, 3, 8, 7, + 139, 61, +/* AUTO 100 CLOSE PARK*/ + 174, + 15, 0, 9, 4, 0, 1, + 10, 54, 76, +/* AUTO 100 DOLLAR BILL*/ + 173, + 2, 68, 4, 1, 0, 68, + 59, 5, +/* AUTO 100 NO SHOES THROWN OUT*/ + 175, + 6, 4, 4, 2, 0, 1, + 88, 88, 10, 54, +/* AUTO 100 NO TICKET THROW OUT*/ + 175, + 6, 23, 4, 2, 0, 1, + 88, 88, 10, 54, +/* AUTO 100 COMB*/ + 182, + 2, 28, 2, 27, 0, 59, 0, 52, 0, 28, + 72, 19, 59, +/* AUTO 100 REMOVE STAIR*/ + 176, + 13, 59, 5, 59, 0, 59, 0, 52, + 72, +/* AUTO 100 PERSON IN ROOM END GAME*/ + 164, + 4, 35, + 63, +/* AUTO 100 GIVE DOLLAR*/ + 178, + 2, 54, 0, 54, 0, 23, 4, 1, + 49, 59, 74, +/* AUTO 25 HEMP FALL*/ + 136, 25, + 4, 22, 14, 1, + 44, +/* AUTO 100 VALVE*/ + 177, + 2, 35, 2, 33, 0, 34, 0, 35, + 53, 59, +/* AUTO 100 FUSE GUM*/ + 176, + 2, 57, 13, 37, 5, 37, 0, 37, + 53, +/* AUTO 100 FUSE GUM*/ + 172, + 1, 57, 13, 37, 0, 37, + 74, +/* AUTO 100 AUTHORIZ AREA*/ + 168, + 4, 7, 0, 4, + 60, +/* AUTO 100 SHOOTING GALLERY*/ + 169, + 4, 25, 0, 14, + 54, 73, +/* AUTO 0 SHOT*/ + 203, + 5, 64, 0, 25, + 118, 30, 54, 63, +/* AUTO 0 */ + 196, + 0, 25, + 54, +/* AUTO 100 WON*/ + 165, + 1, 67, + 141, 63, +/* AUTO 100 DARK*/ + 169, + 4, 34, 9, 15, + 56, 76, +/* AUTO 100 LIGHT*/ + 169, + 4, 26, 8, 15, + 57, 76, +/* AUTO 100 LIGHT*/ + 169, + 4, 25, 8, 15, + 57, 76, +/* AUTO 5 GUM HARDENS*/ + 144, 5, + 14, 56, 0, 56, 0, 57, 14, 37, + 72, +/* AUTO 100 OUTSIDE PARK*/ + 168, + 4, 1, 0, 4, + 58, +/* AUTO 100 SOGGY FUSE*/ + 176, + 3, 0, 3, 36, 0, 36, 0, 74, + 72, +}; +const uint8_t actions[] = { +/* JUMP ANY .*/ + 18, 66, 0, + 4, 22, 2, 1, 0, 33, 8, 6, + 70, 1, 54, +/* GO ROPE */ + 9, 1, 7, + 4, 22, 2, 1, + 26, 135, +/* GO SLID */ + 19, 1, 24, + 2, 5, 13, 38, 0, 5, 0, 4, + 54, 102, 107, 58, +/* JUMP ANY */ + 10, 66, 0, + 4, 22, 9, 6, + 136, 137, 61, +/* PULL BLUE */ + 11, 35, 21, + 4, 10, 0, 23, + 146, 113, 54, 76, +/* PULL YELL */ + 11, 35, 20, + 4, 10, 0, 24, + 146, 113, 13, 54, +/* PULL GREE */ + 11, 35, 19, + 4, 10, 0, 8, + 146, 113, 54, 76, +/* LOOK UP */ + 10, 44, 5, + 4, 22, 0, 1, + 53, 76, 2, +/* LIST ANY */ + 5, 31, 0, + 2, 14, + 2, 14, +/* GO TRAM */ + 11, 1, 15, + 2, 18, 0, 27, + 2, 80, 54, 76, +/* LOOK MIRR */ + 9, 44, 10, + 2, 2, 3, 47, + 12, 8, +/* GET OFF */ + 6, 10, 67, + 4, 27, + 2, 80, 76, +/* GO COUN */ + 8, 1, 50, + 0, 0, 4, 1, + 48, +/* LIST ANY */ + 4, 31, 0, + 4, 24, + 14, +/* LOOK MIRR */ + 8, 44, 10, + 2, 2, 12, 47, + 12, +/* GET DOWN */ + 6, 10, 6, + 4, 27, + 2, 80, 76, +/* COMB HAIR */ + 8, 62, 65, + 3, 28, 5, 27, + 2, +/* LOOK WIND */ + 8, 44, 51, + 2, 62, 13, 27, + 28, +/* GO SLID */ + 19, 1, 24, + 2, 5, 14, 38, 0, 5, 0, 4, + 4, 54, 76, 58, +/* LOOK MERM */ + 13, 44, 31, + 2, 62, 13, 5, 13, 28, + 0, 21, +/* LIGH FUSE */ + 5, 40, 78, + 6, 69, + 26, 9, +/* GO LADD */ + 15, 1, 27, + 2, 14, 0, 16, 0, 4, + 54, 76, 58, 46, +/* BREA BOUN */ + 0, 48, 71, + 24, +/* DANC ANY */ + 0, 79, 0, + 2, +/* GO EXIT */ + 6, 1, 16, + 2, 40, + 26, 137, 126, +/* READ SIGN */ + 4, 47, 38, + 4, 1, + 11, +/* BLOW BUBB */ + 4, 23, 72, + 3, 57, + 118, +/* BLOW BUBB */ + 5, 23, 72, + 3, 56, + 108, 107, +/* LOOK SHOE */ + 8, 44, 9, + 3, 3, 14, 24, + 121, +/* REMO HEEL */ + 19, 25, 37, + 3, 3, 14, 24, 0, 24, 0, 39, + 2, 74, 53, 73, +/* AUTO 0 */ + 197, + 0, 36, + 122, 53, +/* SWIM ANY */ + 4, 50, 0, + 2, 0, + 25, +/* SWIM ANY */ + 4, 50, 0, + 5, 0, + 24, +/* CRAW ANY */ + 10, 76, 0, + 4, 11, 0, 15, + 2, 54, 76, +/* LOOK WIND */ + 4, 44, 51, + 2, 63, + 3, +/* LOOK MERM */ + 4, 44, 31, + 2, 27, + 21, +/* GET MERM */ + 4, 10, 31, + 2, 27, + 23, +/* LOOK TREE */ + 12, 44, 63, + 2, 53, 14, 55, 14, 58, + 109, +/* OPEN DOOR */ + 13, 80, 11, + 2, 13, 0, 13, 0, 10, + 72, 2, +/* CLOS DOOR */ + 13, 52, 11, + 2, 10, 0, 13, 0, 10, + 72, 2, +/* GO DOOR */ + 10, 1, 11, + 2, 10, 0, 13, + 54, 76, 2, +/* SHOO ANY .*/ + 5, 16, 0, + 2, 63, + 2, 40, +/* LOOK SHEL */ + 12, 44, 64, + 2, 16, 14, 9, 14, 66, + 125, +/* GET FLAS */ + 13, 10, 8, + 14, 9, 2, 16, 0, 66, + 52, 2, +/* GET FLAS */ + 9, 10, 8, + 2, 66, 0, 66, + 2, 52, +/* LIGH MATC */ + 11, 40, 54, + 3, 69, 0, 69, + 2, 59, 88, 37, +/* GET FLAS */ + 9, 10, 8, + 2, 9, 0, 9, + 2, 52, +/* HELP ANY */ + 0, 30, 0, + 115, +/* OPEN ROPE */ + 1, 80, 7, + 108, 50, +/* GO TREE */ + 4, 1, 63, + 2, 53, + 108, +/* STIC GUM */ + 4, 42, 59, + 1, 57, + 34, +/* ON FUSE */ + 18, 74, 78, + 3, 57, 0, 37, 3, 36, 0, 36, + 2, 53, 59, +/* GO POLE */ + 15, 1, 13, + 2, 61, 0, 22, 0, 4, + 2, 54, 44, 58, +/* LIGH FLAS */ + 14, 40, 8, + 3, 66, 0, 9, 0, 66, + 2, 72, 76, +/* UNLI FLAS */ + 14, 61, 8, + 3, 9, 0, 9, 0, 66, + 2, 72, 76, +/* SAY TICK */ + 6, 56, 35, + 4, 1, + 2, 85, 103, +/* USE BRAN */ + 13, 38, 57, + 9, 2, 2, 51, 3, 55, + 110, 111, +/* GUM ANY */ + 0, 15, 0, + 39, +/* FIX HEEL */ + 8, 86, 37, + 3, 3, 14, 24, + 2, +/* GO MIRR */ + 6, 1, 10, + 2, 2, + 2, 102, 27, +/* OPEN GRAT */ + 0, 80, 47, + 26, +/* READ SIGN */ + 4, 47, 38, + 2, 5, + 123, +/* LOOK GRAT */ + 11, 44, 47, + 2, 51, 9, 2, + 2, 104, 133, 130, +/* OPEN DOOR */ + 17, 80, 11, + 1, 30, 2, 8, 0, 8, 0, 16, + 55, 53, +/* GET DOLL */ + 9, 10, 60, + 14, 54, 2, 51, + 26, 105, +/* GET DOLL */ + 9, 10, 60, + 2, 54, 0, 54, + 2, 52, +/* OPEN DRAI */ + 19, 80, 42, + 0, 38, 0, 0, 0, 27, 2, 0, + 72, 31, 55, 73, +/* AUTO 0 */ + 200, + 2, 30, 0, 30, + 55, +/* TOUC PIPE */ + 6, 27, 56, + 2, 33, + 2, 102, 144, +/* CLOS DOOR */ + 14, 52, 11, + 2, 16, 0, 8, 0, 16, + 53, 55, 2, +/* JUMP ANY */ + 6, 66, 0, + 3, 18, + 26, 25, 143, +/* STIC GUM */ + 5, 42, 59, + 3, 56, + 108, 107, +/* LOOK WATC .*/ + 6, 44, 40, + 3, 25, + 78, 17, 15, +/* AUTO 0 */ +/* ON BRAN */ + 17, 74, 57, + 3, 57, 3, 55, 0, 55, 0, 58, + 2, 72, +/* USE BRAN */ + 23, 38, 57, + 3, 58, 9, 2, 2, 51, 0, 54, 0, 2, + 2, 74, 106, 58, +/* LOOK MIRR */ + 4, 44, 10, + 2, 71, + 142, +/* GET BRAN */ + 9, 10, 57, + 2, 58, 0, 58, + 2, 52, +/* CHEW GUM */ + 14, 55, 59, + 1, 56, 0, 56, 0, 57, + 2, 72, 45, +/* CHEW GUM */ + 5, 55, 59, + 1, 57, + 2, 45, +/* EAT GUM */ + 10, 54, 59, + 1, 56, 0, 56, + 2, 59, 45, +/* GET BRAN */ + 13, 10, 57, + 2, 53, 14, 55, 0, 55, + 2, 52, +/* GET BRAN */ + 9, 10, 57, + 2, 55, 0, 55, + 2, 52, +/* GET GRAT */ + 0, 10, 47, + 26, +/* EAT GUM */ + 10, 54, 59, + 1, 57, 0, 57, + 2, 59, 45, +/* BREA BRAN */ + 13, 48, 57, + 2, 53, 14, 55, 0, 55, + 2, 52, +/* GET SKEL */ + 14, 10, 12, + 2, 7, 0, 7, 0, 44, + 55, 53, 41, +/* LOOK MACH */ + 4, 44, 33, + 3, 48, + 129, +/* GO ROPE */ + 9, 1, 7, + 2, 49, 0, 22, + 2, 54, +/* ON GRAT */ + 18, 74, 47, + 3, 57, 2, 43, 0, 57, 0, 50, + 59, 53, 73, +/* AUTO 0 */ + 200, + 1, 37, 0, 37, + 53, +/* PRES ANY */ + 6, 36, 0, + 2, 48, + 140, 118, 110, +/* READ SIGN .*/ + 4, 47, 38, + 2, 17, + 123, +/* GO SLID */ + 9, 1, 24, + 2, 52, 2, 0, + 6, 4, +/* GO STAI .*/ + 15, 1, 32, + 2, 59, 0, 3, 0, 4, + 2, 54, 76, 60, +/* READ LETT */ + 4, 47, 66, + 3, 39, + 114, +/* GO FUN */ + 15, 1, 68, + 4, 1, 0, 2, 0, 4, + 2, 54, 76, 60, +/* GO MERR */ + 4, 1, 75, + 2, 31, + 119, +/* GO MERR */ + 14, 1, 75, + 2, 32, 2, 29, 0, 18, + 2, 54, 76, +/* TURN ANY */ + 9, 51, 0, + 2, 33, 5, 34, + 108, 120, +/* TURN ANY */ + 22, 51, 0, + 2, 34, 8, 3, 0, 3, 0, 29, 0, 31, + 2, 60, 72, +/* TURN ANY */ + 22, 51, 0, + 2, 34, 9, 3, 0, 3, 0, 29, 0, 31, + 2, 58, 72, +/* JUMP ANY */ + 6, 66, 0, + 4, 27, + 22, 73, 80, +/* AUTO 0 */ + 206, + 4, 16, 0, 15, 0, 4, + 54, 76, 60, +/* AUTO 0 .*/ + 204, + 7, 15, 0, 27, 7, 35, + 80, +/* PRES BLUE */ + 15, 36, 21, + 2, 73, 8, 6, 0, 6, + 60, 146, 127, 43, +/* REMO SHOE */ + 9, 25, 9, + 3, 4, 0, 4, + 2, 59, +/* WEAR SPEC */ + 14, 43, 43, + 3, 46, 0, 47, 0, 46, + 2, 74, 74, +/* REMO SPEC */ + 9, 25, 43, + 3, 47, 0, 47, + 2, 59, +/* DROP SHOE */ + 14, 18, 9, + 3, 3, 0, 3, 0, 4, + 53, 59, 2, +/* DROP SPEC */ + 14, 18, 43, + 3, 46, 0, 46, 0, 47, + 53, 59, 2, +/* LIGH FUSE */ + 7, 40, 78, + 3, 36, + 36, 73, 88, 88, +/* AUTO 0 */ + 202, + 0, 36, 0, 69, + 59, 37, 59, +/* LIGH FUSE */ + 7, 40, 78, + 3, 37, + 36, 73, 88, 118, +/* AUTO 0 */ + 197, + 1, 37, + 38, 61, +/* AUTO 0 */ + 208, + 7, 35, 2, 50, 0, 60, 0, 43, + 72, +/* AUTO 0 */ + 206, + 7, 35, 5, 13, 0, 35, + 54, 76, 124, +/* AUTO 0 */ + 211, + 0, 69, 0, 37, 0, 50, 0, 57, + 59, 59, 59, 59, +/* PRES RED */ + 14, 36, 26, + 2, 11, 8, 7, 0, 7, + 60, 2, 146, +/* PRES BLUE */ + 15, 36, 21, + 2, 73, 9, 6, 0, 6, + 58, 146, 127, 128, +/* LOOK GRAT */ + 5, 44, 47, + 2, 51, + 133, 130, +/* LOOK GRAT */ + 5, 44, 47, + 2, 45, + 132, 130, +/* MOVE GRAT */ + 13, 71, 47, + 2, 45, 0, 26, 14, 26, + 53, 2, +/* MOVE GRAT */ + 13, 71, 47, + 2, 45, 13, 26, 0, 26, + 59, 2, +/* USE WREN */ + 18, 38, 81, + 3, 19, 2, 51, 0, 51, 0, 45, + 72, 2, 131, +/* USE WREN */ + 9, 38, 81, + 3, 19, 3, 45, + 108, 107, +/* GO WIND GO*/ + 5, 1, 51, + 2, 63, + 108, 50, +/* KISS MERM */ + 9, 64, 31, + 4, 5, 2, 27, + 2, 22, +/* GO HOLE */ + 15, 1, 82, + 2, 26, 0, 13, 0, 4, + 2, 56, 54, 58, +/* GET BOLT */ + 0, 10, 80, + 26, +/* REMO BOLT */ + 0, 25, 80, + 26, +/* BREA ANY */ + 15, 48, 0, + 0, 23, 0, 1, 9, 4, + 10, 32, 59, 54, +/* PULL KNOB */ + 0, 35, 48, + 112, +/* PRES KNOB */ + 0, 36, 48, + 112, +/* PRES ANY */ + 1, 36, 0, + 2, 27, +/* TOUC ANY */ + 1, 27, 0, + 2, 27, +/* BREA ANY */ + 4, 48, 0, + 8, 4, + 26, +/* PULL RED */ + 14, 35, 26, + 2, 11, 0, 7, 9, 7, + 2, 58, 146, +/* REMO ANY */ + 0, 25, 0, + 117, +/* FIND ANY */ + 0, 83, 0, + 7, +/* INVE ANY */ + 0, 34, 0, + 66, +/* SAY ANY */ + 3, 56, 0, + 2, 116, 85, 27, +/* SAVE GAME */ + 0, 29, 45, + 71, +/* QUIT ANY */ + 0, 33, 0, + 63, +/* GET INVE */ + 0, 10, 44, + 66, +/* ON ANY */ + 0, 74, 0, + 108, +/* SCOR ANY */ + 0, 69, 0, + 27, +/* LOOK CEIL */ + 10, 44, 86, + 4, 22, 0, 1, + 2, 53, 76, +/* GET SIGN */ + 4, 10, 38, + 5, 64, + 26, +/* USE ANY */ + 1, 38, 0, + 108, 110, +/* WEAR SHOE */ + 14, 43, 9, + 3, 3, 0, 4, 0, 3, + 2, 74, 74, +/* LIST ANY */ + 0, 31, 0, + 27, +/* READ SIGN .*/ + 6, 47, 38, + 3, 64, + 47, 37, 20, +/* PULL RED */ + 4, 35, 26, + 2, 48, + 27, +/* GET SIGN */ + 9, 10, 38, + 2, 64, 0, 64, + 52, 2, +/* OPEN WALL */ + 0, 80, 52, + 26, +/* GO SLID */ + 9, 1, 24, + 2, 52, 2, 38, + 108, 6, +/* JUMP ANY */ + 0, 66, 0, + 2, +/* OPEN DOOR */ + 17, 80, 11, + 14, 70, 4, 2, 0, 70, 1, 47, + 2, 53, +/* CLOS DOOR */ + 9, 52, 11, + 2, 70, 0, 70, + 59, 2, +/* GO DOOR */ + 15, 1, 11, + 2, 70, 0, 17, 0, 4, + 2, 54, 76, 58, +/* WAVE ANY */ + 1, 26, 0, + 2, 27, +/* TURN ANY */ + 1, 51, 0, + 108, 110, +/* GO PIPE */ + 6, 1, 56, + 2, 33, + 102, 144, 108, +/* STAN ANY */ + 6, 85, 0, + 4, 11, + 26, 137, 126, +/* COMB ANY */ + 17, 62, 0, + 2, 27, 3, 28, 0, 59, 0, 52, + 72, 19, +/* GO LADD */ + 15, 1, 27, + 2, 14, 0, 16, 0, 4, + 54, 76, 46, 58, +/* KISS LADY */ + 5, 64, 85, + 4, 1, + 2, 22, +/* GO HORS */ + 10, 1, 36, + 2, 41, 0, 7, + 2, 54, 76, +/* LOOK CEIL */ + 4, 44, 86, + 4, 21, + 145, +/* LOOK UP */ + 4, 44, 5, + 4, 21, + 145, +/* LOOK ANY */ + 1, 44, 0, + 76, 51, +/* GO HOLE */ + 14, 1, 82, + 2, 42, 2, 60, 0, 34, + 54, 2, 76, +/* FIX SHOE */ + 4, 86, 9, + 3, 3, + 2, +/* AUTO 0 */ +/* AUTO 0 */ + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *. */ + 174, 32, 32, 32, + /* *RUN */ + 210, 85, 78, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *MOUN */ + 205, 79, 85, 78, + /* *CLIM */ + 195, 76, 73, 77, + /* *. */ + 174, 32, 32, 32, + /* *RIDE */ + 210, 73, 68, 69, + /* GET */ + 71, 69, 84, 32, + /* *GRAB */ + 199, 82, 65, 66, + /* *TAKE */ + 212, 65, 75, 69, + /* *CATC */ + 195, 65, 84, 67, + /* *PICK */ + 208, 73, 67, 75, + /* GUM */ + 71, 85, 77, 32, + /* SHOO */ + 83, 72, 79, 79, + /* *FIRE */ + 198, 73, 82, 69, + /* DROP */ + 68, 82, 79, 80, + /* *PUT */ + 208, 85, 84, 32, + /* *LEAV */ + 204, 69, 65, 86, + /* *GIVE */ + 199, 73, 86, 69, + /* *PAY */ + 208, 65, 89, 32, + /* BLOW */ + 66, 76, 79, 87, + /* *MAKE */ + 205, 65, 75, 69, + /* REMO */ + 82, 69, 77, 79, + /* WAVE */ + 87, 65, 86, 69, + /* TOUC */ + 84, 79, 85, 67, + /* *FEEL */ + 198, 69, 69, 76, + /* SAVE */ + 83, 65, 86, 69, + /* HELP */ + 72, 69, 76, 80, + /* LIST */ + 76, 73, 83, 84, + /* *HEAR */ + 200, 69, 65, 82, + /* QUIT */ + 81, 85, 73, 84, + /* INVE */ + 73, 78, 86, 69, + /* PULL */ + 80, 85, 76, 76, + /* PRES */ + 80, 82, 69, 83, + /* *PUSH */ + 208, 85, 83, 72, + /* USE */ + 85, 83, 69, 32, + /* *WITH */ + 215, 73, 84, 72, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* STIC */ + 83, 84, 73, 67, + /* WEAR */ + 87, 69, 65, 82, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *DESC */ + 196, 69, 83, 67, + /* READ */ + 82, 69, 65, 68, + /* BREA */ + 66, 82, 69, 65, + /* *HIT */ + 200, 73, 84, 32, + /* SWIM */ + 83, 87, 73, 77, + /* TURN */ + 84, 85, 82, 78, + /* CLOS */ + 67, 76, 79, 83, + /* *SHUT */ + 211, 72, 85, 84, + /* EAT */ + 69, 65, 84, 32, + /* CHEW */ + 67, 72, 69, 87, + /* SAY */ + 83, 65, 89, 32, + /* *YELL */ + 217, 69, 76, 76, + /* *SCRE */ + 211, 67, 82, 69, + /* *ASK */ + 193, 83, 75, 32, + /* *BUY */ + 194, 85, 89, 32, + /* UNLI */ + 85, 78, 76, 73, + /* COMB */ + 67, 79, 77, 66, + /* CUT */ + 67, 85, 84, 32, + /* KISS */ + 75, 73, 83, 83, + /* *RAPE */ + 210, 65, 80, 69, + /* JUMP */ + 74, 85, 77, 80, + /* *BOUN */ + 194, 79, 85, 78, + /* . */ + 46, 32, 32, 32, + /* SCOR */ + 83, 67, 79, 82, + /* CHAS */ + 67, 72, 65, 83, + /* MOVE */ + 77, 79, 86, 69, + /* *SLID */ + 211, 76, 73, 68, + /* *ROTA */ + 210, 79, 84, 65, + /* ON */ + 79, 78, 32, 32, + /* *TO */ + 212, 79, 32, 32, + /* CRAW */ + 67, 82, 65, 87, + /* *ROLL */ + 210, 79, 76, 76, + /* . */ + 46, 32, 32, 32, + /* DANC */ + 68, 65, 78, 67, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* *UNTI */ + 213, 78, 84, 73, + /* FIND */ + 70, 73, 78, 68, + /* *LOCA */ + 204, 79, 67, 65, + /* STAN */ + 83, 84, 65, 78, + /* FIX */ + 70, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* ROPE */ + 82, 79, 80, 69, + /* FLAS */ + 70, 76, 65, 83, + /* SHOE */ + 83, 72, 79, 69, + /* MIRR */ + 77, 73, 82, 82, + /* DOOR */ + 68, 79, 79, 82, + /* SKEL */ + 83, 75, 69, 76, + /* POLE */ + 80, 79, 76, 69, + /* TUNN */ + 84, 85, 78, 78, + /* TRAM */ + 84, 82, 65, 77, + /* EXIT */ + 69, 88, 73, 84, + /* CHAR */ + 67, 72, 65, 82, + /* BACK */ + 66, 65, 67, 75, + /* GREE */ + 71, 82, 69, 69, + /* YELL */ + 89, 69, 76, 76, + /* BLUE */ + 66, 76, 85, 69, + /* FORT */ + 70, 79, 82, 84, + /* AROU */ + 65, 82, 79, 85, + /* SLID */ + 83, 76, 73, 68, + /* PLAN */ + 80, 76, 65, 78, + /* RED */ + 82, 69, 68, 32, + /* LADD */ + 76, 65, 68, 68, + /* MUSI */ + 77, 85, 83, 73, + /* TANK */ + 84, 65, 78, 75, + /* KEY */ + 75, 69, 89, 32, + /* MERM */ + 77, 69, 82, 77, + /* STAI */ + 83, 84, 65, 73, + /* MACH */ + 77, 65, 67, 72, + /* ROOM */ + 82, 79, 79, 77, + /* TICK */ + 84, 73, 67, 75, + /* HORS */ + 72, 79, 82, 83, + /* HEEL */ + 72, 69, 69, 76, + /* SIGN */ + 83, 73, 71, 78, + /* COMB */ + 67, 79, 77, 66, + /* WATC */ + 87, 65, 84, 67, + /* BILL */ + 66, 73, 76, 76, + /* DRAI */ + 68, 82, 65, 73, + /* SPEC */ + 83, 80, 69, 67, + /* INVE */ + 73, 78, 86, 69, + /* GAME */ + 71, 65, 77, 69, + /* HEMP */ + 72, 69, 77, 80, + /* GRAT */ + 71, 82, 65, 84, + /* KNOB */ + 75, 78, 79, 66, + /* *BUTT */ + 194, 85, 84, 84, + /* COUN */ + 67, 79, 85, 78, + /* WIND */ + 87, 73, 78, 68, + /* WALL */ + 87, 65, 76, 76, + /* BONE */ + 66, 79, 78, 69, + /* MATC */ + 77, 65, 84, 67, + /* HELP */ + 72, 69, 76, 80, + /* PIPE */ + 80, 73, 80, 69, + /* BRAN */ + 66, 82, 65, 78, + /* *STIC */ + 211, 84, 73, 67, + /* GUM */ + 71, 85, 77, 32, + /* DOLL */ + 68, 79, 76, 76, + /* *COIN */ + 195, 79, 73, 78, + /* GUN */ + 71, 85, 78, 32, + /* TREE */ + 84, 82, 69, 69, + /* SHEL */ + 83, 72, 69, 76, + /* HAIR */ + 72, 65, 73, 82, + /* LETT */ + 76, 69, 84, 84, + /* OFF */ + 79, 70, 70, 32, + /* FUN */ + 70, 85, 78, 32, + /* *HOUS */ + 200, 79, 85, 83, + /* *PARK */ + 208, 65, 82, 75, + /* BOUN */ + 66, 79, 85, 78, + /* BUBB */ + 66, 85, 66, 66, + /* CALL */ + 67, 65, 76, 76, + /* STEA */ + 83, 84, 69, 65, + /* MERR */ + 77, 69, 82, 82, + /* VALV */ + 86, 65, 76, 86, + /* HAND */ + 72, 65, 78, 68, + /* FUSE */ + 70, 85, 83, 69, + /* BARR */ + 66, 65, 82, 82, + /* BOLT */ + 66, 79, 76, 84, + /* WREN */ + 87, 82, 69, 78, + /* HOLE */ + 72, 79, 76, 69, + /* *MAN */ + 205, 65, 78, 32, + /* *MANH */ + 205, 65, 78, 72, + /* LADY */ + 76, 65, 68, 89, + /* CEIL */ + 67, 69, 73, 76, + /* *CATW */ + 195, 65, 84, 87, + /* LOCK */ + 76, 79, 67, 75, + /* PIGE */ + 80, 73, 71, 69, + 0, +}; +const uint8_t automap[] = { + /* SHOE */ + 83, 72, 79, 69, + 3, + /* FLAS */ + 70, 76, 65, 83, + 9, + /* TRAM */ + 84, 82, 65, 77, + 18, + /* WREN */ + 87, 82, 69, 78, + 19, + /* TICK */ + 84, 73, 67, 75, + 23, + /* HEEL */ + 72, 69, 69, 76, + 24, + /* WATC */ + 87, 65, 84, 67, + 25, + /* COMB */ + 67, 79, 77, 66, + 28, + /* KEY */ + 75, 69, 89, 32, + 30, + /* HAND */ + 72, 65, 78, 68, + 35, + /* FUSE */ + 70, 85, 83, 69, + 36, + /* LETT */ + 76, 69, 84, 84, + 39, + /* BONE */ + 66, 79, 78, 69, + 44, + /* SPEC */ + 83, 80, 69, 67, + 46, + /* DOLL */ + 68, 79, 76, 76, + 54, + /* BRAN */ + 66, 82, 65, 78, + 55, + /* GUM */ + 71, 85, 77, 32, + 56, + /* GUM */ + 71, 85, 77, 32, + 57, + /* BRAN */ + 66, 82, 65, 78, + 58, + /* SIGN */ + 83, 73, 71, 78, + 64, + /* FLAS */ + 70, 76, 65, 83, + 66, + /* PLAN */ + 80, 76, 65, 78, + 67, + /* BILL */ + 66, 73, 76, 76, + 68, + /* MATC */ + 77, 65, 84, 67, + 69, + /* FUSE */ + 70, 85, 83, 69, + 74, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv08.c b/Applications/games/adv08.c new file mode 100644 index 00000000..cb57f9bd --- /dev/null +++ b/Applications/games/adv08.c @@ -0,0 +1,3331 @@ +#define NUM_OBJ 100 +#define WORDSIZE 3 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 2; +const uint8_t maxcar = 8; +const uint8_t treasure = 15; +const uint8_t treasures = 13; +const uint8_t lastloc = 27; +const uint8_t startloc = 3; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +100, 101, 115, 101, 114, 116, 0 }; +const uint8_t loctxt_2[] = { +100, 101, 115, 101, 114, 116, 0 }; +const uint8_t loctxt_3[] = { +100, 101, 115, 101, 114, 116, 0 }; +const uint8_t loctxt_4[] = { +100, 101, 115, 101, 114, 116, 32, 110, 101, 120, 116, 32, 116, 111, 32, 97, 32, 112, 121, 114, 97, 109, 105, 100, 0 }; +const uint8_t loctxt_5[] = { +104, 111, 108, 101, 0 }; +const uint8_t loctxt_6[] = { +114, 111, 99, 107, 121, 32, 101, 110, 116, 114, 97, 110, 99, 101, 45, 119, 97, 121, 0 }; +const uint8_t loctxt_7[] = { +115, 97, 114, 99, 111, 112, 104, 97, 103, 117, 115, 0 }; +const uint8_t loctxt_8[] = { +98, 117, 114, 105, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_9[] = { +108, 111, 110, 103, 44, 32, 110, 97, 114, 114, 111, 119, 32, 112, 97, 115, 115, 97, 103, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_10[] = { +104, 105, 100, 100, 101, 110, 32, 97, 108, 99, 111, 118, 101, 0 }; +const uint8_t loctxt_11[] = { +116, 97, 108, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_12[] = { +100, 105, 110, 105, 110, 103, 32, 104, 97, 108, 108, 0 }; +const uint8_t loctxt_13[] = { +104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_14[] = { +114, 111, 117, 110, 100, 32, 97, 108, 116, 97, 114, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_15[] = { +104, 105, 101, 114, 111, 103, 108, 121, 112, 104, 105, 99, 115, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_16[] = { +115, 105, 116, 116, 105, 110, 103, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_17[] = { +115, 108, 111, 112, 105, 110, 103, 32, 99, 114, 97, 119, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_18[] = { +82, 101, 118, 111, 108, 118, 105, 110, 103, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_19[] = { +112, 114, 105, 115, 111, 110, 32, 99, 101, 108, 108, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 108, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_21[] = { +116, 104, 114, 111, 110, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_22[] = { +116, 114, 101, 97, 115, 117, 114, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_23[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 112, 121, 114, 97, 109, 105, 100, 0 }; +const uint8_t loctxt_24[] = { +80, 111, 111, 108, 32, 111, 102, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t loctxt_25[] = { +46, 0 }; +const uint8_t loctxt_26[] = { +100, 114, 101, 115, 115, 105, 110, 103, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_27[] = { +108, 111, 116, 32, 111, 102, 32, 84, 82, 79, 85, 66, 76, 69, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 4, 0, 2, 0, 0 } }, + { loctxt_2, { 0, 3, 1, 0, 0, 0 } }, + { loctxt_3, { 2, 0, 4, 0, 0, 0 } }, + { loctxt_4, { 1, 0, 0, 3, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 4, 0 } }, + { loctxt_6, { 12, 16, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 6, 0, 8 } }, + { loctxt_8, { 9, 11, 0, 0, 7, 0 } }, + { loctxt_9, { 0, 8, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 8, 0, 0 } }, + { loctxt_11, { 8, 0, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 6, 13, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 12, 0, 0 } }, + { loctxt_14, { 13, 17, 15, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 14, 0, 0 } }, + { loctxt_16, { 6, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 14, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 19, 20, 0, 0, 0, 11 } }, + { loctxt_19, { 0, 20, 0, 18, 0, 0 } }, + { loctxt_20, { 0, 19, 0, 18, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 0, 0, 20 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 21 } }, + { loctxt_23, { 0, 0, 0, 22, 0, 0 } }, + { loctxt_24, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_25, { 9, 9, 26, 9, 9, 9 } }, + { loctxt_26, { 0, 0, 0, 25, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 4, + 0, + 15, + 255, + 0, + 0, + 5, + 255, + 0, + 3, + 0, + 0, + 0, + 3, + 4, + 0, + 0, + 24, + 0, + 6, + 6, + 0, + 7, + 0, + 6, + 0, + 0, + 6, + 8, + 8, + 8, + 0, + 0, + 26, + 0, + 0, + 0, + 9, + 0, + 0, + 16, + 16, + 0, + 0, + 9, + 0, + 10, + 10, + 10, + 0, + 0, + 13, + 11, + 11, + 11, + 16, + 0, + 0, + 0, + 12, + 0, + 0, + 13, + 0, + 13, + 14, + 23, + 0, + 0, + 0, + 17, + 0, + 0, + 0, + 0, + 19, + 19, + 19, + 0, + 0, + 0, + 0, + 20, + 20, + 0, + 21, + 21, + 21, + 21, + 0, + 20, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22, + 22, +}; + + +const uint8_t objtxt_0[] = { +0 }; +const uint8_t objtxt_1[] = { +83, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_2[] = { +68, 111, 111, 114, 32, 119, 105, 116, 104, 32, 108, 97, 114, 103, 101, 32, 107, 101, 121, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_3[] = { +68, 114, 105, 101, 100, 32, 67, 97, 109, 101, 108, 32, 74, 101, 114, 107, 121, 0 }; +const uint8_t objtxt_4[] = { +69, 109, 112, 116, 121, 32, 99, 97, 110, 116, 101, 101, 110, 0 }; +const uint8_t objtxt_5[] = { +70, 117, 108, 108, 32, 99, 97, 110, 116, 101, 101, 110, 0 }; +const uint8_t objtxt_6[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_7[] = { +84, 105, 110, 121, 32, 108, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_8[] = { +85, 110, 108, 105, 116, 32, 102, 108, 97, 115, 104, 108, 105, 116, 101, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 102, 108, 97, 115, 104, 108, 105, 116, 101, 0 }; +const uint8_t objtxt_10[] = { +87, 111, 111, 100, 101, 110, 32, 112, 111, 108, 101, 32, 115, 116, 105, 99, 107, 105, 110, 103, 32, 102, 114, 111, 109, 32, 115, 97, 110, 100, 0 }; +const uint8_t objtxt_11[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_12[] = { +84, 105, 110, 121, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_13[] = { +76, 117, 109, 112, 32, 111, 102, 32, 99, 111, 97, 108, 0 }; +const uint8_t objtxt_14[] = { +80, 111, 111, 108, 32, 111, 102, 32, 108, 105, 113, 117, 105, 100, 0 }; +const uint8_t objtxt_15[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_16[] = { +68, 111, 111, 114, 32, 119, 105, 116, 104, 32, 108, 97, 114, 103, 101, 32, 107, 101, 121, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_17[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_18[] = { +76, 97, 114, 103, 101, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_19[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 97, 110, 32, 105, 114, 111, 110, 32, 103, 108, 111, 118, 101, 0 }; +const uint8_t objtxt_20[] = { +67, 108, 111, 115, 101, 100, 32, 115, 97, 114, 99, 111, 112, 104, 97, 103, 117, 115, 0 }; +const uint8_t objtxt_21[] = { +77, 111, 117, 108, 100, 121, 32, 98, 97, 110, 100, 97, 103, 101, 115, 0 }; +const uint8_t objtxt_22[] = { +79, 112, 101, 110, 32, 115, 97, 114, 99, 111, 112, 104, 97, 103, 117, 115, 0 }; +const uint8_t objtxt_23[] = { +83, 116, 97, 105, 114, 115, 0 }; +const uint8_t objtxt_24[] = { +66, 111, 110, 101, 115, 0 }; +const uint8_t objtxt_25[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_26[] = { +84, 105, 110, 121, 32, 111, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_27[] = { +83, 109, 97, 108, 108, 32, 78, 111, 109, 97, 100, 0 }; +const uint8_t objtxt_28[] = { +80, 105, 115, 116, 111, 108, 0 }; +const uint8_t objtxt_29[] = { +70, 101, 97, 114, 115, 111, 109, 101, 32, 109, 117, 109, 109, 121, 0 }; +const uint8_t objtxt_30[] = { +42, 32, 65, 78, 84, 73, 81, 85, 69, 32, 84, 65, 80, 69, 83, 84, 82, 89, 32, 42, 0 }; +const uint8_t objtxt_31[] = { +66, 117, 114, 110, 105, 110, 103, 32, 116, 97, 110, 110, 97, 32, 108, 101, 97, 118, 101, 115, 0 }; +const uint8_t objtxt_32[] = { +69, 110, 114, 97, 103, 101, 100, 32, 109, 117, 109, 109, 121, 0 }; +const uint8_t objtxt_33[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 109, 117, 109, 109, 121, 0 }; +const uint8_t objtxt_34[] = { +42, 32, 71, 79, 76, 68, 32, 83, 67, 65, 82, 65, 66, 32, 42, 0 }; +const uint8_t objtxt_35[] = { +46, 0 }; +const uint8_t objtxt_36[] = { +87, 101, 116, 32, 116, 97, 110, 110, 97, 32, 108, 101, 97, 118, 101, 115, 0 }; +const uint8_t objtxt_37[] = { +69, 110, 116, 114, 97, 110, 99, 101, 32, 116, 111, 32, 97, 110, 32, 97, 108, 99, 111, 118, 101, 0 }; +const uint8_t objtxt_38[] = { +66, 114, 105, 99, 107, 101, 100, 32, 117, 112, 32, 100, 111, 111, 114, 119, 97, 121, 0 }; +const uint8_t objtxt_39[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_40[] = { +42, 32, 71, 79, 76, 68, 32, 67, 79, 73, 78, 32, 42, 0 }; +const uint8_t objtxt_41[] = { +65, 115, 104, 101, 115, 0 }; +const uint8_t objtxt_42[] = { +66, 97, 115, 107, 101, 116, 0 }; +const uint8_t objtxt_43[] = { +80, 97, 115, 115, 97, 103, 101, 119, 97, 121, 32, 98, 101, 104, 105, 110, 100, 32, 102, 105, 114, 101, 112, 108, 97, 99, 101, 0 }; +const uint8_t objtxt_44[] = { +79, 112, 101, 110, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 99, 111, 102, 102, 101, 114, 0 }; +const uint8_t objtxt_45[] = { +82, 111, 112, 101, 0 }; +const uint8_t objtxt_46[] = { +32, 0 }; +const uint8_t objtxt_47[] = { +67, 104, 111, 112, 112, 105, 110, 103, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_48[] = { +83, 107, 117, 108, 108, 0 }; +const uint8_t objtxt_49[] = { +66, 111, 120, 0 }; +const uint8_t objtxt_50[] = { +42, 32, 71, 79, 76, 68, 32, 84, 69, 69, 84, 72, 32, 42, 0 }; +const uint8_t objtxt_51[] = { +73, 114, 111, 110, 32, 103, 108, 111, 118, 101, 0 }; +const uint8_t objtxt_52[] = { +65, 114, 99, 104, 119, 97, 121, 0 }; +const uint8_t objtxt_53[] = { +77, 101, 116, 97, 108, 32, 98, 97, 114, 32, 112, 114, 111, 116, 114, 117, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_54[] = { +68, 101, 99, 97, 112, 105, 116, 97, 116, 101, 100, 32, 115, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t objtxt_55[] = { +83, 97, 119, 0 }; +const uint8_t objtxt_56[] = { +70, 105, 114, 101, 112, 108, 97, 99, 101, 0 }; +const uint8_t objtxt_57[] = { +32, 0 }; +const uint8_t objtxt_58[] = { +76, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_59[] = { +71, 108, 111, 119, 105, 110, 103, 32, 115, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t objtxt_60[] = { +84, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_61[] = { +32, 32, 0 }; +const uint8_t objtxt_62[] = { +32, 0 }; +const uint8_t objtxt_63[] = { +71, 105, 97, 110, 116, 32, 79, 121, 115, 116, 101, 114, 0 }; +const uint8_t objtxt_64[] = { +42, 32, 66, 76, 65, 67, 75, 32, 80, 69, 65, 82, 76, 32, 42, 0 }; +const uint8_t objtxt_65[] = { +70, 108, 117, 116, 101, 0 }; +const uint8_t objtxt_66[] = { +66, 108, 111, 111, 100, 45, 115, 116, 97, 105, 110, 101, 100, 32, 97, 108, 116, 97, 114, 0 }; +const uint8_t objtxt_67[] = { +42, 32, 80, 76, 65, 84, 73, 78, 85, 77, 32, 66, 65, 82, 32, 42, 0 }; +const uint8_t objtxt_68[] = { +42, 32, 68, 73, 65, 77, 79, 78, 68, 32, 78, 69, 67, 75, 76, 65, 67, 69, 32, 42, 0 }; +const uint8_t objtxt_69[] = { +83, 97, 116, 105, 115, 102, 105, 101, 100, 32, 114, 97, 116, 115, 0 }; +const uint8_t objtxt_70[] = { +32, 0 }; +const uint8_t objtxt_71[] = { +83, 116, 97, 114, 118, 105, 110, 103, 32, 114, 97, 116, 115, 0 }; +const uint8_t objtxt_72[] = { +32, 0 }; +const uint8_t objtxt_73[] = { +72, 105, 115, 115, 105, 110, 103, 32, 99, 111, 98, 114, 97, 0 }; +const uint8_t objtxt_74[] = { +42, 32, 71, 79, 76, 68, 32, 78, 69, 67, 75, 76, 65, 67, 69, 32, 42, 0 }; +const uint8_t objtxt_75[] = { +80, 97, 115, 115, 97, 103, 101, 119, 97, 121, 0 }; +const uint8_t objtxt_76[] = { +68, 101, 97, 100, 32, 101, 120, 112, 108, 111, 114, 101, 114, 32, 99, 104, 97, 105, 110, 101, 100, 32, 116, 111, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_77[] = { +80, 105, 108, 101, 32, 111, 102, 32, 82, 117, 98, 98, 105, 115, 104, 0 }; +const uint8_t objtxt_78[] = { +67, 108, 111, 115, 101, 100, 32, 112, 111, 114, 116, 97, 108, 0 }; +const uint8_t objtxt_79[] = { +79, 112, 101, 110, 32, 112, 111, 114, 116, 97, 108, 0 }; +const uint8_t objtxt_80[] = { +80, 117, 114, 112, 108, 101, 32, 87, 111, 114, 109, 0 }; +const uint8_t objtxt_81[] = { +42, 32, 71, 79, 76, 68, 32, 80, 73, 78, 32, 42, 0 }; +const uint8_t objtxt_82[] = { +42, 32, 74, 65, 68, 69, 32, 67, 65, 82, 86, 73, 78, 71, 32, 42, 0 }; +const uint8_t objtxt_83[] = { +42, 32, 83, 65, 80, 80, 72, 73, 82, 69, 32, 42, 0 }; +const uint8_t objtxt_84[] = { +72, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_85[] = { +82, 111, 112, 101, 32, 104, 97, 110, 103, 105, 110, 103, 32, 102, 114, 111, 109, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_86[] = { +73, 114, 111, 110, 32, 115, 116, 97, 116, 117, 101, 32, 111, 102, 32, 80, 104, 97, 114, 111, 97, 104, 32, 115, 101, 97, 116, 101, 100, 32, 111, 110, 32, 116, 104, 114, 111, 110, 101, 0 }; +const uint8_t objtxt_87[] = { +67, 104, 97, 105, 110, 32, 104, 97, 110, 103, 105, 110, 103, 32, 102, 114, 111, 109, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_88[] = { +67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_89[] = { +87, 97, 108, 108, 32, 77, 117, 114, 97, 108, 0 }; +const uint8_t objtxt_90[] = { +32, 42, 32, 82, 85, 66, 89, 32, 42, 0 }; +const uint8_t objtxt_91[] = { +80, 111, 111, 108, 32, 111, 102, 32, 108, 105, 113, 117, 105, 100, 32, 40, 102, 97, 114, 32, 98, 101, 108, 111, 119, 32, 108, 101, 100, 103, 101, 41, 0 }; +const uint8_t objtxt_92[] = { +83, 112, 105, 114, 97, 108, 32, 83, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_93[] = { +42, 32, 80, 76, 65, 84, 73, 78, 85, 77, 32, 67, 82, 79, 87, 78, 32, 42, 0 }; +const uint8_t objtxt_94[] = { +83, 116, 97, 110, 100, 105, 110, 103, 32, 105, 114, 111, 110, 32, 115, 116, 97, 116, 117, 101, 0 }; +const uint8_t objtxt_95[] = { +73, 114, 111, 110, 32, 83, 116, 97, 116, 117, 101, 44, 32, 115, 108, 111, 119, 108, 121, 32, 97, 100, 118, 97, 110, 99, 105, 110, 103, 46, 32, 46, 32, 46, 0 }; +const uint8_t objtxt_96[] = { +80, 105, 108, 101, 32, 111, 102, 32, 77, 101, 108, 116, 101, 100, 32, 105, 114, 111, 110, 0 }; +const uint8_t objtxt_97[] = { +42, 32, 69, 77, 69, 82, 65, 76, 68, 32, 66, 82, 65, 67, 69, 76, 69, 84, 32, 42, 0 }; +const uint8_t objtxt_98[] = { +79, 112, 101, 110, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_99[] = { +84, 114, 101, 97, 115, 117, 114, 101, 32, 99, 111, 102, 102, 101, 114, 0 }; +const uint8_t objtxt_100[] = { +66, 97, 114, 114, 101, 100, 32, 119, 105, 110, 100, 111, 119, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, + objtxt_75, + objtxt_76, + objtxt_77, + objtxt_78, + objtxt_79, + objtxt_80, + objtxt_81, + objtxt_82, + objtxt_83, + objtxt_84, + objtxt_85, + objtxt_86, + objtxt_87, + objtxt_88, + objtxt_89, + objtxt_90, + objtxt_91, + objtxt_92, + objtxt_93, + objtxt_94, + objtxt_95, + objtxt_96, + objtxt_97, + objtxt_98, + objtxt_99, + objtxt_100, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +73, 32, 115, 101, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_2[] = { +66, 97, 114, 101, 45, 104, 97, 110, 100, 101, 100, 63, 0 }; +const uint8_t msgtxt_3[] = { +46, 0 }; +const uint8_t msgtxt_4[] = { +73, 32, 99, 97, 110, 39, 116, 46, 0 }; +const uint8_t msgtxt_5[] = { +78, 111, 32, 99, 111, 110, 116, 97, 105, 110, 101, 114, 46, 0 }; +const uint8_t msgtxt_6[] = { +67, 97, 110, 116, 101, 101, 110, 32, 105, 115, 32, 102, 117, 108, 108, 46, 0 }; +const uint8_t msgtxt_7[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 58, 32, 56, 32, 34, 80, 89, 82, 65, 77, 73, 68, 32, 79, 70, 32, 68, 79, 79, 77, 34, 0 }; +const uint8_t msgtxt_8[] = { +66, 121, 32, 65, 108, 118, 105, 110, 32, 70, 105, 108, 101, 115, 32, 38, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 32, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 82, 97, 121, 32, 72, 97, 114, 115, 104, 97, 119, 33, 0 }; +const uint8_t msgtxt_9[] = { +83, 105, 103, 110, 58, 32, 72, 101, 32, 119, 104, 111, 32, 100, 101, 102, 105, 108, 101, 115, 32, 116, 104, 101, 32, 116, 111, 109, 98, 115, 32, 111, 102, 32, 69, 103, 121, 112, 116, 32, 115, 104, 97, 108, 108, 32, 115, 117, 114, 101, 108, 121, 32, 112, 101, 114, 105, 115, 104, 33, 0 }; +const uint8_t msgtxt_10[] = { +84, 104, 101, 32, 115, 111, 117, 110, 100, 32, 111, 102, 32, 109, 97, 99, 104, 105, 110, 101, 114, 121, 46, 0 }; +const uint8_t msgtxt_11[] = { +73, 32, 104, 101, 97, 114, 32, 115, 116, 114, 97, 110, 103, 101, 32, 110, 111, 105, 115, 101, 115, 33, 0 }; +const uint8_t msgtxt_12[] = { +65, 82, 82, 71, 72, 33, 32, 80, 111, 105, 115, 111, 110, 32, 110, 101, 101, 100, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 108, 111, 99, 107, 46, 0 }; +const uint8_t msgtxt_13[] = { +84, 104, 101, 32, 114, 105, 103, 104, 116, 32, 107, 101, 121, 32, 99, 111, 117, 108, 100, 32, 104, 101, 108, 112, 32, 40, 109, 97, 121, 98, 101, 41, 46, 0 }; +const uint8_t msgtxt_14[] = { +76, 97, 114, 103, 101, 32, 115, 116, 111, 110, 101, 32, 102, 97, 108, 108, 115, 32, 111, 110, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_15[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 111, 110, 39, 116, 32, 102, 105, 116, 46, 0 }; +const uint8_t msgtxt_16[] = { +78, 111, 105, 115, 101, 32, 115, 99, 97, 114, 101, 115, 32, 116, 104, 101, 109, 32, 111, 102, 102, 0 }; +const uint8_t msgtxt_17[] = { +84, 104, 97, 110, 107, 115, 46, 0 }; +const uint8_t msgtxt_18[] = { +67, 114, 97, 115, 104, 33, 33, 33, 0 }; +const uint8_t msgtxt_19[] = { +73, 32, 104, 101, 97, 114, 32, 97, 32, 104, 111, 108, 108, 111, 119, 32, 108, 97, 117, 103, 104, 46, 32, 46, 32, 46, 0 }; +const uint8_t msgtxt_20[] = { +73, 32, 100, 111, 110, 39, 116, 32, 115, 101, 101, 32, 97, 110, 121, 32, 114, 101, 97, 115, 111, 110, 32, 116, 111, 32, 116, 104, 114, 111, 119, 32, 97, 32, 0 }; +const uint8_t msgtxt_21[] = { +65, 32, 115, 109, 97, 108, 108, 32, 100, 101, 115, 101, 114, 116, 32, 110, 111, 109, 97, 100, 32, 97, 112, 112, 101, 97, 114, 115, 46, 46, 46, 0 }; +const uint8_t msgtxt_22[] = { +84, 104, 101, 32, 110, 111, 109, 97, 100, 32, 115, 116, 117, 99, 107, 32, 111, 117, 116, 32, 104, 105, 115, 32, 116, 111, 110, 103, 117, 101, 32, 97, 116, 32, 109, 101, 46, 0 }; +const uint8_t msgtxt_23[] = { +87, 104, 97, 116, 33, 32, 84, 104, 101, 32, 110, 111, 109, 97, 100, 32, 106, 117, 109, 112, 101, 100, 32, 109, 101, 32, 119, 104, 105, 108, 101, 32, 109, 121, 32, 98, 97, 99, 107, 32, 119, 97, 115, 32, 116, 117, 114, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_24[] = { +78, 111, 109, 97, 100, 32, 118, 97, 110, 105, 115, 104, 101, 115, 32, 105, 110, 32, 97, 32, 112, 117, 102, 102, 32, 111, 102, 32, 121, 101, 108, 108, 111, 119, 32, 115, 109, 111, 107, 101, 46, 0 }; +const uint8_t msgtxt_25[] = { +83, 111, 114, 114, 121, 44, 32, 119, 111, 110, 39, 116, 32, 119, 111, 114, 107, 46, 0 }; +const uint8_t msgtxt_26[] = { +80, 105, 115, 116, 111, 108, 32, 104, 97, 115, 0 }; +const uint8_t msgtxt_27[] = { +98, 117, 108, 108, 101, 116, 115, 0 }; +const uint8_t msgtxt_28[] = { +78, 111, 32, 98, 117, 108, 108, 101, 116, 115, 46, 0 }; +const uint8_t msgtxt_29[] = { +71, 111, 116, 32, 104, 105, 109, 33, 33, 0 }; +const uint8_t msgtxt_30[] = { +84, 111, 111, 32, 104, 111, 116, 46, 0 }; +const uint8_t msgtxt_31[] = { +77, 117, 109, 109, 121, 32, 109, 111, 118, 101, 115, 32, 116, 111, 119, 97, 114, 100, 32, 109, 101, 46, 0 }; +const uint8_t msgtxt_32[] = { +77, 117, 109, 109, 121, 32, 104, 97, 115, 32, 109, 101, 32, 98, 121, 32, 116, 104, 101, 32, 116, 104, 114, 111, 97, 116, 33, 0 }; +const uint8_t msgtxt_33[] = { +77, 117, 109, 109, 121, 0 }; +const uint8_t msgtxt_34[] = { +119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_35[] = { +89, 111, 117, 32, 98, 101, 32, 119, 101, 105, 114, 100, 46, 32, 67, 117, 116, 32, 116, 104, 97, 116, 32, 111, 117, 116, 46, 0 }; +const uint8_t msgtxt_36[] = { +68, 111, 101, 115, 110, 39, 116, 32, 98, 111, 116, 104, 101, 114, 32, 104, 105, 109, 46, 0 }; +const uint8_t msgtxt_37[] = { +67, 111, 98, 114, 97, 32, 99, 114, 97, 119, 108, 115, 32, 111, 117, 116, 44, 32, 112, 114, 101, 115, 115, 101, 115, 32, 97, 32, 108, 111, 111, 115, 101, 32, 98, 114, 105, 99, 107, 32, 97, 110, 100, 32, 116, 104, 101, 110, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 32, 105, 110, 116, 111, 97, 32, 112, 97, 115, 115, 97, 103, 101, 32, 119, 104, 105, 99, 104, 32, 97, 112, 112, 101, 97, 114, 101, 100, 46, 0 }; +const uint8_t msgtxt_38[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 97, 108, 108, 115, 32, 111, 117, 116, 46, 0 }; +const uint8_t msgtxt_39[] = { +46, 0 }; +const uint8_t msgtxt_40[] = { +46, 0 }; +const uint8_t msgtxt_41[] = { +80, 117, 114, 112, 108, 101, 32, 119, 111, 114, 109, 32, 100, 101, 118, 111, 117, 114, 115, 32, 109, 101, 46, 0 }; +const uint8_t msgtxt_42[] = { +67, 104, 97, 105, 110, 32, 116, 111, 111, 32, 116, 111, 117, 103, 104, 46, 0 }; +const uint8_t msgtxt_43[] = { +73, 116, 115, 32, 98, 108, 97, 99, 107, 44, 32, 100, 105, 114, 116, 121, 32, 38, 32, 100, 117, 115, 116, 121, 0 }; +const uint8_t msgtxt_44[] = { +84, 104, 97, 116, 32, 102, 101, 101, 108, 115, 32, 103, 111, 111, 100, 46, 0 }; +const uint8_t msgtxt_45[] = { +82, 97, 116, 115, 0 }; +const uint8_t msgtxt_46[] = { +83, 116, 114, 97, 110, 103, 101, 32, 46, 32, 46, 32, 46, 32, 78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 46, 0 }; +const uint8_t msgtxt_47[] = { +73, 116, 115, 32, 108, 111, 99, 107, 101, 100, 46, 0 }; +const uint8_t msgtxt_48[] = { +83, 107, 101, 108, 101, 116, 111, 110, 32, 112, 108, 97, 99, 101, 115, 32, 115, 107, 117, 108, 108, 32, 111, 110, 32, 104, 105, 115, 32, 115, 104, 111, 117, 108, 100, 101, 114, 115, 44, 32, 103, 114, 97, 115, 112, 115, 0 }; +const uint8_t msgtxt_49[] = { +109, 101, 116, 97, 108, 32, 98, 97, 114, 44, 32, 112, 117, 108, 108, 115, 32, 100, 111, 119, 110, 32, 108, 97, 100, 100, 101, 114, 0 }; +const uint8_t msgtxt_50[] = { +73, 32, 99, 97, 110, 39, 116, 32, 114, 101, 97, 99, 104, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_51[] = { +73, 39, 109, 32, 110, 111, 116, 32, 97, 110, 32, 97, 114, 115, 111, 110, 105, 115, 116, 46, 0 }; +const uint8_t msgtxt_52[] = { +73, 116, 32, 115, 97, 121, 115, 58, 32, 34, 76, 69, 65, 86, 69, 32, 42, 84, 82, 69, 65, 83, 85, 82, 69, 83, 42, 32, 72, 69, 82, 69, 33, 34, 0 }; +const uint8_t msgtxt_53[] = { +79, 121, 115, 116, 101, 114, 32, 109, 97, 107, 101, 115, 32, 97, 32, 115, 108, 111, 98, 98, 101, 114, 105, 110, 103, 32, 110, 111, 105, 115, 101, 0 }; +const uint8_t msgtxt_54[] = { +79, 121, 115, 116, 101, 114, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_55[] = { +73, 116, 32, 97, 116, 116, 97, 99, 107, 115, 33, 0 }; +const uint8_t msgtxt_56[] = { +73, 32, 106, 117, 115, 116, 32, 99, 97, 117, 103, 104, 116, 32, 100, 101, 110, 103, 117, 101, 32, 102, 101, 118, 101, 114, 46, 32, 86, 101, 114, 121, 32, 98, 97, 100, 46, 0 }; +const uint8_t msgtxt_57[] = { +67, 111, 110, 102, 117, 115, 105, 110, 103, 46, 32, 80, 97, 114, 116, 32, 97, 112, 112, 101, 97, 114, 115, 32, 109, 105, 115, 115, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_58[] = { +73, 39, 109, 32, 116, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_59[] = { +80, 111, 117, 114, 32, 119, 97, 116, 101, 114, 63, 0 }; +const uint8_t msgtxt_60[] = { +73, 116, 39, 115, 32, 115, 116, 117, 99, 107, 46, 0 }; +const uint8_t msgtxt_61[] = { +46, 0 }; +const uint8_t msgtxt_62[] = { +67, 111, 98, 114, 97, 0 }; +const uint8_t msgtxt_63[] = { +83, 116, 114, 97, 110, 103, 101, 32, 109, 97, 114, 107, 105, 110, 103, 115, 32, 97, 114, 101, 32, 112, 114, 101, 115, 101, 110, 116, 46, 0 }; +const uint8_t msgtxt_64[] = { +97, 116, 116, 97, 99, 107, 115, 33, 0 }; +const uint8_t msgtxt_65[] = { +77, 105, 115, 115, 101, 100, 46, 46, 46, 0 }; +const uint8_t msgtxt_66[] = { +76, 105, 113, 117, 105, 100, 32, 105, 115, 32, 97, 99, 105, 100, 46, 0 }; +const uint8_t msgtxt_67[] = { +67, 97, 110, 116, 101, 101, 110, 32, 100, 105, 115, 115, 111, 108, 118, 101, 115, 46, 0 }; +const uint8_t msgtxt_68[] = { +73, 114, 111, 110, 32, 83, 116, 97, 116, 117, 101, 0 }; +const uint8_t msgtxt_69[] = { +77, 117, 114, 97, 108, 58, 32, 83, 101, 101, 107, 32, 121, 101, 32, 119, 101, 108, 108, 32, 116, 104, 101, 32, 72, 69, 65, 82, 84, 32, 111, 102, 32, 73, 114, 111, 110, 46, 0 }; +const uint8_t msgtxt_70[] = { +73, 114, 111, 110, 32, 83, 116, 97, 116, 117, 101, 32, 116, 101, 97, 114, 115, 32, 109, 101, 32, 97, 112, 97, 114, 116, 33, 0 }; +const uint8_t msgtxt_71[] = { +82, 117, 98, 121, 32, 102, 97, 108, 108, 115, 32, 105, 110, 116, 111, 32, 112, 111, 111, 108, 32, 111, 102, 32, 97, 99, 105, 100, 44, 32, 98, 117, 114, 110, 115, 32, 117, 112, 46, 0 }; +const uint8_t msgtxt_72[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_73[] = { +65, 32, 116, 105, 110, 121, 32, 118, 111, 105, 99, 101, 32, 115, 97, 121, 115, 58, 32, 34, 83, 69, 65, 82, 67, 72, 32, 65, 78, 68, 32, 89, 69, 32, 83, 72, 65, 76, 76, 32, 70, 73, 78, 68, 33, 34, 0 }; +const uint8_t msgtxt_74[] = { +73, 32, 99, 97, 110, 39, 116, 32, 108, 105, 102, 116, 32, 105, 116, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 98, 105, 103, 32, 111, 121, 115, 116, 101, 114, 0 }; +const uint8_t msgtxt_75[] = { +73, 32, 100, 111, 110, 39, 116, 32, 115, 101, 101, 32, 105, 116, 0 }; +const uint8_t msgtxt_76[] = { +78, 111, 109, 97, 100, 58, 32, 34, 76, 111, 111, 107, 32, 117, 112, 32, 100, 101, 99, 97, 112, 105, 116, 97, 116, 101, 100, 33, 34, 0 }; +const uint8_t msgtxt_77[] = { +78, 111, 109, 97, 100, 58, 32, 34, 82, 85, 78, 32, 89, 79, 85, 32, 70, 79, 79, 76, 33, 34, 0 }; +const uint8_t msgtxt_78[] = { +78, 111, 109, 97, 100, 58, 32, 34, 79, 121, 115, 116, 101, 114, 32, 116, 104, 105, 114, 115, 116, 121, 63, 34, 0 }; +const uint8_t msgtxt_79[] = { +71, 108, 111, 118, 101, 32, 102, 97, 108, 108, 115, 32, 111, 102, 102, 32, 109, 121, 32, 115, 119, 101, 97, 116, 121, 32, 104, 97, 110, 100, 0 }; +const uint8_t msgtxt_80[] = { +65, 104, 44, 32, 39, 116, 105, 115, 32, 109, 117, 115, 105, 99, 32, 116, 111, 32, 109, 121, 32, 101, 97, 114, 115, 46, 0 }; +const uint8_t msgtxt_81[] = { +79, 75, 0 }; +const uint8_t msgtxt_82[] = { +73, 110, 116, 111, 32, 116, 104, 101, 32, 119, 111, 114, 109, 39, 115, 32, 109, 111, 117, 116, 104, 33, 0 }; +const uint8_t msgtxt_83[] = { +84, 82, 89, 58, 32, 34, 84, 65, 75, 69, 32, 73, 78, 86, 69, 78, 84, 79, 82, 89, 34, 0 }; +const uint8_t msgtxt_84[] = { +77, 105, 114, 114, 111, 114, 115, 32, 69, 86, 69, 82, 89, 87, 72, 69, 82, 69, 33, 32, 76, 105, 103, 104, 116, 32, 98, 108, 105, 110, 100, 115, 32, 109, 101, 44, 32, 115, 111, 32, 73, 32, 115, 104, 117, 116, 32, 105, 116, 32, 79, 70, 70, 33, 0 }; +const uint8_t msgtxt_85[] = { +80, 104, 97, 114, 111, 97, 104, 39, 115, 32, 104, 101, 97, 114, 116, 32, 105, 115, 32, 114, 101, 100, 32, 108, 105, 107, 101, 32, 121, 111, 117, 114, 115, 44, 32, 121, 101, 116, 32, 101, 118, 105, 108, 32, 104, 97, 115, 32, 100, 97, 114, 107, 101, 110, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_86[] = { +87, 79, 87, 44, 32, 109, 97, 110, 44, 32, 99, 114, 97, 122, 121, 46, 46, 46, 0 }; +const uint8_t msgtxt_87[] = { +49, 48, 48, 48, 32, 121, 101, 97, 114, 115, 32, 98, 97, 100, 32, 108, 117, 99, 107, 32, 115, 116, 97, 114, 116, 115, 32, 119, 105, 116, 104, 32, 97, 32, 99, 97, 118, 101, 32, 105, 110, 33, 0 }; +const uint8_t msgtxt_88[] = { +73, 32, 102, 101, 101, 108, 32, 97, 32, 99, 111, 105, 110, 32, 111, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, +}; + + +const uint8_t status[] = { +/* AUTO 100 INTRO*/ + 170, + 9, 3, 0, 3, + 58, 7, 8, +/* AUTO 50 RATS HOLD*/ + 134, 50, + 1, 71, + 45, 114, 61, +/* AUTO 100 */ + 177, + 8, 16, 13, 9, 0, 9, 0, 8, + 72, 76, +/* AUTO 2 ARAB*/ + 137, 2, + 14, 27, 0, 27, + 53, 21, +/* AUTO 100 AMMO*/ + 173, + 9, 14, 0, 14, 0, 4, + 58, 79, +/* AUTO 100 PISTOL*/ + 174, + 8, 12, 1, 28, 16, 1, + 26, 78, 27, +/* AUTO 100 PISTOL*/ + 168, + 8, 12, 0, 12, + 60, +/* AUTO 70 SHOOT ARAB*/ + 143, 70, + 8, 11, 0, 11, 0, 27, + 29, 24, 60, 55, +/* AUTO 100 */ + 169, + 8, 11, 0, 11, + 60, 115, +/* AUTO 10 */ + 141, 10, + 2, 29, 0, 29, 0, 32, + 72, 31, +/* AUTO 20 */ + 133, 20, + 2, 32, + 32, 61, +/* AUTO 10 GLOVE*/ + 142, 10, + 1, 19, 0, 19, 0, 51, + 59, 53, 129, +/* AUTO 25 ARAB HELP*/ + 149, 25, + 2, 27, 4, 11, 0, 20, 14, 59, 8, 20, + 126, 60, +/* AUTO 100 HEAD*/ + 179, + 2, 54, 2, 48, 0, 59, 0, 58, + 48, 49, 53, 53, +/* AUTO 100 */ + 182, + 2, 54, 2, 48, 0, 54, 0, 48, 0, 53, + 55, 55, 55, +/* AUTO 100 ARAB FOLLOWS*/ + 172, + 13, 27, 5, 27, 0, 27, + 53, +/* AUTO 100 CLAM*/ + 183, + 2, 63, 2, 3, 0, 3, 0, 10, 0, 64, + 55, 103, 58, 53, +/* AUTO 20 ARAB RUN*/ + 136, 20, + 2, 27, 4, 19, + 127, +/* AUTO 25 OYSTER CLUE*/ + 149, 25, + 2, 27, 2, 63, 14, 64, 8, 20, 0, 20, + 128, 60, +/* AUTO 100 STAT FINI*/ + 181, + 8, 17, 14, 96, 0, 96, 0, 21, 0, 86, + 62, 59, +/* AUTO 100 RATS EAT*/ + 181, + 2, 3, 2, 71, 0, 3, 0, 71, 0, 69, + 55, 72, +/* AUTO 30 */ + 134, 30, + 2, 73, + 112, 114, 61, +/* AUTO 10 RATS ATTACK*/ + 134, 10, + 2, 71, + 45, 114, 61, +/* AUTO 40 WORM*/ + 133, 40, + 2, 80, + 41, 61, +/* AUTO 20 STATUE*/ + 133, 20, + 2, 95, + 120, 61, +/* AUTO 100 */ + 169, + 4, 23, 8, 15, + 57, 76, +/* AUTO 100 MIRROR ROOM*/ + 178, + 4, 25, 3, 9, 0, 9, 0, 8, + 72, 134, 76, +/* AUTO 100 DEATH*/ + 165, + 4, 27, + 65, 63, +/* AUTO 100 AMMO USE*/ + 173, + 8, 1, 0, 1, 0, 1, + 60, 83, +/* AUTO 1 ARAB ATTACK*/ + 137, 1, + 2, 27, 6, 28, + 23, 61, +/* AUTO 0 */ +}; +const uint8_t actions[] = { +/* LOO HIE */ + 5, 30, 27, + 4, 15, + 131, 113, +/* JUM ANY */ + 6, 52, 0, + 4, 20, + 131, 116, 61, +/* JUM ANY */ + 1, 52, 0, + 131, 46, +/* SAW BAR */ + 8, 41, 68, + 4, 11, 1, 55, + 50, +/* LOO STO */ + 5, 30, 46, + 3, 1, + 131, 113, +/* AUTO 0 */ +/* SWI ANY */ + 5, 51, 0, + 4, 24, + 131, 44, +/* SWI ANY */ + 6, 51, 0, + 4, 20, + 131, 116, 61, +/* THR STO */ + 9, 40, 46, + 1, 1, 0, 1, + 53, 131, +/* LOO FIR */ + 21, 30, 83, + 2, 56, 14, 13, 14, 90, 0, 13, 9, 17, + 1, 53, +/* DIG ANY DIG*/ + 17, 27, 0, + 1, 11, 14, 12, 4, 1, 0, 12, + 1, 53, +/* DIG ANY */ + 4, 27, 0, + 6, 11, + 2, +/* DIG ANY */ + 12, 27, 0, + 1, 11, 13, 12, 4, 1, + 122, +/* LOO EXP SEARCH*/ + 13, 30, 57, + 2, 76, 14, 81, 0, 81, + 38, 53, +/* GET INV INVENTORY*/ + 5, 10, 16, + 0, 12, + 66, 58, +/* INV ANY INVENTORY*/ + 5, 46, 0, + 0, 12, + 66, 58, +/* DIG ANY */ + 4, 27, 0, + 4, 2, + 122, +/* DIG ANY */ + 8, 27, 0, + 4, 2, 13, 13, + 122, +/* GET STO */ + 22, 10, 46, + 4, 4, 2, 1, 14, 16, 0, 16, 0, 1, + 53, 10, 52, +/* GET WAT WATER*/ + 17, 10, 7, + 4, 24, 1, 4, 0, 4, 0, 5, + 55, 52, +/* GET WAT */ + 8, 10, 7, + 2, 14, 6, 4, + 5, +/* GET WAT */ + 10, 10, 7, + 2, 14, 1, 5, + 0, 0, 6, +/* GO POO POOL*/ + 9, 1, 12, + 4, 3, 0, 24, + 54, 76, +/* GET WAT */ + 17, 10, 7, + 4, 3, 1, 4, 0, 4, 0, 5, + 55, 52, +/* GO DOO */ + 14, 1, 10, + 2, 17, 4, 4, 0, 6, + 54, 56, 76, +/* GO DOO */ + 8, 1, 10, + 2, 16, 4, 4, + 13, +/* DIG ANY */ + 16, 27, 0, + 1, 11, 14, 6, 4, 4, 0, 6, + 53, +/* DIG ANY */ + 8, 27, 0, + 1, 11, 2, 6, + 122, +/* GO HOL */ + 9, 1, 53, + 2, 6, 0, 5, + 54, 76, +/* UNL DOO */ + 20, 14, 10, + 2, 16, 1, 18, 8, 6, 0, 17, 0, 16, + 72, +/* UNL DOO */ + 8, 14, 10, + 2, 16, 6, 18, + 13, +/* REA SIG */ + 4, 12, 9, + 2, 15, + 9, +/* QUI ANY QUIT*/ + 0, 17, 0, + 63, +/* UNL DOO */ + 13, 14, 10, + 2, 16, 1, 18, 9, 6, + 14, 61, +/* UNL DOO TRAP OFF*/ + 23, 14, 10, + 4, 5, 1, 12, 0, 6, 0, 7, 0, 26, + 11, 10, 58, 72, +/* UNL DOO */ + 8, 14, 10, + 4, 5, 6, 12, + 13, +/* GO DOO */ + 8, 1, 10, + 4, 5, 8, 6, + 15, +/* DRI WAT */ + 13, 44, 7, + 1, 5, 0, 5, 0, 4, + 17, 72, +/* UNL SAR */ + 12, 14, 14, + 2, 20, 0, 22, 0, 20, + 72, +/* GO SAR */ + 10, 1, 14, + 2, 22, 0, 7, + 54, 76, 56, +/* BRE SKE */ + 14, 13, 13, + 2, 54, 0, 24, 0, 54, + 18, 19, 72, +/* ATT SKE */ + 14, 22, 13, + 2, 54, 0, 24, 0, 54, + 18, 19, 72, +/* GO DOO */ + 14, 1, 10, + 4, 6, 2, 25, 0, 4, + 54, 57, 76, +/* GO ALC */ + 9, 1, 23, + 2, 29, 2, 37, + 33, 34, +/* YES ANY */ + 0, 25, 0, + 25, +/* SHO ANY SHOOT*/ + 4, 24, 0, + 6, 28, + 2, +/* SHO ANY */ + 4, 24, 0, + 19, 0, + 28, +/* SHO NOM */ + 9, 24, 17, + 0, 11, 0, 1, + 58, 58, +/* POU WAT */ + 22, 6, 7, + 1, 5, 2, 31, 0, 36, 0, 31, 0, 2, + 72, 58, 73, +/* AUTO 0 */ + 205, + 8, 2, 0, 5, 0, 4, + 72, 73, +/* AUTO 0 */ + 214, + 8, 2, 2, 29, 0, 33, 0, 29, 0, 2, + 72, 60, 73, +/* AUTO 0 POU*/ + 213, + 8, 2, 2, 32, 0, 32, 0, 33, 0, 2, + 72, 60, +/* GET TAP */ + 4, 10, 20, + 5, 30, + 4, +/* GET TAP */ + 5, 10, 20, + 2, 29, + 33, 34, +/* GET MUM */ + 6, 10, 22, + 2, 29, + 33, 34, 35, +/* GET LEA */ + 4, 10, 21, + 2, 31, + 30, +/* SHO MUM */ + 18, 24, 22, + 2, 29, 0, 29, 0, 32, 0, 1, + 36, 72, 58, +/* SHO MUM */ + 9, 24, 22, + 2, 32, 0, 1, + 36, 58, +/* BRE RUB */ + 4, 13, 58, + 1, 90, + 4, +/* LOO SKU */ + 13, 30, 24, + 3, 48, 14, 50, 0, 50, + 53, 38, +/* LOO BOX */ + 22, 30, 37, + 3, 49, 14, 51, 0, 51, 14, 19, 13, 24, + 1, 38, 53, +/* PUN NOM */ + 6, 79, 17, + 2, 27, + 34, 45, 22, +/* SHO MUM */ + 9, 24, 22, + 2, 54, 0, 1, + 36, 58, +/* GET POL */ + 13, 10, 48, + 2, 10, 0, 10, 0, 11, + 55, 52, +/* PUL BAR */ + 4, 35, 68, + 2, 53, + 50, +/* GO BAR */ + 4, 1, 68, + 2, 53, + 50, +/* GO LAD */ + 9, 1, 36, + 2, 58, 0, 18, + 54, 76, +/* GO ARC */ + 8, 1, 43, + 4, 13, 9, 10, + 104, +/* GO ARC */ + 17, 1, 43, + 4, 13, 8, 10, 6, 63, 0, 14, + 54, 76, +/* GET TAB .*/ + 13, 10, 76, + 2, 60, 0, 60, 13, 68, + 131, 52, +/* GET STO */ + 9, 10, 46, + 2, 1, 0, 1, + 52, 131, +/* SAW TAB */ + 17, 41, 76, + 3, 55, 3, 60, 0, 68, 14, 68, + 1, 53, +/* LIG FLA */ + 17, 28, 77, + 1, 8, 9, 16, 0, 8, 0, 9, + 72, 76, +/* SCO ANY SCORE*/ + 0, 16, 0, + 65, +/* UNL FLA */ + 13, 14, 77, + 1, 9, 0, 8, 0, 9, + 72, 76, +/* LOO ASH */ + 13, 30, 55, + 4, 16, 14, 74, 0, 74, + 1, 53, +/* LOO BAS */ + 17, 30, 32, + 14, 73, 4, 16, 14, 43, 0, 73, + 53, 1, +/* GET COB */ + 6, 10, 54, + 2, 73, + 112, 114, 61, +/* PLA FLU */ + 23, 32, 42, + 4, 16, 14, 43, 1, 65, 0, 43, 0, 73, + 37, 53, 55, 73, +/* AUTO 0 */ + 200, + 0, 75, 0, 17, + 62, +/* GET BAS */ + 13, 10, 32, + 2, 42, 14, 43, 0, 73, + 38, 53, +/* GO PAS */ + 13, 1, 74, + 4, 16, 2, 43, 0, 17, + 54, 76, +/* GO ASH */ + 8, 1, 55, + 4, 16, 14, 74, + 1, +/* GO PAS */ + 13, 1, 74, + 4, 17, 2, 75, 0, 16, + 54, 76, +/* PLA FLU */ + 4, 32, 42, + 1, 65, + 130, +/* GET TAB */ + 14, 10, 76, + 2, 60, 0, 60, 14, 68, + 52, 131, 11, +/* LOO RUB RUBBISH*/ + 13, 30, 58, + 2, 77, 14, 82, 0, 82, + 1, 53, +/* LOO RUB */ + 9, 30, 58, + 2, 77, 13, 82, + 106, 61, +/* GO POR */ + 4, 1, 59, + 2, 78, + 13, +/* GO POR */ + 5, 1, 59, + 2, 79, + 132, 61, +/* UNL POR */ + 17, 14, 59, + 2, 78, 0, 80, 0, 79, 0, 78, + 53, 72, +/* SHO WOR WORM*/ + 9, 24, 63, + 2, 80, 0, 1, + 36, 58, +/* WET ANY */ + 0, 60, 0, + 109, +/* THR ROP ROPE*/ + 17, 40, 29, + 4, 20, 1, 45, 0, 45, 0, 85, + 55, 53, +/* GO ROP */ + 13, 1, 29, + 4, 20, 2, 85, 0, 21, + 54, 76, +/* GO HOL */ + 13, 1, 53, + 4, 20, 2, 85, 0, 21, + 54, 76, +/* GO HOL */ + 8, 1, 53, + 4, 20, 14, 85, + 50, +/* GET LAD */ + 4, 10, 36, + 2, 58, + 110, +/* BUR ANY */ + 9, 26, 0, + 4, 21, 0, 56, + 40, 55, +/* GO POO */ + 5, 1, 12, + 4, 20, + 116, 61, +/* GET WAT */ + 8, 10, 7, + 4, 20, 1, 5, + 6, +/* GET WAT */ + 14, 10, 7, + 4, 20, 1, 4, 0, 4, + 116, 117, 55, +/* GET WAT */ + 8, 10, 7, + 4, 20, 6, 4, + 5, +/* GO CHA */ + 14, 1, 38, + 2, 86, 0, 94, 0, 86, + 19, 72, 10, +/* GO CHA */ + 19, 1, 38, + 2, 94, 0, 94, 0, 95, 0, 92, + 10, 19, 72, 53, +/* PUL CHA */ + 14, 35, 38, + 2, 86, 0, 94, 0, 86, + 19, 72, 10, +/* PUL CHA */ + 19, 35, 38, + 2, 94, 0, 94, 0, 95, 0, 92, + 10, 19, 72, 53, +/* GO STA */ + 5, 1, 62, + 2, 95, + 118, 34, +/* GO STA */ + 13, 1, 62, + 2, 92, 14, 95, 0, 22, + 54, 76, +/* UNL CHE */ + 20, 14, 66, + 4, 21, 14, 86, 14, 94, 14, 95, 14, 93, + 73, +/* AUTO 0 */ + 197, + 0, 93, + 1, 53, +/* UNL CHE */ + 5, 14, 66, + 4, 21, + 118, 34, +/* THR RUB */ + 23, 40, 58, + 1, 90, 4, 20, 0, 90, 0, 95, 0, 94, + 55, 55, 55, 73, +/* AUTO 0 */ + 198, + 0, 17, + 58, 131, 121, +/* REA MUR */ + 4, 12, 67, + 4, 21, + 119, +/* GET SIG */ + 4, 10, 9, + 2, 15, + 110, +/* DRI WAT */ + 5, 44, 7, + 4, 20, + 116, 61, +/* GET RUB */ + 22, 10, 58, + 2, 90, 2, 94, 0, 90, 0, 95, 0, 94, + 52, 72, 10, +/* GET RUB */ + 22, 10, 58, + 2, 90, 2, 86, 0, 90, 0, 95, 0, 86, + 52, 72, 10, +/* GO BAR */ + 13, 1, 68, + 4, 22, 2, 98, 0, 23, + 54, 76, +/* SAW BAR */ + 16, 41, 68, + 4, 22, 1, 55, 0, 100, 0, 98, + 72, +/* UNL BAR */ + 16, 14, 68, + 4, 22, 1, 55, 0, 100, 0, 98, + 72, +/* UNL COF */ + 20, 14, 71, + 2, 99, 1, 19, 0, 99, 0, 44, 1, 12, + 72, +/* UNL COF */ + 13, 14, 71, + 2, 99, 6, 19, 1, 12, + 12, 61, +/* WEA GLO */ + 12, 42, 34, + 1, 51, 0, 51, 0, 19, + 72, +/* REM GLO */ + 12, 58, 34, + 1, 19, 0, 51, 0, 19, + 72, +/* GO DOO */ + 9, 1, 10, + 2, 39, 0, 25, + 54, 131, +/* REA STO */ + 8, 12, 46, + 3, 1, 7, 15, + 107, +/* GO PYR */ + 0, 1, 80, + 4, +/* RUB ANY */ + 0, 34, 0, + 35, +/* POU WAT */ + 13, 6, 7, + 1, 5, 0, 5, 0, 4, + 131, 72, +/* DIG ANY */ + 4, 27, 0, + 1, 11, + 122, +/* SAV GAM */ + 0, 45, 75, + 71, +/* PUL CHA */ + 21, 35, 38, + 4, 21, 14, 86, 14, 95, 14, 94, 0, 92, + 53, 1, +/* GO CHA */ + 21, 1, 38, + 4, 21, 14, 86, 14, 95, 14, 94, 0, 92, + 53, 1, +/* LOO COF */ + 13, 30, 71, + 2, 44, 14, 97, 0, 97, + 53, 1, +/* BRE MIR */ + 5, 13, 64, + 4, 25, + 137, 61, +/* GO ALC */ + 13, 1, 23, + 2, 37, 5, 29, 0, 10, + 54, 76, +/* POU WAT */ + 13, 6, 7, + 1, 5, 0, 4, 0, 5, + 72, 10, +/* HEL ANY */ + 5, 9, 0, + 0, 20, + 58, 123, +/* GET OYS */ + 4, 10, 40, + 2, 63, + 124, +/* GET OYS */ + 4, 10, 40, + 5, 63, + 125, +/* THR RUB */ + 9, 40, 58, + 1, 90, 0, 90, + 131, 53, +/* FEE ANY */ + 13, 75, 0, + 14, 40, 4, 25, 0, 40, + 138, 53, +/* GO STA */ + 9, 1, 62, + 4, 7, 0, 8, + 54, 76, +/* GO ENT */ + 4, 1, 79, + 4, 5, + 4, +/* GO DOO */ + 4, 1, 10, + 4, 5, + 4, +/* GET RUB */ + 9, 10, 58, + 2, 90, 0, 90, + 52, 131, +/* GET TAP */ + 22, 10, 20, + 5, 29, 5, 32, 14, 37, 0, 37, 0, 30, + 53, 74, 131, +/* GET TAP */ + 5, 10, 20, + 2, 32, + 33, 34, +/* GO ENT */ + 9, 1, 79, + 2, 37, 2, 29, + 33, 34, +/* GO ENT */ + 13, 1, 79, + 2, 37, 5, 29, 0, 10, + 54, 76, +/* LOO SIG */ + 4, 30, 9, + 2, 15, + 9, +/* LOO MUR */ + 4, 30, 67, + 4, 21, + 119, +/* SHO RAT */ + 23, 24, 52, + 2, 71, 4, 17, 0, 71, 0, 14, 0, 1, + 62, 115, 58, 16, +/* SHO RAT */ + 23, 24, 52, + 2, 71, 2, 71, 0, 71, 0, 17, 0, 1, + 62, 115, 58, 16, +/* SMO LEA */ + 4, 50, 21, + 2, 31, + 136, +/* THR ROP */ + 9, 40, 29, + 1, 45, 0, 45, + 53, 131, +/* CLO SAR */ + 13, 38, 14, + 2, 22, 0, 22, 0, 20, + 72, 131, +/* LOO BOX */ + 14, 30, 37, + 3, 49, 14, 24, 0, 24, + 1, 38, 53, +/* GET HEA */ + 0, 10, 81, + 135, +/* LOA PIS */ + 4, 49, 44, + 1, 28, + 133, +/* LOO COA */ + 4, 30, 72, + 3, 13, + 43, +/* THR STO */ + 9, 40, 46, + 1, 1, 0, 1, + 53, 46, +/* GET BAR */ + 4, 10, 68, + 4, 11, + 50, +/* PUN DOO */ + 18, 79, 10, + 2, 38, 0, 38, 0, 39, 1, 19, + 72, 131, 18, +/* THR ANY */ + 1, 40, 0, + 20, 85, +/* LOO ANY */ + 1, 30, 0, + 122, 76, +/* GET BAS */ + 9, 10, 32, + 2, 42, 0, 42, + 52, 131, +/* EAT JER */ + 10, 59, 45, + 1, 3, 0, 3, + 131, 17, 55, +/* SHO ANY */ + 6, 24, 0, + 0, 1, + 131, 58, 115, +/* SHA ANY */ + 0, 53, 0, + 46, +/* ASK NOM */ + 4, 61, 17, + 2, 27, + 22, +/* UNL OYS */ + 4, 14, 40, + 2, 63, + 104, +/* REA HIE */ + 8, 12, 27, + 4, 15, 12, 1, + 107, +/* REA HIE */ + 9, 12, 27, + 4, 15, 3, 1, + 131, 102, +/* REA STO */ + 9, 12, 46, + 3, 1, 4, 15, + 131, 102, +/* FEE RAT */ + 22, 75, 52, + 2, 71, 3, 3, 0, 71, 0, 69, 0, 3, + 131, 72, 55, +/* DRI WAT */ + 5, 44, 7, + 4, 24, + 131, 17, +/* GO PAS */ + 4, 1, 74, + 4, 9, + 108, +/* FEE OYS */ + 23, 75, 40, + 2, 63, 1, 3, 0, 3, 0, 10, 0, 64, + 55, 58, 53, 103, +/* GET ASH */ + 5, 10, 55, + 2, 41, + 4, 30, +/* GET TAP */ + 17, 10, 20, + 5, 29, 5, 32, 13, 37, 0, 30, + 131, 74, +/* SAW CHA */ + 8, 41, 38, + 1, 55, 2, 76, + 42, +/* SAW CHA */ + 8, 41, 38, + 1, 55, 2, 86, + 42, +/* UNC EXP */ + 4, 70, 57, + 2, 76, + 42, +/* ASK ANY */ + 0, 61, 0, + 46, +/* PUL CHA */ + 6, 35, 38, + 2, 95, + 131, 19, 127, +/* POU CAN */ + 0, 6, 51, + 109, +/* CLO ANY */ + 0, 38, 0, + 4, +/* GET LEA */ + 9, 10, 21, + 2, 36, 0, 36, + 52, 131, +/* GET BAR */ + 9, 10, 68, + 2, 67, 0, 67, + 52, 131, +/* UNL COF */ + 8, 14, 71, + 2, 99, 6, 12, + 47, +/* CLE COA */ + 17, 72, 72, + 3, 13, 0, 13, 0, 90, 3, 5, + 72, 131, +/* CLE COA */ + 17, 72, 72, + 3, 13, 0, 13, 0, 90, 4, 24, + 72, 131, +/* BRE ANY */ + 0, 13, 0, + 4, +/* PUN ANY */ + 4, 79, 0, + 6, 19, + 2, +/* ATT ANY */ + 4, 22, 0, + 2, 27, + 2, +/* FEE ANY .*/ + 0, 75, 0, + 35, + 255, +}; + + +const uint8_t verbs[] = { + /* AUT */ + 65, 85, 84, + /* GO */ + 71, 79, 32, + /* *ENT */ + 197, 78, 84, + /* *WAL */ + 215, 65, 76, + /* *RUN */ + 210, 85, 78, + /* *CLI */ + 195, 76, 73, + /* POU */ + 80, 79, 85, + /* *SPI */ + 211, 80, 73, + /* *EMP */ + 197, 77, 80, + /* HEL */ + 72, 69, 76, + /* GET */ + 71, 69, 84, + /* *TAK */ + 212, 65, 75, + /* REA */ + 82, 69, 65, + /* BRE */ + 66, 82, 69, + /* UNL */ + 85, 78, 76, + /* *OPE */ + 207, 80, 69, + /* SCO */ + 83, 67, 79, + /* QUI */ + 81, 85, 73, + /* DRO */ + 68, 82, 79, + /* *PUT */ + 208, 85, 84, + /* *LEA */ + 204, 69, 65, + /* PET */ + 80, 69, 84, + /* ATT */ + 65, 84, 84, + /* *KIL */ + 203, 73, 76, + /* SHO */ + 83, 72, 79, + /* YES */ + 89, 69, 83, + /* BUR */ + 66, 85, 82, + /* DIG */ + 68, 73, 71, + /* LIG */ + 76, 73, 71, + /* *FLA */ + 198, 76, 65, + /* LOO */ + 76, 79, 79, + /* *SEA */ + 211, 69, 65, + /* PLA */ + 80, 76, 65, + /* BAL */ + 66, 65, 76, + /* RUB */ + 82, 85, 66, + /* PUL */ + 80, 85, 76, + /* *GRA */ + 199, 82, 65, + /* PLA */ + 80, 76, 65, + /* CLO */ + 67, 76, 79, + /* *SHU */ + 211, 72, 85, + /* THR */ + 84, 72, 82, + /* SAW */ + 83, 65, 87, + /* WEA */ + 87, 69, 65, + /* GLO */ + 71, 76, 79, + /* DRI */ + 68, 82, 73, + /* SAV */ + 83, 65, 86, + /* INV */ + 73, 78, 86, + /* DRA */ + 68, 82, 65, + /* . */ + 46, 32, 32, + /* LOA */ + 76, 79, 65, + /* SMO */ + 83, 77, 79, + /* SWI */ + 83, 87, 73, + /* JUM */ + 74, 85, 77, + /* SHA */ + 83, 72, 65, + /* *. */ + 174, 32, 32, + /* *SME */ + 211, 77, 69, + /* *PUS */ + 208, 85, 83, + /* *WAV */ + 215, 65, 86, + /* REM */ + 82, 69, 77, + /* EAT */ + 69, 65, 84, + /* WET */ + 87, 69, 84, + /* ASK */ + 65, 83, 75, + /* *TAL */ + 212, 65, 76, + /* *YEL */ + 217, 69, 76, + /* *SAY */ + 211, 65, 89, + /* *SCR */ + 211, 67, 82, + /* *KIC */ + 203, 73, 67, + /* *TIC */ + 212, 73, 67, + /* . */ + 46, 32, 32, + /* HUG */ + 72, 85, 71, + /* UNC */ + 85, 78, 67, + /* */ + 32, 32, 32, + /* CLE */ + 67, 76, 69, + /* *WAS */ + 215, 65, 83, + /* */ + 32, 32, 32, + /* FEE */ + 70, 69, 69, + /* *TOU */ + 212, 79, 85, + /* *GRO */ + 199, 82, 79, + /* */ + 32, 32, 32, + /* PUN */ + 80, 85, 78, + /* *HIT */ + 200, 73, 84, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + /* */ + 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, + /* NORTH */ + 78, 79, 82, + /* SOUTH */ + 83, 79, 85, + /* EAST */ + 69, 65, 83, + /* WEST */ + 87, 69, 83, + /* UP */ + 85, 80, 32, + /* DOWN */ + 68, 79, 87, + /* WAT */ + 87, 65, 84, + /* *LIQ */ + 204, 73, 81, + /* SIG */ + 83, 73, 71, + /* DOO */ + 68, 79, 79, + /* *BRI */ + 194, 82, 73, + /* POO */ + 80, 79, 79, + /* SKE */ + 83, 75, 69, + /* SAR */ + 83, 65, 82, + /* BAN */ + 66, 65, 78, + /* INV */ + 73, 78, 86, + /* NOM */ + 78, 79, 77, + /* BRA */ + 66, 82, 65, + /* BON */ + 66, 79, 78, + /* TAP */ + 84, 65, 80, + /* LEA */ + 76, 69, 65, + /* MUM */ + 77, 85, 77, + /* ALC */ + 65, 76, 67, + /* SKU */ + 83, 75, 85, + /* CRO */ + 67, 82, 79, + /* FLO */ + 70, 76, 79, + /* HIE */ + 72, 73, 69, + /* THR */ + 84, 72, 82, + /* ROP */ + 82, 79, 80, + /* PLA */ + 80, 76, 65, + /* BLO */ + 66, 76, 79, + /* BAS */ + 66, 65, 83, + /* TEE */ + 84, 69, 69, + /* GLO */ + 71, 76, 79, + /* SAW */ + 83, 65, 87, + /* LAD */ + 76, 65, 68, + /* BOX */ + 66, 79, 88, + /* CHA */ + 67, 72, 65, + /* ARO */ + 65, 82, 79, + /* OYS */ + 79, 89, 83, + /* PEA */ + 80, 69, 65, + /* FLU */ + 70, 76, 85, + /* ARC */ + 65, 82, 67, + /* PIS */ + 80, 73, 83, + /* JER */ + 74, 69, 82, + /* STO */ + 83, 84, 79, + /* *MAR */ + 205, 65, 82, + /* POL */ + 80, 79, 76, + /* SHO */ + 83, 72, 79, + /* NEC */ + 78, 69, 67, + /* CAN */ + 67, 65, 78, + /* RAT */ + 82, 65, 84, + /* HOL */ + 72, 79, 76, + /* COB */ + 67, 79, 66, + /* ASH */ + 65, 83, 72, + /* KEY */ + 75, 69, 89, + /* EXP */ + 69, 88, 80, + /* RUB */ + 82, 85, 66, + /* POR */ + 80, 79, 82, + /* PIN */ + 80, 73, 78, + /* CAR */ + 67, 65, 82, + /* STA */ + 83, 84, 65, + /* WOR */ + 87, 79, 82, + /* MIR */ + 77, 73, 82, + /* SAP */ + 83, 65, 80, + /* CHE */ + 67, 72, 69, + /* MUR */ + 77, 85, 82, + /* BAR */ + 66, 65, 82, + /* *WIN */ + 215, 73, 78, + /* . */ + 46, 32, 32, + /* COF */ + 67, 79, 70, + /* COA */ + 67, 79, 65, + /* COI */ + 67, 79, 73, + /* PAS */ + 80, 65, 83, + /* GAM */ + 71, 65, 77, + /* TAB */ + 84, 65, 66, + /* FLA */ + 70, 76, 65, + /* STA */ + 83, 84, 65, + /* ENT */ + 69, 78, 84, + /* PYR */ + 80, 89, 82, + /* HEA */ + 72, 69, 65, + /* SCA */ + 83, 67, 65, + /* FIR */ + 70, 73, 82, + /* ALT */ + 65, 76, 84, + 0, +}; +const uint8_t automap[] = { + /* STO */ + 83, 84, 79, + 1, + /* JER */ + 74, 69, 82, + 3, + /* CAN */ + 67, 65, 78, + 4, + /* CAN */ + 67, 65, 78, + 5, + /* FLA */ + 70, 76, 65, + 8, + /* FLA */ + 70, 76, 65, + 9, + /* SHO */ + 83, 72, 79, + 11, + /* KEY */ + 75, 69, 89, + 12, + /* COA */ + 67, 79, 65, + 13, + /* KEY */ + 75, 69, 89, + 18, + /* BAN */ + 66, 65, 78, + 21, + /* BON */ + 66, 79, 78, + 24, + /* PIS */ + 80, 73, 83, + 28, + /* TAP */ + 84, 65, 80, + 30, + /* SCA */ + 83, 67, 65, + 34, + /* LEA */ + 76, 69, 65, + 36, + /* COI */ + 67, 79, 73, + 40, + /* BAS */ + 66, 65, 83, + 42, + /* ROP */ + 82, 79, 80, + 45, + /* BLO */ + 66, 76, 79, + 47, + /* SKU */ + 83, 75, 85, + 48, + /* BOX */ + 66, 79, 88, + 49, + /* TEE */ + 84, 69, 69, + 50, + /* GLO */ + 71, 76, 79, + 51, + /* SAW */ + 83, 65, 87, + 55, + /* TAB */ + 84, 65, 66, + 60, + /* PEA */ + 80, 69, 65, + 64, + /* FLU */ + 70, 76, 85, + 65, + /* BAR */ + 66, 65, 82, + 67, + /* NEC */ + 78, 69, 67, + 68, + /* RAT */ + 82, 65, 84, + 69, + /* RAT */ + 82, 65, 84, + 71, + /* NEC */ + 78, 69, 67, + 74, + /* PIN */ + 80, 73, 78, + 81, + /* CAR */ + 67, 65, 82, + 82, + /* SAP */ + 83, 65, 80, + 83, + /* RUB */ + 82, 85, 66, + 90, + /* CRO */ + 67, 82, 79, + 93, + /* BRA */ + 66, 82, 65, + 97, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv09.c b/Applications/games/adv09.c new file mode 100644 index 00000000..2f0e898f --- /dev/null +++ b/Applications/games/adv09.c @@ -0,0 +1,3459 @@ +#define NUM_OBJ 77 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 175; +const uint8_t lightfill = 175; +const uint8_t startcarried = 0; +const uint8_t maxcar = 7; +const uint8_t treasure = 15; +const uint8_t treasures = 13; +const uint8_t lastloc = 38; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +71, 104, 111, 115, 116, 32, 84, 111, 119, 110, 0 }; +const uint8_t loctxt_2[] = { +71, 104, 111, 115, 116, 32, 84, 111, 119, 110, 0 }; +const uint8_t loctxt_3[] = { +71, 104, 111, 115, 116, 32, 84, 111, 119, 110, 0 }; +const uint8_t loctxt_4[] = { +71, 104, 111, 115, 116, 32, 84, 111, 119, 110, 0 }; +const uint8_t loctxt_5[] = { +115, 116, 97, 98, 108, 101, 0 }; +const uint8_t loctxt_6[] = { +114, 111, 97, 100, 0 }; +const uint8_t loctxt_7[] = { +102, 111, 114, 107, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 97, 100, 0 }; +const uint8_t loctxt_8[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 114, 105, 100, 103, 101, 32, 97, 98, 111, 118, 101, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 114, 97, 118, 105, 110, 101, 32, 73, 32, 115, 101, 101, 10, 109, 111, 117, 110, 116, 97, 105, 110, 115, 32, 105, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 97, 110, 99, 101, 0 }; +const uint8_t loctxt_9[] = { +108, 97, 114, 103, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t loctxt_10[] = { +114, 97, 118, 105, 110, 101, 0 }; +const uint8_t loctxt_11[] = { +115, 97, 108, 111, 111, 110, 0 }; +const uint8_t loctxt_12[] = { +104, 105, 100, 100, 101, 110, 32, 111, 102, 102, 105, 99, 101, 0 }; +const uint8_t loctxt_13[] = { +74, 97, 105, 108, 0 }; +const uint8_t loctxt_14[] = { +99, 101, 108, 108, 0 }; +const uint8_t loctxt_15[] = { +68, 114, 121, 32, 71, 111, 111, 100, 115, 32, 115, 116, 111, 114, 101, 0 }; +const uint8_t loctxt_16[] = { +66, 97, 114, 98, 101, 114, 115, 104, 111, 112, 0 }; +const uint8_t loctxt_17[] = { +114, 111, 97, 100, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 114, 105, 100, 103, 101, 32, 97, 98, 111, 118, 101, 32, 97, 32, 114, 97, 118, 105, 110, 101, 0 }; +const uint8_t loctxt_19[] = { +115, 116, 97, 108, 108, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 111, 110, 32, 66, 111, 111, 116, 32, 104, 105, 108, 108, 0 }; +const uint8_t loctxt_21[] = { +77, 105, 110, 101, 0 }; +const uint8_t loctxt_22[] = { +77, 105, 110, 101, 0 }; +const uint8_t loctxt_23[] = { +77, 105, 110, 101, 0 }; +const uint8_t loctxt_24[] = { +84, 101, 108, 101, 103, 114, 97, 112, 104, 32, 111, 102, 102, 105, 99, 101, 0 }; +const uint8_t loctxt_25[] = { +42, 73, 39, 109, 32, 111, 110, 32, 98, 97, 99, 107, 32, 111, 102, 32, 39, 79, 108, 101, 32, 80, 97, 105, 110, 116, 0 }; +const uint8_t loctxt_26[] = { +119, 97, 114, 109, 32, 98, 101, 100, 0 }; +const uint8_t loctxt_27[] = { +104, 111, 116, 101, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_28[] = { +108, 111, 98, 98, 121, 0 }; +const uint8_t loctxt_29[] = { +103, 114, 97, 118, 101, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 102, 108, 97, 116, 32, 111, 110, 32, 109, 121, 32, 98, 97, 99, 107, 32, 105, 110, 32, 97, 32, 109, 97, 110, 117, 114, 101, 32, 112, 105, 108, 101, 0 }; +const uint8_t loctxt_31[] = { +115, 116, 111, 114, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_32[] = { +109, 111, 117, 110, 116, 97, 105, 110, 32, 116, 114, 97, 105, 108, 0 }; +const uint8_t loctxt_33[] = { +108, 105, 110, 101, 32, 115, 104, 97, 99, 107, 0 }; +const uint8_t loctxt_34[] = { +114, 111, 111, 116, 32, 99, 101, 108, 108, 97, 114, 0 }; +const uint8_t loctxt_35[] = { +42, 73, 39, 109, 32, 98, 101, 104, 105, 110, 100, 32, 116, 104, 101, 32, 99, 111, 117, 110, 116, 101, 114, 0 }; +const uint8_t loctxt_36[] = { +104, 105, 100, 100, 101, 110, 32, 99, 97, 110, 121, 111, 110, 0 }; +const uint8_t loctxt_37[] = { +116, 101, 101, 112, 101, 101, 0 }; +const uint8_t loctxt_38[] = { +108, 111, 116, 32, 111, 102, 32, 116, 114, 111, 117, 98, 108, 101, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 17, 2, 0, 0 } }, + { loctxt_2, { 0, 0, 1, 3, 0, 0 } }, + { loctxt_3, { 0, 0, 2, 4, 0, 0 } }, + { loctxt_4, { 0, 0, 3, 6, 0, 0 } }, + { loctxt_5, { 0, 4, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 4, 7, 0, 0 } }, + { loctxt_7, { 9, 8, 6, 0, 0, 0 } }, + { loctxt_8, { 7, 0, 0, 0, 0, 0 } }, + { loctxt_9, { 0, 7, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 0, 8, 0 } }, + { loctxt_11, { 0, 2, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 11, 0, 0, 0 } }, + { loctxt_13, { 1, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 13, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 2, 0, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 1, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 20, 1, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 32, 0, 0 } }, + { loctxt_19, { 0, 5, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 17, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 0, 10, 22 } }, + { loctxt_22, { 0, 23, 0, 0, 21, 0 } }, + { loctxt_23, { 22, 0, 0, 0, 0, 0 } }, + { loctxt_24, { 0, 3, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 19 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 28, 0, 0 } }, + { loctxt_28, { 3, 0, 27, 0, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 20, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_31, { 19, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 18, 0, 0, 0 } }, + { loctxt_33, { 0, 32, 0, 0, 0, 0 } }, + { loctxt_34, { 0, 0, 0, 0, 33, 0 } }, + { loctxt_35, { 28, 0, 0, 0, 0, 0 } }, + { loctxt_36, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_37, { 36, 0, 0, 0, 0, 0 } }, + { loctxt_38, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 1, + 1, + 2, + 4, + 5, + 5, + 15, + 0, + 0, + 0, + 10, + 0, + 10, + 15, + 11, + 19, + 0, + 0, + 15, + 19, + 0, + 11, + 0, + 0, + 0, + 22, + 21, + 13, + 0, + 35, + 13, + 2, + 15, + 25, + 16, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 3, + 20, + 0, + 29, + 29, + 0, + 24, + 0, + 0, + 0, + 24, + 35, + 0, + 12, + 0, + 31, + 0, + 0, + 0, + 33, + 0, + 32, + 0, + 0, + 34, + 28, + 0, + 0, + 0, + 14, + 36, + 0, + 37, + 37, +}; + + +const uint8_t objtxt_0[] = { +87, 111, 114, 110, 32, 111, 117, 116, 32, 102, 105, 100, 100, 108, 101, 32, 115, 116, 114, 105, 110, 103, 115, 0 }; +const uint8_t objtxt_1[] = { +66, 97, 114, 98, 101, 114, 115, 104, 111, 112, 0 }; +const uint8_t objtxt_2[] = { +74, 97, 105, 108, 0 }; +const uint8_t objtxt_3[] = { +83, 97, 108, 111, 111, 110, 0 }; +const uint8_t objtxt_4[] = { +83, 116, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_5[] = { +83, 116, 97, 108, 108, 0 }; +const uint8_t objtxt_6[] = { +77, 97, 110, 117, 114, 101, 32, 112, 105, 108, 101, 0 }; +const uint8_t objtxt_7[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_8[] = { +87, 104, 105, 116, 101, 32, 99, 114, 121, 115, 116, 97, 108, 115, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 99, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_10[] = { +89, 101, 108, 108, 111, 119, 32, 112, 111, 119, 100, 101, 114, 0 }; +const uint8_t objtxt_11[] = { +83, 97, 103, 101, 98, 114, 117, 115, 104, 32, 99, 104, 97, 114, 99, 111, 97, 108, 0 }; +const uint8_t objtxt_12[] = { +80, 105, 108, 101, 32, 111, 102, 32, 103, 117, 110, 112, 111, 119, 100, 101, 114, 0 }; +const uint8_t objtxt_13[] = { +69, 110, 116, 114, 97, 110, 99, 101, 32, 116, 111, 32, 97, 32, 109, 105, 110, 101, 0 }; +const uint8_t objtxt_14[] = { +77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_15[] = { +77, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_16[] = { +39, 111, 108, 101, 32, 80, 97, 105, 110, 116, 0 }; +const uint8_t objtxt_17[] = { +66, 114, 111, 107, 101, 110, 32, 109, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_18[] = { +72, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_19[] = { +67, 111, 109, 112, 97, 115, 115, 0 }; +const uint8_t objtxt_20[] = { +72, 111, 114, 115, 101, 115, 104, 111, 101, 0 }; +const uint8_t objtxt_21[] = { +77, 97, 108, 101, 32, 99, 111, 119, 32, 109, 97, 110, 117, 114, 101, 0 }; +const uint8_t objtxt_22[] = { +76, 97, 114, 103, 101, 32, 98, 101, 108, 108, 0 }; +const uint8_t objtxt_23[] = { +87, 114, 97, 105, 116, 104, 108, 105, 107, 101, 32, 102, 105, 103, 117, 114, 101, 32, 112, 108, 97, 121, 105, 110, 103, 32, 101, 113, 117, 97, 108, 108, 121, 32, 103, 104, 111, 115, 116, 108, 121, 32, 112, 105, 97, 110, 111, 0 }; +const uint8_t objtxt_24[] = { +80, 105, 97, 110, 111, 32, 119, 105, 116, 104, 32, 115, 101, 116, 32, 111, 102, 32, 107, 101, 121, 115, 0 }; +const uint8_t objtxt_25[] = { +77, 97, 112, 0 }; +const uint8_t objtxt_26[] = { +85, 110, 108, 105, 116, 32, 99, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_27[] = { +42, 83, 73, 76, 86, 69, 82, 32, 66, 85, 76, 76, 69, 84, 42, 0 }; +const uint8_t objtxt_28[] = { +42, 71, 79, 76, 68, 69, 78, 32, 68, 69, 82, 82, 73, 78, 71, 69, 82, 42, 0 }; +const uint8_t objtxt_29[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_30[] = { +83, 105, 103, 110, 45, 34, 82, 105, 110, 103, 32, 102, 111, 114, 32, 82, 79, 79, 77, 32, 115, 101, 114, 118, 105, 99, 101, 34, 0 }; +const uint8_t objtxt_31[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_32[] = { +68, 114, 121, 45, 71, 111, 111, 100, 115, 32, 115, 116, 111, 114, 101, 0 }; +const uint8_t objtxt_33[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_34[] = { +42, 83, 73, 76, 86, 69, 82, 32, 83, 80, 85, 82, 83, 42, 0 }; +const uint8_t objtxt_35[] = { +83, 116, 101, 116, 115, 111, 110, 32, 104, 97, 116, 0 }; +const uint8_t objtxt_36[] = { +87, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_37[] = { +83, 109, 97, 108, 108, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_38[] = { +82, 111, 108, 108, 32, 111, 102, 32, 116, 97, 112, 101, 0 }; +const uint8_t objtxt_39[] = { +84, 97, 112, 101, 100, 32, 117, 112, 32, 109, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_40[] = { +42, 71, 79, 76, 68, 32, 78, 85, 71, 71, 69, 84, 42, 0 }; +const uint8_t objtxt_41[] = { +84, 101, 108, 101, 103, 114, 97, 112, 104, 32, 111, 102, 102, 105, 99, 101, 0 }; +const uint8_t objtxt_42[] = { +69, 109, 112, 116, 121, 32, 109, 97, 116, 99, 104, 98, 111, 111, 107, 0 }; +const uint8_t objtxt_43[] = { +66, 101, 100, 0 }; +const uint8_t objtxt_44[] = { +72, 111, 116, 101, 108, 0 }; +const uint8_t objtxt_45[] = { +82, 97, 116, 116, 108, 101, 115, 110, 97, 107, 101, 0 }; +const uint8_t objtxt_46[] = { +79, 112, 101, 110, 32, 103, 114, 97, 118, 101, 0 }; +const uint8_t objtxt_47[] = { +42, 71, 79, 76, 68, 32, 67, 79, 73, 78, 42, 0 }; +const uint8_t objtxt_48[] = { +80, 117, 114, 112, 108, 101, 32, 119, 111, 114, 109, 0 }; +const uint8_t objtxt_49[] = { +80, 117, 114, 112, 108, 101, 32, 83, 108, 105, 109, 101, 0 }; +const uint8_t objtxt_50[] = { +84, 101, 108, 101, 103, 114, 97, 112, 104, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_51[] = { +50, 32, 108, 111, 111, 115, 101, 32, 119, 105, 114, 101, 115, 0 }; +const uint8_t objtxt_52[] = { +83, 112, 108, 105, 99, 101, 100, 32, 119, 105, 114, 101, 0 }; +const uint8_t objtxt_53[] = { +80, 105, 101, 99, 101, 115, 32, 111, 102, 32, 119, 105, 114, 101, 0 }; +const uint8_t objtxt_54[] = { +76, 97, 114, 103, 101, 32, 115, 97, 102, 101, 0 }; +const uint8_t objtxt_55[] = { +42, 67, 65, 83, 72, 66, 79, 88, 42, 0 }; +const uint8_t objtxt_56[] = { +42, 32, 36, 50, 48, 48, 32, 42, 0 }; +const uint8_t objtxt_57[] = { +42, 79, 82, 73, 69, 78, 84, 65, 76, 32, 71, 79, 32, 66, 79, 65, 82, 68, 42, 0 }; +const uint8_t objtxt_58[] = { +72, 111, 108, 101, 32, 107, 105, 99, 107, 101, 100, 32, 105, 110, 32, 119, 97, 108, 108, 32, 38, 32, 98, 97, 114, 101, 32, 104, 111, 111, 102, 32, 112, 114, 105, 110, 116, 0 }; +const uint8_t objtxt_59[] = { +75, 101, 103, 32, 111, 102, 32, 110, 97, 105, 108, 115, 0 }; +const uint8_t objtxt_60[] = { +69, 109, 112, 116, 121, 32, 107, 101, 103, 0 }; +const uint8_t objtxt_61[] = { +75, 101, 103, 32, 111, 102, 32, 103, 117, 110, 112, 111, 119, 100, 101, 114, 0 }; +const uint8_t objtxt_62[] = { +78, 97, 105, 108, 115, 0 }; +const uint8_t objtxt_63[] = { +84, 101, 108, 101, 103, 114, 97, 112, 104, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_64[] = { +83, 109, 111, 107, 105, 110, 103, 32, 111, 112, 101, 110, 32, 115, 97, 102, 101, 0 }; +const uint8_t objtxt_65[] = { +76, 105, 110, 101, 32, 115, 104, 97, 99, 107, 0 }; +const uint8_t objtxt_66[] = { +80, 108, 97, 110, 107, 0 }; +const uint8_t objtxt_67[] = { +72, 111, 108, 101, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_68[] = { +42, 80, 69, 76, 84, 83, 42, 0 }; +const uint8_t objtxt_69[] = { +67, 111, 117, 110, 116, 101, 114, 0 }; +const uint8_t objtxt_70[] = { +71, 104, 111, 115, 116, 108, 121, 32, 115, 113, 117, 97, 114, 101, 32, 100, 97, 110, 99, 101, 0 }; +const uint8_t objtxt_71[] = { +42, 83, 73, 76, 86, 69, 82, 32, 67, 85, 80, 42, 0 }; +const uint8_t objtxt_72[] = { +42, 66, 65, 71, 32, 71, 79, 76, 68, 32, 68, 85, 83, 84, 42, 0 }; +const uint8_t objtxt_73[] = { +72, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_74[] = { +84, 101, 101, 80, 101, 101, 0 }; +const uint8_t objtxt_75[] = { +73, 110, 100, 105, 97, 110, 32, 103, 104, 111, 115, 116, 0 }; +const uint8_t objtxt_76[] = { +42, 83, 65, 67, 82, 69, 68, 32, 84, 79, 77, 32, 84, 79, 77, 42, 0 }; +const uint8_t objtxt_77[] = { +42, 84, 85, 82, 81, 85, 79, 73, 83, 69, 32, 78, 69, 67, 75, 76, 65, 67, 69, 42, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, + objtxt_75, + objtxt_76, + objtxt_77, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +79, 75, 0 }; +const uint8_t msgtxt_2[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_3[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 57, 32, 34, 71, 72, 79, 83, 84, 32, 84, 79, 87, 78, 34, 0 }; +const uint8_t msgtxt_4[] = { +98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 32, 100, 101, 100, 105, 99, 97, 116, 101, 100, 58, 32, 116, 104, 101, 32, 67, 104, 101, 114, 101, 110, 115, 0 }; +const uint8_t msgtxt_5[] = { +73, 39, 118, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 116, 111, 32, 100, 111, 32, 116, 104, 97, 116, 32, 119, 105, 116, 104, 0 }; +const uint8_t msgtxt_6[] = { +83, 111, 114, 114, 121, 32, 73, 32, 99, 97, 110, 39, 116, 0 }; +const uint8_t msgtxt_7[] = { +73, 32, 102, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_8[] = { +87, 101, 97, 114, 63, 0 }; +const uint8_t msgtxt_9[] = { +66, 65, 82, 70, 33, 0 }; +const uint8_t msgtxt_10[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_11[] = { +110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_12[] = { +114, 101, 109, 105, 110, 100, 115, 32, 109, 101, 32, 111, 102, 0 }; +const uint8_t msgtxt_13[] = { +89, 111, 117, 39, 118, 101, 32, 109, 97, 100, 101, 0 }; +const uint8_t msgtxt_14[] = { +66, 79, 78, 85, 83, 32, 112, 111, 105, 110, 116, 115, 32, 111, 117, 116, 32, 111, 102, 32, 97, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 53, 48, 32, 105, 110, 0 }; +const uint8_t msgtxt_15[] = { +105, 116, 115, 32, 102, 117, 108, 108, 32, 111, 102, 32, 115, 97, 103, 101, 32, 98, 114, 117, 115, 104, 44, 32, 116, 117, 109, 98, 108, 101, 119, 101, 101, 100, 32, 38, 32, 105, 115, 32, 105, 109, 112, 97, 115, 115, 97, 98, 108, 101, 0 }; +const uint8_t msgtxt_16[] = { +109, 111, 118, 101, 115, 0 }; +const uint8_t msgtxt_17[] = { +84, 104, 101, 32, 100, 114, 121, 32, 119, 97, 115, 104, 32, 105, 115, 32, 98, 117, 114, 110, 116, 32, 99, 108, 101, 97, 114, 0 }; +const uint8_t msgtxt_18[] = { +102, 108, 121, 105, 110, 103, 32, 103, 108, 97, 115, 115, 32, 115, 108, 105, 99, 101, 115, 32, 109, 101, 32, 117, 112, 0 }; +const uint8_t msgtxt_19[] = { +67, 114, 97, 99, 107, 33, 0 }; +const uint8_t msgtxt_20[] = { +110, 111, 114, 116, 104, 0 }; +const uint8_t msgtxt_21[] = { +105, 116, 115, 32, 112, 111, 105, 110, 116, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 0 }; +const uint8_t msgtxt_22[] = { +104, 111, 114, 115, 101, 115, 104, 111, 101, 0 }; +const uint8_t msgtxt_23[] = { +68, 111, 111, 114, 115, 32, 99, 108, 111, 115, 101, 100, 44, 32, 119, 105, 110, 100, 111, 119, 115, 32, 98, 97, 114, 114, 101, 100, 33, 0 }; +const uint8_t msgtxt_24[] = { +119, 105, 116, 104, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_25[] = { +73, 110, 115, 105, 100, 101, 32, 98, 111, 108, 116, 32, 105, 115, 32, 108, 97, 116, 99, 104, 101, 100, 33, 0 }; +const uint8_t msgtxt_26[] = { +77, 97, 103, 110, 101, 116, 33, 0 }; +const uint8_t msgtxt_27[] = { +32, 100, 111, 101, 115, 110, 39, 116, 32, 115, 101, 101, 109, 32, 116, 111, 32, 100, 111, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_28[] = { +68, 105, 110, 103, 45, 68, 105, 110, 103, 0 }; +const uint8_t msgtxt_29[] = { +66, 101, 108, 108, 32, 114, 105, 110, 103, 115, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_30[] = { +77, 121, 32, 104, 97, 110, 100, 32, 112, 97, 115, 115, 101, 115, 32, 116, 104, 114, 117, 33, 0 }; +const uint8_t msgtxt_31[] = { +71, 104, 111, 115, 116, 32, 115, 116, 97, 110, 100, 115, 44, 32, 98, 111, 119, 115, 44, 32, 118, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_32[] = { +83, 105, 108, 108, 121, 44, 32, 119, 114, 111, 110, 103, 32, 116, 121, 112, 101, 32, 107, 101, 121, 115, 33, 0 }; +const uint8_t msgtxt_33[] = { +79, 100, 100, 0 }; +const uint8_t msgtxt_34[] = { +103, 111, 101, 115, 32, 116, 104, 117, 110, 107, 33, 0 }; +const uint8_t msgtxt_35[] = { +102, 97, 108, 108, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_36[] = { +67, 97, 110, 100, 108, 101, 32, 98, 108, 101, 119, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_37[] = { +118, 101, 114, 121, 32, 112, 114, 101, 116, 116, 121, 0 }; +const uint8_t msgtxt_38[] = { +115, 104, 111, 111, 116, 115, 32, 115, 116, 114, 101, 97, 109, 32, 111, 102, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t msgtxt_39[] = { +105, 116, 32, 97, 108, 114, 101, 97, 100, 121, 32, 105, 115, 0 }; +const uint8_t msgtxt_40[] = { +68, 114, 111, 112, 32, 42, 84, 82, 69, 65, 83, 85, 82, 69, 83, 42, 32, 116, 104, 101, 110, 32, 83, 67, 79, 82, 69, 0 }; +const uint8_t msgtxt_41[] = { +73, 32, 104, 101, 97, 114, 0 }; +const uint8_t msgtxt_42[] = { +87, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_43[] = { +84, 111, 111, 32, 115, 116, 101, 101, 112, 33, 0 }; +const uint8_t msgtxt_44[] = { +102, 101, 101, 108, 115, 32, 115, 116, 114, 97, 110, 103, 101, 0 }; +const uint8_t msgtxt_45[] = { +105, 116, 115, 32, 109, 121, 32, 115, 105, 122, 101, 0 }; +const uint8_t msgtxt_46[] = { +68, 111, 110, 39, 116, 32, 99, 111, 108, 108, 101, 99, 116, 32, 36, 50, 48, 48, 32, 116, 104, 101, 110, 32, 100, 111, 110, 39, 116, 32, 112, 97, 115, 115, 32, 71, 79, 33, 32, 67, 79, 78, 84, 82, 65, 80, 79, 83, 73, 84, 73, 86, 69, 46, 0 }; +const uint8_t msgtxt_47[] = { +104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_48[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_49[] = { +73, 116, 115, 32, 109, 105, 110, 101, 44, 32, 100, 105, 103, 32, 114, 111, 111, 102, 33, 0 }; +const uint8_t msgtxt_50[] = { +71, 104, 111, 115, 116, 108, 121, 32, 118, 111, 105, 99, 101, 32, 119, 104, 105, 115, 112, 101, 114, 115, 58, 0 }; +const uint8_t msgtxt_51[] = { +86, 97, 105, 110, 46, 46, 46, 0 }; +const uint8_t msgtxt_52[] = { +77, 97, 116, 99, 104, 32, 102, 108, 97, 114, 101, 115, 32, 117, 112, 46, 46, 46, 0 }; +const uint8_t msgtxt_53[] = { +46, 46, 46, 97, 110, 100, 32, 116, 104, 101, 110, 32, 103, 111, 101, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_54[] = { +73, 116, 115, 32, 103, 101, 116, 116, 105, 110, 103, 0 }; +const uint8_t msgtxt_55[] = { +83, 117, 110, 115, 101, 116, 33, 0 }; +const uint8_t msgtxt_56[] = { +73, 32, 102, 101, 101, 108, 32, 114, 101, 102, 114, 101, 115, 104, 101, 100, 0 }; +const uint8_t msgtxt_57[] = { +78, 105, 103, 104, 116, 115, 32, 97, 114, 101, 32, 99, 111, 108, 100, 33, 32, 73, 32, 99, 97, 117, 103, 104, 116, 32, 80, 110, 101, 117, 109, 111, 110, 105, 97, 0 }; +const uint8_t msgtxt_58[] = { +84, 114, 121, 58, 32, 83, 76, 69, 69, 80, 0 }; +const uint8_t msgtxt_59[] = { +105, 116, 32, 119, 111, 114, 107, 101, 100, 33, 0 }; +const uint8_t msgtxt_60[] = { +105, 116, 115, 32, 103, 111, 110, 101, 0 }; +const uint8_t msgtxt_61[] = { +115, 110, 97, 107, 101, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_62[] = { +84, 104, 97, 116, 32, 102, 101, 108, 116, 32, 103, 111, 111, 100, 33, 0 }; +const uint8_t msgtxt_63[] = { +84, 111, 111, 32, 98, 105, 103, 33, 0 }; +const uint8_t msgtxt_64[] = { +105, 116, 115, 32, 108, 111, 99, 107, 101, 100, 33, 0 }; +const uint8_t msgtxt_65[] = { +71, 111, 111, 100, 32, 77, 111, 114, 110, 105, 110, 103, 0 }; +const uint8_t msgtxt_66[] = { +71, 111, 111, 100, 32, 110, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_67[] = { +73, 116, 115, 32, 102, 105, 114, 101, 112, 114, 111, 111, 102, 0 }; +const uint8_t msgtxt_68[] = { +72, 101, 32, 119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 0 }; +const uint8_t msgtxt_69[] = { +108, 101, 102, 116, 33, 0 }; +const uint8_t msgtxt_70[] = { +100, 97, 114, 107, 33, 0 }; +const uint8_t msgtxt_71[] = { +84, 104, 114, 117, 32, 116, 104, 101, 32, 72, 97, 116, 33, 0 }; +const uint8_t msgtxt_72[] = { +73, 39, 109, 32, 115, 110, 97, 107, 101, 32, 98, 105, 116, 0 }; +const uint8_t msgtxt_73[] = { +73, 39, 109, 32, 110, 111, 116, 32, 65, 108, 105, 99, 101, 33, 0 }; +const uint8_t msgtxt_74[] = { +72, 101, 32, 98, 117, 99, 107, 115, 44, 32, 73, 39, 109, 32, 116, 104, 114, 111, 119, 110, 0 }; +const uint8_t msgtxt_75[] = { +87, 104, 111, 111, 115, 104, 33, 0 }; +const uint8_t msgtxt_76[] = { +84, 79, 79, 32, 67, 76, 79, 83, 69, 33, 32, 80, 105, 101, 99, 101, 115, 32, 111, 102, 32, 109, 101, 32, 114, 97, 105, 110, 32, 100, 111, 119, 110, 32, 102, 111, 114, 32, 100, 97, 121, 115, 33, 0 }; +const uint8_t msgtxt_77[] = { +66, 111, 111, 109, 33, 0 }; +const uint8_t msgtxt_78[] = { +46, 46, 46, 32, 46, 46, 46, 46, 32, 46, 45, 32, 32, 45, 46, 45, 32, 32, 46, 32, 32, 45, 32, 45, 45, 45, 32, 32, 46, 45, 45, 46, 32, 32, 46, 45, 45, 46, 32, 32, 46, 32, 32, 46, 45, 46, 0 }; +const uint8_t msgtxt_79[] = { +83, 80, 65, 82, 75, 33, 32, 42, 32, 42, 32, 42, 32, 42, 0 }; +const uint8_t msgtxt_80[] = { +67, 108, 105, 99, 107, 0 }; +const uint8_t msgtxt_81[] = { +73, 115, 32, 104, 101, 32, 97, 32, 103, 104, 111, 115, 116, 63, 32, 65, 110, 121, 119, 97, 121, 32, 119, 114, 111, 110, 103, 32, 105, 100, 101, 97, 46, 0 }; +const uint8_t msgtxt_82[] = { +84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 32, 97, 32, 107, 101, 121, 104, 111, 108, 101, 33, 0 }; +const uint8_t msgtxt_83[] = { +109, 97, 115, 107, 105, 110, 103, 32, 116, 97, 112, 101, 0 }; +const uint8_t msgtxt_84[] = { +70, 108, 111, 111, 114, 98, 111, 97, 114, 100, 115, 32, 115, 117, 114, 101, 32, 97, 114, 101, 32, 99, 114, 101, 97, 107, 121, 0 }; +const uint8_t msgtxt_85[] = { +76, 111, 111, 115, 101, 32, 112, 108, 97, 110, 107, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_86[] = { +115, 97, 108, 116, 32, 112, 101, 116, 101, 114, 0 }; +const uint8_t msgtxt_87[] = { +73, 32, 119, 111, 110, 32, 97, 32, 112, 114, 105, 122, 101, 33, 0 }; +const uint8_t msgtxt_88[] = { +114, 101, 97, 99, 104, 32, 97, 32, 110, 97, 105, 108, 0 }; +const uint8_t msgtxt_89[] = { +109, 97, 121, 32, 110, 101, 101, 100, 32, 116, 111, 32, 115, 97, 121, 32, 97, 32, 109, 97, 103, 105, 99, 32, 119, 111, 114, 100, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_90[] = { +97, 102, 116, 101, 114, 32, 97, 32, 108, 111, 110, 103, 32, 114, 105, 100, 101, 0 }; +const uint8_t msgtxt_91[] = { +104, 101, 32, 114, 105, 100, 101, 115, 32, 111, 102, 102, 32, 119, 105, 116, 104, 111, 117, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_92[] = { +71, 101, 114, 111, 110, 105, 109, 111, 32, 115, 97, 121, 115, 58, 32, 34, 73, 116, 115, 32, 101, 97, 115, 121, 33, 32, 72, 97, 112, 112, 121, 32, 76, 97, 110, 100, 105, 110, 103, 115, 33, 34, 0 }; +const uint8_t msgtxt_93[] = { +105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 0 }; +const uint8_t msgtxt_94[] = { +114, 111, 116, 116, 101, 110, 32, 101, 103, 103, 115, 0 }; +const uint8_t msgtxt_95[] = { +46, 0 }; +const uint8_t msgtxt_96[] = { +105, 110, 32, 115, 97, 108, 111, 111, 110, 0 }; +const uint8_t msgtxt_97[] = { +115, 99, 97, 114, 101, 100, 32, 116, 104, 101, 109, 32, 111, 102, 102, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, + msgtxt_97, +}; + + +const uint8_t status[] = { +/* AUTO 3 */ + 142, 3, + 13, 9, 0, 9, 0, 26, + 36, 72, 76, +/* AUTO 100 */ + 175, + 2, 70, 3, 9, 0, 70, + 59, 76, 10, 147, +/* AUTO 100 */ + 179, + 9, 1, 0, 0, 0, 2, 0, 12, + 79, 73, 81, 79, +/* AUTO 0 */ + 198, + 0, 6, + 81, 3, 4, +/* AUTO 0 */ + 211, + 0, 1, 0, 25, 0, 3, 0, 170, + 58, 79, 81, 79, +/* AUTO 0 */ + 207, + 0, 7, 0, 24, 0, 11, + 81, 54, 80, 54, +/* AUTO 0 */ + 206, + 0, 1, 0, 1, 0, 1, + 79, 87, 54, +/* AUTO 100 */ + 171, + 0, 1, 0, 7, + 82, 81, 73, 77, +/* AUTO 0 */ + 205, + 15, 25, 9, 15, 16, 0, + 104, 120, +/* AUTO 0 */ + 207, + 15, 0, 0, 17, 9, 17, + 105, 56, 76, 58, +/* AUTO 0 */ + 207, + 0, 7, 0, 3, 0, 3, + 81, 81, 77, 81, +/* AUTO 0 */ + 201, + 4, 10, 9, 17, + 57, 76, +/* AUTO 100 */ + 180, + 8, 17, 14, 70, 4, 11, 12, 9, 0, 70, + 53, +/* AUTO 100 */ + 180, + 8, 17, 7, 11, 14, 70, 0, 70, 0, 11, + 62, +/* AUTO 20 */ + 136, 20, + 16, 225, 0, 6, + 58, +/* AUTO 0 */ +/* AUTO 20 */ + 137, 20, + 0, 3, 9, 12, + 81, 73, +/* AUTO 0 */ + 206, + 15, 0, 0, 23, 0, 11, + 28, 29, 62, +/* AUTO 0 */ + 215, + 15, 0, 0, 30, 0, 4, 0, 10, 0, 4, + 79, 81, 79, 81, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* AUTO 100 */ + 172, + 9, 17, 13, 70, 0, 70, + 59, +/* AUTO 100 */ + 170, + 13, 23, 0, 4, + 81, 77, 73, +/* AUTO 0 */ + 201, + 15, 0, 0, 23, + 59, 70, +/* AUTO 0 */ + 196, + 0, 4, + 81, +/* AUTO 4 */ + 133, 4, + 14, 24, + 50, 51, +/* AUTO 100 */ + 175, + 8, 18, 0, 18, 0, 6, + 60, 81, 77, 73, +/* AUTO 0 */ + 204, + 15, 0, 0, 14, 0, 42, + 72, +/* AUTO 0 */ + 196, + 0, 6, + 81, +/* AUTO 100 */ + 170, + 1, 61, 1, 9, + 127, 126, 61, +/* AUTO 0 */ +/* AUTO 15 */ + 142, 15, + 4, 2, 14, 71, 13, 70, + 41, 10, 146, +/* AUTO 100 */ + 172, + 1, 36, 6, 35, 0, 36, + 55, +/* AUTO 100 */ + 174, + 8, 16, 0, 16, 0, 9, + 60, 59, 76, +/* AUTO 0 */ +/* AUTO 100 */ + 165, + 1, 45, + 122, 61, +/* AUTO 0 */ +/* AUTO 100 */ + 168, + 4, 38, 0, 8, + 58, +/* AUTO 100 */ + 168, + 8, 8, 0, 9, + 58, +/* AUTO 100 */ + 174, + 8, 9, 0, 9, 0, 2, + 60, 73, 81, +/* AUTO 0 */ + 199, + 0, 2, + 13, 78, 14, 81, +/* AUTO 0 */ + 194, + 78, 16, 65, +/* AUTO 100 */ + 164, + 8, 8, + 63, +/* AUTO 100 */ + 165, + 0, 2, + 81, 73, +/* AUTO 0 */ + 205, + 8, 6, 0, 3, 0, 6, + 83, 60, +/* AUTO 0 */ + 205, + 8, 2, 0, 3, 0, 2, + 82, 60, +/* AUTO 0 */ + 205, + 8, 3, 0, 10, 0, 3, + 82, 60, +/* AUTO 0 */ + 205, + 8, 5, 0, 1, 0, 5, + 82, 60, +/* AUTO 0 */ + 196, + 0, 2, + 81, +}; +const uint8_t actions[] = { +/* MIX FUSE */ + 0, 40, 100, + 48, +/* GO SLEE */ + 0, 1, 76, + 108, +/* SAVE GAME */ + 15, 30, 7, + 0, 2, 0, 2, 0, 2, + 81, 83, 81, 71, +/* QUIT ANY */ + 9, 31, 0, + 0, 8, 0, 9, + 58, 58, +/* DIG ANY */ + 5, 38, 0, + 6, 7, + 6, 5, +/* DIG MANU */ + 18, 38, 10, + 1, 7, 2, 6, 0, 8, 14, 8, + 7, 10, 53, +/* GET MANU */ + 15, 10, 10, + 2, 6, 0, 21, 0, 6, + 9, 1, 52, 58, +/* GO MOUN */ + 0, 1, 107, + 48, +/* SMEL SULF */ + 6, 43, 15, + 3, 10, + 1, 12, 144, +/* MIX ANY */ + 23, 40, 0, + 3, 8, 3, 10, 3, 11, 0, 8, 0, 10, + 1, 73, 59, 59, +/* AUTO 0 */ + 201, + 0, 11, 0, 12, + 59, 53, +/* AUTO 0 */ + 200, + 15, 80, 0, 3, + 58, +/* GO RAVI */ + 9, 1, 103, + 4, 8, 9, 10, + 6, 15, +/* GO RAVI */ + 14, 1, 103, + 4, 8, 8, 10, 0, 10, + 1, 54, 70, +/* BURN ANY */ + 23, 46, 0, + 4, 8, 9, 10, 0, 10, 3, 14, 0, 18, + 1, 17, 58, 58, +/* BREA MIRR */ + 6, 73, 21, + 2, 15, + 19, 18, 61, +/* LOOK MIRR */ + 5, 25, 21, + 2, 15, + 1, 37, +/* SAY HOW */ + 11, 33, 117, + 2, 75, 0, 30, + 48, 142, 54, 73, +/* AUTO 0 */ + 201, + 15, 100, 0, 3, + 76, 58, +/* GO HOLE */ + 10, 1, 61, + 2, 18, 0, 12, + 1, 54, 76, +/* LOOK COMP */ + 10, 25, 22, + 3, 19, 3, 20, + 1, 21, 22, +/* GO JAIL */ + 9, 1, 43, + 2, 2, 9, 11, + 6, 23, +/* HIT GHOS */ + 5, 61, 26, + 2, 23, + 6, 30, +/* CLAP ANY */ + 23, 66, 0, + 2, 23, 0, 12, 0, 23, 0, 24, 0, 2, + 58, 72, 58, 31, +/* GET KEY */ + 8, 10, 31, + 2, 24, 5, 37, + 32, +/* GO JAIL */ + 18, 1, 43, + 2, 2, 8, 11, 0, 13, 13, 56, + 1, 54, 76, +/* PLAY ANY */ + 11, 64, 0, + 2, 24, 9, 13, + 1, 33, 10, 34, +/* PLAY ANY */ + 9, 64, 0, + 2, 24, 8, 13, + 1, 37, +/* OPEN DOOR */ + 9, 50, 65, + 2, 2, 9, 11, + 24, 25, +/* WITH HORS */ + 19, 58, 23, + 2, 2, 9, 11, 3, 20, 0, 11, + 73, 26, 58, 109, +/* AUTO 0 */ + 200, + 15, 30, 0, 2, + 58, +/* HIT BELL */ + 19, 61, 25, + 3, 22, 4, 27, 0, 43, 14, 43, + 125, 2, 10, 53, +/* WITH ANY */ + 9, 58, 0, + 2, 2, 9, 11, + 84, 27, +/* OPEN PIAN */ + 19, 50, 87, + 2, 24, 0, 13, 0, 25, 9, 13, + 10, 35, 58, 53, +/* BURN CAND */ + 23, 46, 34, + 3, 26, 3, 14, 0, 26, 0, 9, 0, 18, + 1, 72, 76, 58, +/* UNLI CAND */ + 14, 69, 34, + 3, 9, 0, 26, 0, 9, + 1, 72, 76, +/* LIST ANY */ + 4, 71, 0, + 2, 23, + 37, +/* HIT BELL */ + 7, 61, 25, + 3, 22, + 1, 28, 50, 51, +/* LOAD DERR */ + 5, 56, 39, + 3, 28, + 1, 39, +/* GO STOR */ + 10, 1, 42, + 2, 32, 0, 15, + 1, 54, 76, +/* READ SIGN */ + 5, 68, 45, + 3, 33, + 1, 40, +/* OPEN DOOR */ + 17, 50, 65, + 2, 31, 0, 31, 0, 29, 3, 37, + 1, 72, +/* GO DOOR */ + 10, 1, 65, + 2, 29, 0, 14, + 1, 54, 76, +/* OPEN DOOR */ + 4, 50, 65, + 2, 31, + 114, +/* SCOR ANY */ + 4, 32, 0, + 0, 9, + 58, +/* GO STAB */ + 10, 1, 9, + 2, 4, 0, 5, + 54, 76, 1, +/* GO SALO */ + 10, 1, 64, + 2, 3, 0, 11, + 54, 76, 1, +/* LOOK COMP */ + 6, 25, 22, + 3, 19, + 1, 21, 20, +/* GO BARB */ + 10, 1, 46, + 2, 1, 0, 16, + 54, 76, 1, +/* LIST ANY */ + 2, 71, 0, + 1, 41, 11, +/* WITH NAIL */ + 22, 58, 99, + 3, 60, 3, 62, 0, 62, 0, 60, 0, 59, + 59, 72, 1, +/* JUMP RAVI */ + 10, 76, 103, + 4, 8, 0, 18, + 1, 54, 76, +/* GO RAVI */ + 5, 1, 103, + 4, 18, + 6, 43, +/* JUMP RAVI */ + 10, 76, 103, + 4, 18, 0, 8, + 1, 54, 76, +/* OPEN KEG */ + 0, 50, 98, + 39, +/* SMEL MANU */ + 1, 43, 10, + 9, 6, +/* SHAK HAT */ + 19, 80, 68, + 3, 35, 14, 37, 0, 37, 0, 2, + 53, 58, 10, 35, +/* GET KEY */ + 9, 10, 31, + 3, 37, 0, 37, + 52, 1, +/* WEAR HAT */ + 10, 83, 68, + 1, 35, 0, 36, + 74, 1, 73, +/* AUTO 0 */ + 198, + 14, 37, + 33, 10, 44, +/* TAPE MIRR */ + 17, 82, 21, + 3, 38, 2, 15, 0, 15, 0, 39, + 1, 72, +/* BREA MIRR */ + 18, 73, 21, + 2, 39, 0, 39, 0, 17, 0, 18, + 1, 72, 53, +/* LOOK HAT */ + 6, 25, 68, + 3, 35, + 1, 2, 45, +/* GO STAL */ + 10, 1, 63, + 2, 5, 0, 19, + 1, 54, 76, +/* KNOC GHOS */ + 5, 111, 26, + 2, 23, + 6, 30, +/* KNOC PIAN */ + 5, 111, 87, + 2, 23, + 6, 30, +/* CROS ANY */ + 4, 88, 0, + 4, 8, + 48, +/* DIG ROOF */ + 19, 38, 44, + 3, 7, 4, 23, 14, 40, 0, 40, + 53, 7, 10, 73, +/* AUTO 0 */ + 200, + 15, 80, 0, 3, + 58, +/* READ MAP */ + 5, 68, 33, + 3, 25, + 1, 49, +/* GO TELE */ + 10, 1, 73, + 3, 41, 0, 24, + 1, 54, 76, +/* GO PAIN */ + 10, 1, 75, + 2, 16, 0, 25, + 1, 54, 76, +/* GET PAIN */ + 6, 10, 75, + 2, 16, + 42, 6, 113, +/* GO HORS */ + 10, 1, 23, + 2, 16, 0, 25, + 1, 54, 76, +/* BURN MATC */ + 14, 46, 18, + 3, 14, 0, 6, 0, 18, + 81, 73, 58, +/* AUTO 0 */ + 194, + 102, 88, 88, +/* AUTO 0 */ + 202, + 8, 15, 0, 14, + 57, 76, 58, +/* AUTO 0 */ + 198, + 8, 14, + 88, 88, 88, +/* AUTO 0 */ + 202, + 8, 14, 0, 14, + 60, 56, 76, +/* AUTO 0 */ + 197, + 0, 6, + 81, 103, +/* SAY GIDD */ + 10, 33, 55, + 4, 25, 9, 20, + 1, 85, 118, +/* GO MINE */ + 11, 1, 50, + 2, 13, 0, 21, + 56, 54, 76, 1, +/* SLEE ANY */ + 15, 89, 0, + 0, 7, 0, 175, 0, 7, + 81, 79, 81, 73, +/* AUTO 0 */ + 199, + 0, 17, + 116, 60, 88, 88, +/* AUTO 0 */ + 199, + 4, 26, + 115, 106, 57, 76, +/* AUTO 0 */ + 197, + 7, 26, + 107, 61, +/* AUTO 0 */ + 204, + 14, 0, 0, 0, 0, 11, + 62, +/* GET UP */ + 10, 10, 5, + 4, 26, 0, 27, + 1, 54, 76, +/* GO BED */ + 10, 1, 52, + 2, 43, 0, 26, + 1, 54, 76, +/* GO HOTE */ + 10, 1, 53, + 2, 44, 0, 28, + 1, 54, 76, +/* SHOO ANY */ + 15, 57, 0, + 3, 45, 3, 28, 0, 45, + 59, 38, 109, 110, +/* KILL SNAK */ + 4, 65, 77, + 3, 45, + 111, +/* DIG ANY */ + 4, 38, 0, + 3, 45, + 111, +/* DIG ANY */ + 13, 38, 0, + 5, 45, 0, 46, 4, 20, + 1, 53, +/* GO GRAV */ + 10, 1, 14, + 2, 46, 0, 29, + 1, 54, 76, +/* KILL WORM */ + 19, 65, 79, + 3, 48, 0, 48, 0, 49, 0, 5, + 1, 72, 112, 58, +/* GET KEY */ + 4, 10, 31, + 3, 50, + 6, +/* MOVE KEY */ + 6, 93, 31, + 14, 52, + 1, 11, 47, +/* CONN WIRE */ + 14, 90, 41, + 3, 51, 0, 51, 0, 52, + 1, 72, 73, +/* AUTO 0 */ + 200, + 15, 30, 0, 3, + 58, +/* MOVE SAFE */ + 21, 93, 20, + 0, 51, 2, 54, 14, 51, 14, 52, 14, 53, + 1, 53, +/* GET SAFE */ + 5, 10, 20, + 2, 54, + 6, 113, +/* OPEN SAFE */ + 5, 50, 20, + 2, 54, + 6, 114, +/* GET WIRE */ + 9, 10, 41, + 3, 53, 0, 53, + 52, 1, +/* MOVE SAFE */ + 4, 93, 20, + 2, 54, + 1, +/* MOVE PAIN */ + 4, 93, 75, + 2, 16, + 118, +/* DIG ANY */ + 19, 38, 0, + 4, 9, 14, 12, 14, 10, 0, 10, + 1, 53, 7, 10, +/* GO JAIL */ + 19, 1, 43, + 2, 2, 8, 11, 14, 56, 0, 13, + 50, 54, 76, 46, +/* PASS GO */ + 14, 97, 89, + 14, 56, 0, 56, 3, 57, + 53, 50, 109, +/* MOVE PIAN */ + 4, 93, 87, + 2, 24, + 1, +/* GET WIRE */ + 14, 10, 41, + 3, 51, 0, 51, 0, 53, + 59, 74, 1, +/* OPEN DOOR */ + 8, 50, 65, + 2, 2, 8, 11, + 39, +/* WAIT ANY */ + 19, 98, 0, + 0, 45, 0, 7, 0, 45, 0, 7, + 82, 81, 83, 81, +/* WEAR SPUR */ + 4, 83, 67, + 1, 34, + 1, +/* CLEA ANY */ + 0, 99, 0, + 48, +/* LOOK MATC */ + 15, 25, 18, + 3, 14, 0, 6, 0, 6, + 81, 78, 119, 81, +/* JUMP ANY */ + 0, 76, 0, + 42, +/* BURN MAP */ + 18, 46, 33, + 3, 14, 0, 18, 0, 25, 3, 25, + 58, 59, 1, +/* BURN MAP */ + 13, 46, 33, + 3, 9, 3, 25, 0, 25, + 1, 59, +/* BURN GUNP */ + 14, 46, 13, + 2, 12, 3, 9, 0, 12, + 1, 59, 125, +/* BURN GUNP */ + 19, 46, 13, + 2, 12, 3, 14, 0, 18, 0, 12, + 58, 1, 59, 125, +/* BURN GUNP */ + 11, 46, 13, + 3, 61, 3, 9, + 1, 127, 126, 61, +/* BURN GUNP */ + 11, 46, 13, + 3, 61, 3, 14, + 1, 127, 126, 61, +/* MOVE KEY */ + 11, 93, 31, + 13, 52, 2, 50, + 130, 129, 128, 73, +/* AUTO 0 */ + 199, + 3, 61, + 129, 127, 126, 61, +/* AUTO 0 */ + 202, + 3, 12, 0, 12, + 129, 125, 59, +/* SAY GIDD */ + 11, 33, 55, + 4, 25, 8, 20, + 1, 85, 73, 140, +/* AUTO 0 */ + 198, + 0, 20, + 124, 141, 60, +/* AUTO 0 */ + 202, + 0, 36, 0, 16, + 54, 76, 59, +/* GET INVE */ + 0, 10, 62, + 66, +/* INVE ANY */ + 0, 60, 0, + 66, +/* FIND ANY */ + 0, 85, 0, + 6, +/* WITH GUNP */ + 22, 58, 13, + 3, 60, 3, 12, 0, 60, 0, 12, 0, 61, + 59, 72, 1, +/* SAY ANY */ + 1, 33, 0, + 1, 85, +/* HELP ANY */ + 0, 29, 0, + 6, +/* BURN ANY */ + 4, 46, 0, + 3, 14, + 117, +/* BURN ANY */ + 4, 46, 0, + 3, 9, + 117, +/* BURN ANY */ + 1, 46, 0, + 6, 5, +/* SHOO ANY */ + 5, 57, 0, + 3, 28, + 1, 38, +/* SPUR ANY */ + 22, 115, 0, + 1, 34, 4, 25, 0, 30, 0, 58, 0, 19, + 124, 54, 62, +/* DROP ON */ + 1, 18, 19, + 0, 8, +/* PLAY PIAN */ + 5, 64, 87, + 2, 23, + 6, 30, +/* COVE SNAK */ + 11, 100, 77, + 2, 45, 3, 35, + 1, 121, 122, 61, +/* MOVE BED */ + 18, 93, 52, + 2, 43, 0, 38, 9, 19, 0, 19, + 1, 53, 58, +/* GO MIRR */ + 1, 1, 21, + 6, 123, +/* EMPT KEG */ + 18, 103, 98, + 3, 59, 0, 60, 0, 59, 0, 62, + 1, 72, 53, +/* EMPT KEG */ + 18, 103, 98, + 3, 61, 0, 60, 0, 61, 0, 12, + 1, 72, 53, +/* GET GUNP */ + 4, 10, 13, + 3, 12, + 48, +/* CLAP ANY */ + 0, 66, 0, + 1, +/* MOVE BED */ + 4, 93, 52, + 2, 43, + 1, +/* MOVE KEY */ + 10, 93, 31, + 3, 63, 13, 52, + 130, 80, 73, +/* AUTO 0 */ + 210, + 2, 61, 0, 41, 0, 64, 0, 52, + 72, 127, 59, +/* AUTO 0 */ + 200, + 2, 12, 0, 12, + 59, +/* AUTO 0 */ + 193, + 80, 76, +/* MOVE KEY */ + 9, 93, 31, + 3, 63, 14, 52, + 11, 47, +/* SHAK TOPP */ + 0, 80, 101, + 131, +/* BREA ANY */ + 0, 73, 0, + 6, +/* GO PAIN */ + 4, 1, 75, + 4, 25, + 139, +/* LOOK DOOR */ + 4, 25, 65, + 2, 2, + 132, +/* KNOC ANY */ + 2, 111, 0, + 1, 11, 47, +/* TAPE ANY */ + 5, 82, 0, + 3, 38, + 133, 27, +/* GO HOLE */ + 10, 1, 61, + 2, 58, 0, 31, + 1, 54, 76, +/* GO SHAC */ + 11, 1, 105, + 2, 65, 0, 33, + 1, 54, 76, 134, +/* LOOK FLOO */ + 10, 25, 108, + 4, 33, 14, 66, + 1, 2, 135, +/* GET PLAN */ + 14, 10, 109, + 14, 66, 0, 66, 0, 67, + 74, 53, 1, +/* GET PLAN */ + 9, 10, 109, + 3, 66, 0, 66, + 52, 1, +/* GO HOLE */ + 10, 1, 61, + 2, 67, 0, 34, + 1, 54, 76, +/* SMEL CRYS */ + 6, 43, 95, + 3, 8, + 1, 12, 136, +/* GO COUN */ + 10, 1, 119, + 2, 69, 0, 35, + 1, 54, 76, +/* GET UP */ + 10, 10, 5, + 4, 30, 0, 5, + 1, 54, 76, +/* DANC ANY */ + 15, 105, 0, + 2, 70, 14, 71, 0, 71, + 1, 74, 37, 137, +/* DANC ANY */ + 3, 105, 0, + 1, 37, 11, 47, +/* LOOK SAFE */ + 15, 25, 20, + 2, 64, 14, 72, 0, 72, + 1, 53, 7, 10, +/* SHOE ANY */ + 22, 110, 0, + 3, 62, 2, 16, 3, 20, 0, 20, 3, 73, + 1, 59, 73, +/* AUTO 0 */ + 201, + 0, 62, 0, 20, + 59, 58, +/* SHOE ANY */ + 9, 110, 0, + 2, 16, 3, 59, + 6, 138, +/* DIG ANY */ + 5, 38, 0, + 1, 7, + 7, 11, +/* GO TEEP */ + 10, 1, 115, + 2, 74, 0, 37, + 1, 54, 76, +/* HIT TOM */ + 15, 61, 116, + 3, 76, 14, 75, 0, 75, + 127, 127, 53, 109, +/* HIT TOM */ + 10, 61, 116, + 3, 76, 13, 75, + 0, 127, 127, +/* SHOE ANY */ + 6, 110, 0, + 2, 16, + 6, 10, 143, +/* HIT GHOS */ + 5, 61, 26, + 2, 75, + 6, 30, +/* FILL KEG */ + 5, 107, 98, + 3, 60, + 1, 24, +/* LOOK ANY */ + 3, 25, 0, + 1, 2, 11, 76, +/* MIX ANY */ + 2, 40, 0, + 6, 10, 143, +/* GO HORS */ + 4, 1, 23, + 4, 25, + 139, +/* SPUR ANY */ + 1, 115, 0, + 11, 47, +/* WITH ANY */ + 2, 58, 0, + 6, 84, 27, +/* GO MANU */ + 1, 1, 10, + 9, 6, +/* AUTO 0 */ + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *RUN */ + 210, 85, 78, 32, + /* *CLIM */ + 195, 76, 73, 77, + /* *ENTE */ + 197, 78, 84, 69, + /* *MOUN */ + 205, 79, 85, 78, + /* *RIDE */ + 210, 73, 68, 69, + /* . */ + 46, 32, 32, 32, + /* . */ + 46, 32, 32, 32, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *PICK */ + 208, 73, 67, 75, + /* *GRAB */ + 199, 82, 65, 66, + /* *COLL */ + 195, 79, 76, 76, + /* *LIFT */ + 204, 73, 70, 84, + /* . */ + 46, 32, 32, 32, + /* . */ + 46, 32, 32, 32, + /* DROP */ + 68, 82, 79, 80, + /* *PUT */ + 208, 85, 84, 32, + /* *THRO */ + 212, 72, 82, 79, + /* *LEAV */ + 204, 69, 65, 86, + /* *REMO */ + 210, 69, 77, 79, + /* *TOSS */ + 212, 79, 83, 83, + /* . */ + 46, 32, 32, 32, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *DESC */ + 196, 69, 83, 67, + /* *CHEC */ + 195, 72, 69, 67, + /* HELP */ + 72, 69, 76, 80, + /* SAVE */ + 83, 65, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* SCOR */ + 83, 67, 79, 82, + /* SAY */ + 83, 65, 89, 32, + /* *YELL */ + 217, 69, 76, 76, + /* *SCRE */ + 211, 67, 82, 69, + /* *WHIS */ + 215, 72, 73, 83, + /* *SING */ + 211, 73, 78, 71, + /* DIG */ + 68, 73, 71, 32, + /* *SHOV */ + 211, 72, 79, 86, + /* MIX */ + 77, 73, 88, 32, + /* *MAKE */ + 205, 65, 75, 69, + /* . */ + 46, 32, 32, 32, + /* SMEL */ + 83, 77, 69, 76, + /* *TAST */ + 212, 65, 83, 84, + /* *EAT */ + 197, 65, 84, 32, + /* BURN */ + 66, 85, 82, 78, + /* *IGNI */ + 201, 71, 78, 73, + /* *LIGH */ + 204, 73, 71, 72, + /* . */ + 46, 32, 32, 32, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* LOCK */ + 76, 79, 67, 75, + /* . */ + 46, 32, 32, 32, + /* CLOS */ + 67, 76, 79, 83, + /* *SHUT */ + 211, 72, 85, 84, + /* LOAD */ + 76, 79, 65, 68, + /* SHOO */ + 83, 72, 79, 79, + /* WITH */ + 87, 73, 84, 72, + /* *USE */ + 213, 83, 69, 32, + /* INVE */ + 73, 78, 86, 69, + /* HIT */ + 72, 73, 84, 32, + /* *RING */ + 210, 73, 78, 71, + /* *BEAT */ + 194, 69, 65, 84, + /* PLAY */ + 80, 76, 65, 89, + /* KILL */ + 75, 73, 76, 76, + /* CLAP */ + 67, 76, 65, 80, + /* *APPL */ + 193, 80, 80, 76, + /* READ */ + 82, 69, 65, 68, + /* UNLI */ + 85, 78, 76, 73, + /* *EXTI */ + 197, 88, 84, 73, + /* LIST */ + 76, 73, 83, 84, + /* *HEAR */ + 200, 69, 65, 82, + /* BREA */ + 66, 82, 69, 65, + /* *SMAS */ + 211, 77, 65, 83, + /* *BUST */ + 194, 85, 83, 84, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* CUT */ + 67, 85, 84, 32, + /* *SLIC */ + 211, 76, 73, 67, + /* SHAK */ + 83, 72, 65, 75, + /* *WAVE */ + 215, 65, 86, 69, + /* TAPE */ + 84, 65, 80, 69, + /* WEAR */ + 87, 69, 65, 82, + /* *PUTO */ + 208, 85, 84, 79, + /* FIND */ + 70, 73, 78, 68, + /* *LOCA */ + 204, 79, 67, 65, + /* *SEEK */ + 211, 69, 69, 75, + /* CROS */ + 67, 82, 79, 83, + /* SLEE */ + 83, 76, 69, 69, + /* CONN */ + 67, 79, 78, 78, + /* *SPLI */ + 211, 80, 76, 73, + /* *REPA */ + 210, 69, 80, 65, + /* MOVE */ + 77, 79, 86, 69, + /* *PUSH */ + 208, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* *TAP */ + 212, 65, 80, 32, + /* PASS */ + 80, 65, 83, 83, + /* WAIT */ + 87, 65, 73, 84, + /* CLEA */ + 67, 76, 69, 65, + /* COVE */ + 67, 79, 86, 69, + /* */ + 32, 32, 32, 32, + /* . */ + 46, 32, 32, 32, + /* EMPT */ + 69, 77, 80, 84, + /* *SPIL */ + 211, 80, 73, 76, + /* DANC */ + 68, 65, 78, 67, + /* */ + 32, 32, 32, 32, + /* FILL */ + 70, 73, 76, 76, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* SHOE */ + 83, 72, 79, 69, + /* KNOC */ + 75, 78, 79, 67, + /* *TOUC */ + 212, 79, 85, 67, + /* *FEEL */ + 198, 69, 69, 76, + /* *KISS */ + 203, 73, 83, 83, + /* SPUR */ + 83, 80, 85, 82, + /* *KICK */ + 203, 73, 67, 75, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* GAME */ + 71, 65, 77, 69, + /* AROU */ + 65, 82, 79, 85, + /* STAB */ + 83, 84, 65, 66, + /* MANU */ + 77, 65, 78, 85, + /* *PILE */ + 208, 73, 76, 69, + /* HILL */ + 72, 73, 76, 76, + /* GUNP */ + 71, 85, 78, 80, + /* GRAV */ + 71, 82, 65, 86, + /* SULF */ + 83, 85, 76, 70, + /* *POWD */ + 208, 79, 87, 68, + /* CHAR */ + 67, 72, 65, 82, + /* MATC */ + 77, 65, 84, 67, + /* ON */ + 79, 78, 32, 32, + /* SAFE */ + 83, 65, 70, 69, + /* MIRR */ + 77, 73, 82, 82, + /* COMP */ + 67, 79, 77, 80, + /* HORS */ + 72, 79, 82, 83, + /* *MAGN */ + 205, 65, 71, 78, + /* BELL */ + 66, 69, 76, 76, + /* GHOS */ + 71, 72, 79, 83, + /* *FIGU */ + 198, 73, 71, 85, + /* HAND */ + 72, 65, 78, 68, + /* *FEET */ + 198, 69, 69, 84, + /* HEAD */ + 72, 69, 65, 68, + /* KEY */ + 75, 69, 89, 32, + /* *KEYS */ + 203, 69, 89, 83, + /* MAP */ + 77, 65, 80, 32, + /* CAND */ + 67, 65, 78, 68, + /* *LIGH */ + 204, 73, 71, 72, + /* MUSI */ + 77, 85, 83, 73, + /* BULL */ + 66, 85, 76, 76, + /* STAB */ + 83, 84, 65, 66, + /* DERR */ + 68, 69, 82, 82, + /* *GUN */ + 199, 85, 78, 32, + /* WIRE */ + 87, 73, 82, 69, + /* STOR */ + 83, 84, 79, 82, + /* JAIL */ + 74, 65, 73, 76, + /* ROOF */ + 82, 79, 79, 70, + /* SIGN */ + 83, 73, 71, 78, + /* BARB */ + 66, 65, 82, 66, + /* TUMB */ + 84, 85, 77, 66, + /* *SAGE */ + 211, 65, 71, 69, + /* *BRUS */ + 194, 82, 85, 83, + /* MINE */ + 77, 73, 78, 69, + /* *ENTR */ + 197, 78, 84, 82, + /* BED */ + 66, 69, 68, 32, + /* HOTE */ + 72, 79, 84, 69, + /* ROOM */ + 82, 79, 79, 77, + /* GIDD */ + 71, 73, 68, 68, + /* *GITT */ + 199, 73, 84, 84, + /* *GIDY */ + 199, 73, 68, 89, + /* *GITY */ + 199, 73, 84, 89, + /* COIN */ + 67, 79, 73, 78, + /* TOWN */ + 84, 79, 87, 78, + /* HOLE */ + 72, 79, 76, 69, + /* INVE */ + 73, 78, 86, 69, + /* STAL */ + 83, 84, 65, 76, + /* SALO */ + 83, 65, 76, 79, + /* DOOR */ + 68, 79, 79, 82, + /* WIND */ + 87, 73, 78, 68, + /* SPUR */ + 83, 80, 85, 82, + /* HAT */ + 72, 65, 84, 32, + /* STRI */ + 83, 84, 82, 73, + /* TAPE */ + 84, 65, 80, 69, + /* *ROLL */ + 210, 79, 76, 76, + /* WALL */ + 87, 65, 76, 76, + /* TELE */ + 84, 69, 76, 69, + /* *OFFI */ + 207, 70, 70, 73, + /* PAIN */ + 80, 65, 73, 78, + /* SLEE */ + 83, 76, 69, 69, + /* SNAK */ + 83, 78, 65, 75, + /* *RATT */ + 210, 65, 84, 84, + /* WORM */ + 87, 79, 82, 77, + /* *SLIM */ + 211, 76, 73, 77, + /* SHOV */ + 83, 72, 79, 86, + /* BOX */ + 66, 79, 88, 32, + /* *CASH */ + 195, 65, 83, 72, + /* ROAD */ + 82, 79, 65, 68, + /* FORK */ + 70, 79, 82, 75, + /* VAIN */ + 86, 65, 73, 78, + /* PIAN */ + 80, 73, 65, 78, + /* $200 */ + 36, 50, 48, 48, + /* GO */ + 71, 79, 32, 32, + /* *BOAR */ + 194, 79, 65, 82, + /* PATH */ + 80, 65, 84, 72, + /* HELL */ + 72, 69, 76, 76, + /* HI */ + 72, 73, 32, 32, + /* FIEL */ + 70, 73, 69, 76, + /* CRYS */ + 67, 82, 89, 83, + /* GOLD */ + 71, 79, 76, 68, + /* *NUGG */ + 206, 85, 71, 71, + /* KEG */ + 75, 69, 71, 32, + /* NAIL */ + 78, 65, 73, 76, + /* FUSE */ + 70, 85, 83, 69, + /* TOPP */ + 84, 79, 80, 80, + /* LOBB */ + 76, 79, 66, 66, + /* RAVI */ + 82, 65, 86, 73, + /* *RIDG */ + 210, 73, 68, 71, + /* SHAC */ + 83, 72, 65, 67, + /* TRAI */ + 84, 82, 65, 73, + /* MOUN */ + 77, 79, 85, 78, + /* FLOO */ + 70, 76, 79, 79, + /* PLAN */ + 80, 76, 65, 78, + /* PELT */ + 80, 69, 76, 84, + /* CUP */ + 67, 85, 80, 32, + /* BAG */ + 66, 65, 71, 32, + /* *DUST */ + 196, 85, 83, 84, + /* HAMM */ + 72, 65, 77, 77, + /* TEEP */ + 84, 69, 69, 80, + /* TOM */ + 84, 79, 77, 32, + /* HOW */ + 72, 79, 87, 32, + /* NECK */ + 78, 69, 67, 75, + /* COUN */ + 67, 79, 85, 78, + 0, +}; +const uint8_t automap[] = { + /* STRI */ + 83, 84, 82, 73, + 0, + /* SHOV */ + 83, 72, 79, 86, + 7, + /* CRYS */ + 67, 82, 89, 83, + 8, + /* CAND */ + 67, 65, 78, 68, + 9, + /* SULF */ + 83, 85, 76, 70, + 10, + /* CHAR */ + 67, 72, 65, 82, + 11, + /* MATC */ + 77, 65, 84, 67, + 14, + /* COMP */ + 67, 79, 77, 80, + 19, + /* HORS */ + 72, 79, 82, 83, + 20, + /* MANU */ + 77, 65, 78, 85, + 21, + /* BELL */ + 66, 69, 76, 76, + 22, + /* MAP */ + 77, 65, 80, 32, + 25, + /* CAND */ + 67, 65, 78, 68, + 26, + /* BULL */ + 66, 85, 76, 76, + 27, + /* DERR */ + 68, 69, 82, 82, + 28, + /* SIGN */ + 83, 73, 71, 78, + 30, + /* SIGN */ + 83, 73, 71, 78, + 33, + /* SPUR */ + 83, 80, 85, 82, + 34, + /* HAT */ + 72, 65, 84, 32, + 35, + /* KEY */ + 75, 69, 89, 32, + 37, + /* TAPE */ + 84, 65, 80, 69, + 38, + /* GOLD */ + 71, 79, 76, 68, + 40, + /* MATC */ + 77, 65, 84, 67, + 42, + /* SNAK */ + 83, 78, 65, 75, + 45, + /* COIN */ + 67, 79, 73, 78, + 47, + /* WORM */ + 87, 79, 82, 77, + 48, + /* WORM */ + 87, 79, 82, 77, + 49, + /* WIRE */ + 87, 73, 82, 69, + 53, + /* BOX */ + 66, 79, 88, 32, + 55, + /* $200 */ + 36, 50, 48, 48, + 56, + /* GO */ + 71, 79, 32, 32, + 57, + /* KEG */ + 75, 69, 71, 32, + 59, + /* KEG */ + 75, 69, 71, 32, + 60, + /* KEG */ + 75, 69, 71, 32, + 61, + /* NAIL */ + 78, 65, 73, 76, + 62, + /* PLAN */ + 80, 76, 65, 78, + 66, + /* PELT */ + 80, 69, 76, 84, + 68, + /* CUP */ + 67, 85, 80, 32, + 71, + /* BAG */ + 66, 65, 71, 32, + 72, + /* HAMM */ + 72, 65, 77, 77, + 73, + /* TOM */ + 84, 79, 77, 32, + 76, + /* NECK */ + 78, 69, 67, 75, + 77, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv10.c b/Applications/games/adv10.c new file mode 100644 index 00000000..3fc8c8f0 --- /dev/null +++ b/Applications/games/adv10.c @@ -0,0 +1,3279 @@ +#define NUM_OBJ 58 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 1; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 34; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +66, 101, 97, 99, 104, 32, 98, 121, 32, 111, 99, 101, 97, 110, 0 }; +const uint8_t loctxt_2[] = { +66, 101, 97, 99, 104, 32, 98, 121, 32, 111, 99, 101, 97, 110, 44, 32, 97, 32, 99, 108, 105, 102, 102, 32, 116, 111, 119, 101, 114, 115, 32, 111, 118, 101, 114, 10, 119, 101, 115, 116, 32, 101, 110, 100, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 104, 111, 116, 32, 114, 111, 99, 107, 121, 32, 99, 108, 105, 102, 102, 10, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, 101, 32, 86, 111, 108, 99, 97, 110, 111, 0 }; +const uint8_t loctxt_4[] = { +66, 101, 97, 99, 104, 32, 98, 121, 32, 111, 99, 101, 97, 110, 0 }; +const uint8_t loctxt_5[] = { +115, 104, 97, 108, 108, 111, 119, 32, 116, 105, 100, 101, 112, 111, 111, 108, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 114, 105, 109, 32, 111, 102, 32, 97, 110, 32, 101, 120, 116, 105, 110, 99, 116, 32, 118, 111, 108, 99, 97, 110, 111, 0 }; +const uint8_t loctxt_7[] = { +108, 97, 114, 103, 101, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_8[] = { +118, 111, 108, 99, 97, 110, 111, 0 }; +const uint8_t loctxt_9[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 116, 104, 101, 32, 104, 101, 97, 100, 44, 32, 111, 102, 102, 115, 104, 111, 114, 101, 32, 73, 32, 115, 101, 101, 32, 97, 110, 32, 97, 116, 111, 108, 108, 0 }; +const uint8_t loctxt_11[] = { +100, 101, 101, 112, 32, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_12[] = { +108, 97, 107, 101, 46, 32, 84, 104, 101, 114, 101, 39, 115, 32, 115, 104, 111, 114, 101, 32, 116, 111, 32, 78, 111, 114, 116, 104, 44, 10, 83, 111, 117, 116, 104, 32, 38, 32, 69, 97, 115, 116, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 97, 98, 111, 118, 101, 32, 116, 104, 101, 32, 108, 97, 107, 101, 32, 98, 111, 116, 116, 111, 109, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 114, 97, 102, 116, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 97, 116, 111, 108, 108, 0 }; +const uint8_t loctxt_16[] = { +98, 101, 97, 99, 104, 32, 98, 121, 32, 111, 99, 101, 97, 110, 0 }; +const uint8_t loctxt_17[] = { +97, 110, 99, 105, 101, 110, 116, 32, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 119, 101, 115, 116, 32, 111, 102, 32, 108, 97, 107, 101, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 115, 101, 99, 108, 117, 100, 101, 100, 32, 108, 101, 100, 103, 101, 10, 111, 110, 32, 118, 111, 108, 99, 97, 110, 111, 39, 115, 32, 119, 97, 108, 108, 0 }; +const uint8_t loctxt_19[] = { +116, 111, 112, 32, 111, 102, 32, 97, 32, 112, 97, 108, 109, 32, 116, 114, 101, 101, 0 }; +const uint8_t loctxt_20[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_21[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_22[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_23[] = { +100, 105, 109, 108, 121, 32, 108, 105, 116, 32, 114, 111, 99, 107, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_24[] = { +114, 111, 99, 107, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_25[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_26[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_27[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_28[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_29[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_30[] = { +115, 109, 97, 108, 108, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_31[] = { +115, 109, 97, 108, 108, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 115, 97, 110, 100, 121, 32, 99, 108, 105, 102, 102, 32, 111, 117, 116, 115, 105, 100, 101, 10, 116, 104, 101, 32, 118, 111, 108, 99, 97, 110, 111, 0 }; +const uint8_t loctxt_33[] = { +109, 97, 122, 101, 32, 111, 102, 32, 99, 97, 118, 101, 115, 0 }; +const uint8_t loctxt_34[] = { +108, 111, 116, 32, 111, 102, 32, 116, 114, 111, 117, 98, 108, 101, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 7, 4, 2, 0, 5 } }, + { loctxt_2, { 0, 0, 1, 0, 0, 0 } }, + { loctxt_3, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 1, 0, 0 } }, + { loctxt_5, { 0, 1, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 0, 7 } }, + { loctxt_7, { 1, 0, 0, 0, 0, 0 } }, + { loctxt_8, { 0, 0, 0, 0, 6, 0 } }, + { loctxt_9, { 22, 17, 20, 21, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 0, 0, 1 } }, + { loctxt_11, { 0, 0, 8, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 16, 0, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 12, 0, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 4 } }, + { loctxt_20, { 0, 0, 0, 9, 0, 0 } }, + { loctxt_21, { 0, 0, 9, 0, 0, 0 } }, + { loctxt_22, { 0, 9, 23, 29, 0, 0 } }, + { loctxt_23, { 0, 24, 0, 22, 0, 0 } }, + { loctxt_24, { 23, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 25, 27, 26, 27, 0, 0 } }, + { loctxt_26, { 25, 26, 25, 27, 0, 0 } }, + { loctxt_27, { 28, 26, 27, 25, 0, 0 } }, + { loctxt_28, { 28, 26, 25, 33, 0, 0 } }, + { loctxt_29, { 0, 0, 22, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 18, 0, 0, 0 } }, + { loctxt_33, { 28, 27, 26, 25, 0, 17 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 1, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11, + 8, + 0, + 11, + 0, + 3, + 5, + 255, + 11, + 1, + 1, + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 11, + 0, + 8, + 0, + 0, + 0, + 0, + 0, + 16, + 17, + 0, + 0, + 19, + 17, + 0, + 0, + 20, + 21, + 11, + 28, + 28, + 29, + 29, + 18, + 17, + 0, + 0, + 24, + 0, +}; + + +const uint8_t objtxt_0[] = { +0 }; +const uint8_t objtxt_1[] = { +83, 97, 110, 100, 0 }; +const uint8_t objtxt_2[] = { +46, 0 }; +const uint8_t objtxt_3[] = { +80, 97, 108, 109, 32, 116, 114, 101, 101, 115, 0 }; +const uint8_t objtxt_4[] = { +83, 117, 114, 108, 121, 32, 112, 105, 114, 97, 116, 101, 32, 119, 97, 105, 116, 105, 110, 103, 32, 102, 111, 114, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t objtxt_5[] = { +80, 105, 114, 97, 116, 101, 32, 115, 104, 105, 112, 0 }; +const uint8_t objtxt_6[] = { +66, 111, 116, 116, 108, 101, 32, 111, 102, 32, 82, 117, 109, 0 }; +const uint8_t objtxt_7[] = { +69, 109, 112, 116, 121, 32, 98, 111, 116, 116, 108, 101, 0 }; +const uint8_t objtxt_8[] = { +66, 111, 116, 116, 108, 101, 32, 111, 102, 32, 115, 101, 97, 119, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_9[] = { +71, 108, 111, 119, 105, 110, 103, 32, 112, 108, 97, 115, 116, 105, 99, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_10[] = { +80, 105, 108, 101, 32, 111, 102, 32, 115, 97, 108, 116, 0 }; +const uint8_t objtxt_11[] = { +80, 117, 100, 100, 108, 101, 0 }; +const uint8_t objtxt_12[] = { +70, 105, 115, 104, 32, 98, 111, 110, 101, 115, 0 }; +const uint8_t objtxt_13[] = { +76, 97, 107, 101, 0 }; +const uint8_t objtxt_14[] = { +66, 111, 116, 116, 108, 101, 32, 102, 114, 101, 115, 104, 119, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_15[] = { +78, 97, 116, 117, 114, 97, 108, 32, 115, 116, 111, 110, 101, 32, 98, 97, 115, 105, 110, 0 }; +const uint8_t objtxt_16[] = { +119, 105, 116, 104, 32, 114, 117, 109, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t objtxt_17[] = { +67, 114, 101, 118, 105, 99, 101, 0 }; +const uint8_t objtxt_18[] = { +87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_19[] = { +87, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_20[] = { +66, 101, 97, 114, 0 }; +const uint8_t objtxt_21[] = { +76, 97, 114, 103, 101, 32, 115, 116, 111, 110, 101, 32, 104, 101, 97, 100, 0 }; +const uint8_t objtxt_22[] = { +69, 100, 103, 101, 32, 111, 102, 32, 105, 109, 112, 101, 110, 101, 116, 114, 97, 98, 108, 101, 32, 106, 117, 110, 103, 108, 101, 0 }; +const uint8_t objtxt_23[] = { +80, 105, 101, 99, 101, 115, 32, 111, 102, 32, 112, 108, 105, 97, 98, 108, 101, 32, 118, 105, 110, 101, 115, 0 }; +const uint8_t objtxt_24[] = { +76, 97, 114, 103, 101, 32, 107, 110, 105, 102, 101, 0 }; +const uint8_t objtxt_25[] = { +80, 97, 108, 109, 32, 108, 111, 103, 0 }; +const uint8_t objtxt_26[] = { +83, 109, 97, 108, 108, 32, 112, 108, 97, 115, 116, 105, 99, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_27[] = { +69, 120, 116, 105, 110, 99, 116, 32, 118, 111, 108, 99, 97, 110, 111, 0 }; +const uint8_t objtxt_28[] = { +80, 97, 108, 109, 32, 108, 111, 103, 0 }; +const uint8_t objtxt_29[] = { +82, 97, 102, 116, 32, 111, 102, 32, 118, 105, 110, 101, 115, 32, 38, 32, 108, 111, 103, 115, 0 }; +const uint8_t objtxt_30[] = { +67, 114, 101, 118, 105, 99, 101, 0 }; +const uint8_t objtxt_31[] = { +87, 73, 78, 68, 45, 45, 45, 45, 45, 62, 0 }; +const uint8_t objtxt_32[] = { +67, 97, 118, 101, 0 }; +const uint8_t objtxt_33[] = { +83, 119, 101, 97, 116, 0 }; +const uint8_t objtxt_34[] = { +79, 99, 101, 97, 110, 0 }; +const uint8_t objtxt_35[] = { +66, 101, 97, 99, 104, 0 }; +const uint8_t objtxt_36[] = { +84, 105, 100, 101, 112, 111, 111, 108, 0 }; +const uint8_t objtxt_37[] = { +65, 116, 111, 108, 108, 0 }; +const uint8_t objtxt_38[] = { +67, 97, 118, 101, 32, 105, 110, 32, 99, 108, 105, 102, 102, 0 }; +const uint8_t objtxt_39[] = { +80, 114, 105, 109, 105, 116, 118, 101, 32, 99, 97, 118, 101, 32, 100, 114, 97, 119, 105, 110, 103, 115, 0 }; +const uint8_t objtxt_40[] = { +78, 111, 116, 101, 0 }; +const uint8_t objtxt_41[] = { +66, 97, 110, 100, 97, 110, 110, 97, 0 }; +const uint8_t objtxt_42[] = { +67, 111, 99, 111, 110, 117, 116, 115, 0 }; +const uint8_t objtxt_43[] = { +83, 116, 97, 108, 97, 99, 116, 105, 116, 101, 32, 105, 110, 32, 114, 111, 111, 102, 0 }; +const uint8_t objtxt_44[] = { +78, 101, 97, 110, 100, 101, 114, 116, 104, 97, 108, 0 }; +const uint8_t objtxt_45[] = { +67, 114, 101, 118, 105, 99, 101, 32, 105, 110, 32, 114, 111, 99, 107, 0 }; +const uint8_t objtxt_46[] = { +83, 101, 97, 108, 101, 100, 32, 100, 105, 115, 112, 108, 97, 121, 32, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_47[] = { +83, 101, 97, 108, 101, 100, 32, 100, 105, 115, 112, 108, 97, 121, 32, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_48[] = { +68, 97, 114, 107, 32, 111, 112, 101, 110, 105, 110, 103, 0 }; +const uint8_t objtxt_49[] = { +79, 112, 101, 110, 105, 110, 103, 0 }; +const uint8_t objtxt_50[] = { +80, 105, 108, 101, 32, 98, 97, 116, 32, 103, 117, 97, 110, 111, 0 }; +const uint8_t objtxt_51[] = { +70, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_52[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_53[] = { +78, 97, 114, 114, 111, 119, 32, 99, 114, 101, 118, 105, 99, 101, 0 }; +const uint8_t objtxt_54[] = { +68, 97, 114, 107, 32, 111, 112, 101, 110, 105, 110, 103, 32, 105, 110, 32, 114, 111, 111, 102, 0 }; +const uint8_t objtxt_55[] = { +50, 32, 99, 101, 110, 116, 105, 109, 101, 116, 101, 114, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 115, 104, 105, 110, 121, 32, 119, 105, 114, 101, 0 }; +const uint8_t objtxt_56[] = { +79, 112, 101, 110, 32, 100, 105, 115, 112, 108, 97, 121, 32, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_57[] = { +65, 108, 105, 101, 110, 32, 109, 97, 99, 104, 105, 110, 101, 114, 121, 0 }; +const uint8_t objtxt_58[] = { +67, 111, 99, 111, 110, 117, 116, 32, 109, 101, 97, 116, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +79, 75, 0 }; +const uint8_t msgtxt_2[] = { +83, 111, 97, 107, 115, 32, 105, 110, 116, 111, 32, 103, 114, 111, 117, 110, 100, 46, 0 }; +const uint8_t msgtxt_3[] = { +69, 109, 112, 116, 121, 63, 0 }; +const uint8_t msgtxt_4[] = { +71, 101, 116, 32, 108, 105, 113, 117, 105, 100, 0 }; +const uint8_t msgtxt_5[] = { +71, 101, 116, 116, 105, 110, 103, 32, 100, 97, 114, 107, 0 }; +const uint8_t msgtxt_6[] = { +83, 117, 110, 115, 101, 116, 0 }; +const uint8_t msgtxt_7[] = { +73, 32, 104, 101, 97, 114, 32, 99, 97, 110, 110, 111, 110, 32, 111, 102, 102, 115, 104, 111, 114, 101, 0 }; +const uint8_t msgtxt_8[] = { +77, 121, 32, 98, 111, 110, 101, 115, 32, 97, 99, 104, 101, 0 }; +const uint8_t msgtxt_9[] = { +72, 117, 114, 114, 105, 99, 97, 110, 101, 32, 65, 108, 101, 120, 105, 115, 32, 104, 105, 116, 115, 32, 105, 115, 108, 97, 110, 100, 0 }; +const uint8_t msgtxt_10[] = { +83, 116, 111, 114, 109, 32, 112, 97, 115, 115, 101, 100, 0 }; +const uint8_t msgtxt_11[] = { +115, 116, 111, 114, 109, 32, 108, 105, 102, 116, 115, 32, 109, 101, 32, 111, 117, 116, 32, 116, 111, 32, 115, 101, 97, 0 }; +const uint8_t msgtxt_12[] = { +73, 39, 118, 101, 32, 98, 101, 101, 110, 32, 104, 101, 114, 101, 32, 0 }; +const uint8_t msgtxt_13[] = { +109, 111, 118, 101, 115, 0 }; +const uint8_t msgtxt_14[] = { +66, 101, 97, 114, 32, 115, 109, 101, 108, 108, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 111, 110, 32, 109, 101, 44, 32, 108, 105, 99, 107, 115, 32, 109, 101, 44, 0 }; +const uint8_t msgtxt_15[] = { +73, 39, 109, 32, 97, 116, 116, 97, 99, 107, 101, 100, 32, 98, 121, 32, 119, 105, 108, 100, 32, 97, 110, 105, 109, 97, 108, 0 }; +const uint8_t msgtxt_16[] = { +98, 101, 97, 114, 32, 101, 97, 116, 115, 0 }; +const uint8_t msgtxt_17[] = { +115, 97, 108, 116, 0 }; +const uint8_t msgtxt_18[] = { +109, 101, 0 }; +const uint8_t msgtxt_19[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_20[] = { +78, 111, 116, 32, 116, 105, 108, 108, 0 }; +const uint8_t msgtxt_21[] = { +73, 32, 99, 97, 110, 0 }; +const uint8_t msgtxt_22[] = { +103, 111, 32, 116, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_23[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_24[] = { +97, 32, 98, 101, 97, 114, 0 }; +const uint8_t msgtxt_25[] = { +97, 115, 104, 32, 105, 115, 32, 108, 111, 111, 115, 101, 44, 32, 73, 32, 115, 108, 105, 100, 101, 32, 100, 111, 119, 110, 0 }; +const uint8_t msgtxt_26[] = { +73, 32, 115, 104, 97, 119, 100, 97, 32, 112, 105, 99, 107, 101, 100, 32, 97, 110, 111, 116, 104, 101, 114, 32, 112, 114, 111, 102, 102, 101, 115, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_27[] = { +84, 114, 121, 0 }; +const uint8_t msgtxt_28[] = { +70, 97, 114, 32, 98, 101, 108, 111, 119, 0 }; +const uint8_t msgtxt_29[] = { +97, 32, 99, 97, 118, 101, 0 }; +const uint8_t msgtxt_30[] = { +97, 116, 32, 115, 101, 97, 32, 108, 101, 118, 101, 108, 0 }; +const uint8_t msgtxt_31[] = { +110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_32[] = { +115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_33[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 49, 48, 58, 32, 34, 83, 65, 86, 65, 71, 69, 32, 73, 83, 76, 65, 78, 68, 44, 32, 80, 97, 114, 116, 32, 73, 34, 10, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 44, 32, 100, 101, 100, 105, 99, 97, 116, 101, 100, 58, 32, 68, 101, 110, 110, 105, 115, 32, 66, 114, 101, 110, 116, 46, 10, 0 }; +const uint8_t msgtxt_34[] = { +115, 104, 97, 114, 107, 115, 0 }; +const uint8_t msgtxt_35[] = { +116, 114, 101, 101, 115, 44, 32, 119, 105, 108, 100, 32, 97, 110, 105, 109, 97, 108, 115, 44, 0 }; +const uint8_t msgtxt_36[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_37[] = { +32, 100, 111, 101, 115, 110, 39, 116, 32, 119, 111, 114, 107, 0 }; +const uint8_t msgtxt_38[] = { +73, 32, 100, 114, 111, 119, 110, 0 }; +const uint8_t msgtxt_39[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_40[] = { +116, 111, 111, 32, 104, 101, 97, 118, 121, 32, 111, 114, 32, 97, 119, 107, 119, 97, 114, 100, 0 }; +const uint8_t msgtxt_41[] = { +73, 32, 98, 114, 101, 97, 116, 104, 101, 100, 33, 0 }; +const uint8_t msgtxt_42[] = { +118, 105, 110, 101, 115, 0 }; +const uint8_t msgtxt_43[] = { +67, 82, 65, 83, 72, 33, 0 }; +const uint8_t msgtxt_44[] = { +73, 32, 102, 101, 101, 108, 0 }; +const uint8_t msgtxt_45[] = { +65, 114, 103, 104, 33, 0 }; +const uint8_t msgtxt_46[] = { +84, 104, 101, 121, 39, 114, 101, 32, 97, 116, 116, 97, 99, 104, 101, 100, 32, 116, 111, 0 }; +const uint8_t msgtxt_47[] = { +104, 97, 114, 100, 32, 119, 111, 114, 107, 0 }; +const uint8_t msgtxt_48[] = { +109, 97, 107, 101, 115, 32, 109, 101, 32, 110, 101, 114, 118, 111, 117, 115, 0 }; +const uint8_t msgtxt_49[] = { +114, 101, 115, 101, 109, 98, 108, 101, 115, 0 }; +const uint8_t msgtxt_50[] = { +87, 105, 101, 114, 100, 33, 0 }; +const uint8_t msgtxt_51[] = { +72, 97, 114, 100, 32, 116, 111, 32, 115, 116, 101, 101, 114, 32, 116, 104, 105, 115, 32, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_52[] = { +73, 116, 115, 32, 99, 111, 109, 105, 110, 103, 32, 97, 112, 97, 114, 116, 0 }; +const uint8_t msgtxt_53[] = { +63, 0 }; +const uint8_t msgtxt_54[] = { +108, 101, 100, 103, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 32, 111, 102, 32, 116, 104, 101, 32, 118, 111, 108, 99, 97, 110, 111, 0 }; +const uint8_t msgtxt_55[] = { +108, 111, 111, 107, 32, 115, 105, 99, 107, 108, 121, 0 }; +const uint8_t msgtxt_56[] = { +78, 111, 116, 32, 115, 97, 102, 101, 0 }; +const uint8_t msgtxt_57[] = { +73, 39, 109, 32, 116, 111, 111, 32, 98, 105, 103, 0 }; +const uint8_t msgtxt_58[] = { +77, 111, 114, 110, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_59[] = { +10, 67, 111, 110, 103, 114, 97, 116, 115, 33, 0 }; +const uint8_t msgtxt_60[] = { +98, 101, 97, 114, 32, 112, 97, 119, 115, 32, 103, 114, 111, 117, 110, 100, 32, 38, 32, 119, 104, 105, 110, 101, 115, 0 }; +const uint8_t msgtxt_61[] = { +85, 70, 79, 32, 108, 97, 110, 100, 105, 110, 103, 32, 97, 109, 111, 110, 103, 32, 100, 105, 110, 111, 115, 97, 117, 114, 115, 32, 38, 32, 112, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_62[] = { +97, 115, 32, 112, 105, 114, 97, 116, 101, 32, 116, 97, 107, 101, 115, 32, 105, 116, 32, 104, 105, 115, 32, 98, 97, 110, 100, 97, 110, 110, 97, 32, 102, 97, 108, 108, 115, 32, 111, 102, 102, 10, 73, 32, 115, 101, 101, 32, 104, 101, 32, 104, 97, 115, 32, 97, 110, 116, 101, 110, 110, 97, 115, 10, 72, 101, 32, 100, 114, 111, 112, 115, 32, 97, 32, 110, 111, 116, 101, 44, 32, 108, 101, 97, 118, 105, 110, 103, 32, 99, 104, 111, 114, 116, 108, 105, 110, 103, 0 }; +const uint8_t msgtxt_63[] = { +78, 111, 116, 101, 32, 115, 97, 121, 115, 58, 10, 34, 87, 104, 97, 116, 32, 119, 97, 115, 44, 32, 109, 117, 115, 116, 32, 98, 101, 44, 10, 115, 111, 32, 115, 101, 110, 100, 32, 116, 104, 105, 115, 32, 110, 111, 116, 101, 32, 119, 101, 10, 116, 111, 32, 116, 101, 108, 108, 32, 121, 111, 117, 32, 97, 32, 119, 111, 114, 100, 39, 115, 32, 102, 114, 101, 101, 33, 34, 0 }; +const uint8_t msgtxt_64[] = { +115, 97, 108, 116, 121, 0 }; +const uint8_t msgtxt_65[] = { +73, 39, 109, 32, 97, 32, 98, 111, 116, 116, 108, 101, 32, 98, 97, 98, 121, 0 }; +const uint8_t msgtxt_66[] = { +116, 111, 32, 109, 111, 118, 101, 32, 105, 110, 32, 104, 117, 114, 114, 105, 99, 97, 110, 101, 0 }; +const uint8_t msgtxt_67[] = { +73, 39, 109, 32, 116, 114, 101, 97, 100, 105, 110, 103, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t msgtxt_68[] = { +99, 97, 118, 101, 109, 97, 110, 32, 115, 97, 121, 115, 0 }; +const uint8_t msgtxt_69[] = { +73, 32, 104, 105, 116, 32, 115, 116, 111, 110, 101, 32, 119, 105, 116, 104, 0 }; +const uint8_t msgtxt_70[] = { +105, 116, 0 }; +const uint8_t msgtxt_71[] = { +119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 0 }; +const uint8_t msgtxt_72[] = { +99, 97, 118, 101, 109, 97, 110, 0 }; +const uint8_t msgtxt_73[] = { +105, 116, 115, 32, 104, 105, 110, 103, 101, 100, 32, 97, 116, 32, 116, 111, 112, 33, 0 }; +const uint8_t msgtxt_74[] = { +84, 89, 114, 97, 110, 111, 115, 97, 117, 114, 117, 115, 0 }; +const uint8_t msgtxt_75[] = { +114, 101, 112, 108, 105, 99, 97, 32, 102, 117, 108, 108, 32, 115, 105, 122, 101, 100, 33, 32, 84, 104, 101, 114, 101, 39, 115, 32, 98, 117, 116, 116, 111, 110, 32, 97, 116, 32, 98, 111, 116, 116, 111, 109, 0 }; +const uint8_t msgtxt_76[] = { +103, 108, 111, 119, 115, 0 }; +const uint8_t msgtxt_77[] = { +98, 117, 116, 116, 111, 110, 44, 32, 100, 105, 97, 108, 115, 44, 32, 108, 101, 118, 101, 114, 115, 0 }; +const uint8_t msgtxt_78[] = { +98, 101, 97, 99, 104, 32, 51, 32, 109, 101, 116, 101, 114, 115, 32, 98, 101, 108, 111, 119, 0 }; +const uint8_t msgtxt_79[] = { +68, 111, 110, 39, 116, 32, 98, 101, 32, 34, 89, 69, 83, 34, 32, 109, 97, 110, 46, 32, 68, 111, 32, 105, 116, 32, 121, 111, 117, 114, 115, 101, 108, 102, 33, 0 }; +const uint8_t msgtxt_80[] = { +97, 32, 104, 111, 108, 101, 0 }; +const uint8_t msgtxt_81[] = { +89, 85, 67, 75, 33, 0 }; +const uint8_t msgtxt_82[] = { +77, 101, 116, 97, 108, 108, 105, 99, 32, 118, 111, 105, 99, 101, 32, 119, 104, 105, 115, 112, 101, 114, 115, 32, 105, 110, 32, 109, 121, 32, 109, 105, 110, 100, 58, 0 }; +const uint8_t msgtxt_83[] = { +34, 86, 79, 67, 65, 76, 73, 90, 69, 32, 80, 65, 83, 83, 87, 79, 82, 68, 32, 80, 76, 69, 65, 83, 69, 34, 0 }; +const uint8_t msgtxt_84[] = { +34, 82, 69, 65, 68, 89, 34, 0 }; +const uint8_t msgtxt_85[] = { +112, 117, 115, 104, 101, 115, 32, 98, 117, 116, 116, 111, 110, 0 }; +const uint8_t msgtxt_86[] = { +84, 104, 101, 114, 101, 39, 115, 32, 98, 108, 105, 110, 100, 105, 110, 103, 32, 102, 108, 97, 115, 104, 32, 102, 114, 111, 109, 32, 70, 111, 114, 99, 101, 32, 70, 105, 101, 108, 100, 0 }; +const uint8_t msgtxt_87[] = { +83, 109, 105, 108, 101, 115, 32, 38, 32, 112, 111, 105, 110, 116, 115, 32, 97, 116, 32, 109, 101, 32, 116, 104, 101, 110, 32, 116, 104, 101, 32, 102, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t msgtxt_88[] = { +99, 97, 115, 101, 32, 111, 112, 101, 110, 115, 46, 32, 73, 116, 115, 32, 97, 108, 105, 118, 101, 33, 0 }; +const uint8_t msgtxt_89[] = { +73, 39, 109, 32, 100, 105, 110, 111, 115, 97, 117, 114, 32, 115, 110, 97, 99, 107, 33, 0 }; +const uint8_t msgtxt_90[] = { +110, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_91[] = { +105, 116, 115, 32, 97, 110, 32, 97, 108, 105, 101, 110, 32, 115, 99, 114, 105, 112, 116, 33, 0 }; +const uint8_t msgtxt_92[] = { +80, 105, 101, 99, 101, 32, 119, 105, 114, 101, 32, 109, 105, 115, 115, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_93[] = { +116, 114, 105, 112, 112, 101, 100, 32, 38, 32, 102, 101, 108, 108, 33, 0 }; +const uint8_t msgtxt_94[] = { +73, 102, 32, 121, 111, 117, 32, 108, 105, 107, 101, 32, 116, 111, 32, 107, 105, 108, 108, 32, 109, 111, 110, 115, 116, 101, 114, 115, 32, 112, 108, 97, 121, 32, 34, 77, 65, 67, 69, 83, 32, 38, 32, 77, 65, 71, 73, 67, 34, 33, 0 }; +const uint8_t msgtxt_95[] = { +73, 32, 100, 114, 111, 112, 112, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_96[] = { +0 }; +const uint8_t msgtxt_97[] = { +0 }; +const uint8_t msgtxt_98[] = { +0 }; +const uint8_t msgtxt_99[] = { +71, 108, 111, 119, 105, 110, 103, 32, 115, 105, 103, 110, 32, 97, 112, 112, 101, 97, 114, 115, 58, 32, 34, 83, 65, 86, 69, 32, 84, 72, 73, 83, 32, 80, 65, 83, 83, 87, 79, 82, 68, 32, 70, 79, 82, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 32, 49, 49, 58, 34, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, + msgtxt_97, + msgtxt_98, + msgtxt_99, +}; + + +const uint8_t status[] = { +/* AUTO 100 moves*/ + 164, + 0, 1, + 82, +/* AUTO 10 evaporate*/ + 141, 10, + 13, 11, 0, 11, 9, 2, + 59, 73, +/* AUTO 0 salt*/ + 209, + 8, 1, 0, 10, 0, 3, 0, 1, + 62, 60, +/* AUTO 100 WIND*/ + 180, + 8, 4, 5, 31, 9, 17, 9, 18, 7, 13, + 73, +/* AUTO 0 */ + 196, + 0, 31, + 53, +/* AUTO 100 start*/ + 179, + 9, 3, 0, 3, 0, 250, 0, 1, + 58, 73, 79, 81, +/* AUTO 0 */ + 211, + 0, 70, 0, 2, 32, 44, 0, 3, + 79, 81, 79, 81, +/* AUTO 0 */ + 194, + 79, 77, 33, +/* AUTO 0 FORCE ROOM*/ + 203, + 0, 30, 0, 1, + 54, 80, 54, 76, +/* AUTO 100 NO TREAD*/ + 168, + 7, 12, 0, 14, + 60, +/* AUTO 100 night?*/ + 166, + 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 208, + 15, 30, 9, 2, 9, 17, 9, 18, + 5, +/* AUTO 0 nite!*/ + 215, + 15, 0, 0, 2, 9, 2, 9, 17, 9, 18, + 58, 6, 56, 76, +/* AUTO 0 */ + 202, + 0, 1, 0, 3, + 81, 81, 77, +/* AUTO 0 pirate here*/ + 214, + 15, 0, 0, 5, 0, 15, 9, 6, 0, 6, + 62, 7, 58, +/* AUTO 0 hurricane*/ + 202, + 0, 3, 0, 2, + 81, 81, 77, +/* AUTO 0 HURR COMING*/ + 212, + 15, 15, 16, 0, 9, 4, 7, 13, 9, 19, + 8, +/* AUTO 0 HUR HITS*/ + 214, + 9, 4, 15, 0, 0, 4, 0, 85, 9, 19, + 9, 58, 79, +/* AUTO 0 HURR PAS*/ + 214, + 8, 4, 15, 50, 0, 4, 0, 19, 8, 5, + 60, 58, 10, +/* AUTO 0 HURR 2 LONG*/ + 211, + 8, 4, 15, 0, 2, 31, 7, 3, + 106, 116, 11, 61, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 NO TREAD*/ + 168, + 1, 25, 0, 14, + 60, +/* AUTO 100 NO TREAD*/ + 168, + 1, 28, 0, 14, + 60, +/* AUTO 100 PIRATE HERE*/ + 176, + 13, 5, 14, 4, 0, 4, 0, 15, + 62, +/* AUTO 0 .*/ +/* AUTO 100 BEAR SALT*/ + 179, + 2, 10, 2, 20, 0, 10, 0, 5, + 59, 58, 16, 17, +/* AUTO 30 BEAR ATTACKS*/ + 143, 30, + 2, 20, 9, 5, 1, 33, + 14, 16, 18, 61, +/* AUTO 40 CAVEMEN BUTT*/ + 143, 40, + 2, 52, 8, 22, 2, 44, + 122, 135, 137, 136, +/* AUTO 40 BEAR COMES*/ + 141, 40, + 4, 8, 3, 10, 0, 20, + 53, 14, +/* AUTO 10 MOVE BEAR*/ + 140, 10, + 0, 20, 0, 8, 9, 4, + 62, +/* AUTO 40 MOVE BEAR*/ + 144, 40, + 8, 18, 7, 17, 0, 20, 5, 20, + 53, +/* AUTO 35 MOVE BEAR*/ + 140, 35, + 0, 20, 0, 11, 8, 4, + 62, +/* AUTO 100 HOLD BREATHE*/ + 170, + 8, 7, 0, 4, + 81, 77, 73, +/* AUTO 0 WARNIGN AIR*/ + 196, + 15, 2, + 45, +/* AUTO 0 */ + 201, + 15, 0, 0, 7, + 60, 41, +/* AUTO 0 */ + 196, + 0, 4, + 81, +/* AUTO 0 .*/ +/* AUTO 100 DROP LOG*/ + 174, + 1, 28, 1, 25, 0, 28, + 19, 40, 53, +/* AUTO 25 TREE DOWN*/ + 149, 25, + 8, 4, 0, 25, 0, 4, 14, 25, 14, 29, + 62, 43, +/* AUTO 100 WIN GAME*/ + 177, + 4, 30, 0, 23, 8, 22, 13, 44, + 58, 122, +/* AUTO 100 WIN GAME*/ + 177, + 4, 31, 0, 23, 8, 22, 13, 44, + 58, 122, +/* AUTO 100 WIN GAME*/ + 167, + 8, 23, + 135, 136, 149, 73, +/* AUTO 0 NO BAND*/ + 203, + 12, 41, 32, 218, + 79, 78, 109, 63, +/* AUTO 0 GOT BAND*/ + 203, + 3, 41, 0, 123, + 79, 78, 109, 63, +/* AUTO 100 RAFT LASTING*/ + 170, + 8, 10, 0, 5, + 81, 77, 73, +/* AUTO 0 */ + 196, + 15, 10, + 102, +/* AUTO 0 */ + 199, + 15, 0, + 43, 34, 15, 61, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* AUTO 30 NERVOUS*/ + 142, 30, + 2, 20, 0, 33, 9, 5, + 24, 48, 52, +/* AUTO 15 RAFT ATOL*/ + 142, 15, + 8, 10, 0, 10, 0, 37, + 60, 53, 76, +/* AUTO 40 RAFT TIDEPOOL*/ + 142, 40, + 8, 10, 0, 10, 0, 36, + 60, 53, 76, +/* AUTO 30 RAFT BEACH*/ + 142, 30, + 8, 10, 0, 10, 0, 35, + 60, 53, 76, +/* AUTO 100 RAFT OCEAN*/ + 174, + 8, 10, 0, 10, 0, 34, + 60, 53, 76, +/* AUTO 2 TREE DOWN*/ + 149, 2, + 8, 4, 0, 28, 0, 4, 14, 28, 14, 29, + 62, 43, +/* AUTO 100 PIRATE RUM*/ + 183, + 2, 6, 2, 4, 0, 40, 0, 6, 0, 41, + 72, 73, 53, 112, +/* AUTO 0 */ + 201, + 0, 4, 0, 5, + 59, 59, +/* AUTO 5 STORM DEAD*/ + 147, 5, + 8, 4, 6, 28, 2, 31, 6, 25, + 106, 116, 11, 61, +/* AUTO 100 NO LOG*/ + 176, + 4, 12, 10, 0, 6, 25, 6, 28, + 73, +/* AUTO 0 DROWN*/ + 203, + 8, 14, 0, 13, + 39, 40, 54, 76, +/* AUTO 0 TREADING*/ + 203, + 9, 14, 0, 14, + 58, 117, 39, 40, +/* AUTO 100 WIND GONE*/ + 172, + 9, 4, 13, 31, 0, 31, + 59, +/* AUTO 100 DARK ROOM*/ + 165, + 4, 24, + 56, 76, +/* AUTO 100 LITE ROOM*/ + 165, + 4, 23, + 57, 76, +/* AUTO 100 LITE TUNNELS*/ + 165, + 4, 9, + 57, 76, +/* AUTO 100 OUT TUNLS LITE*/ + 178, + 4, 17, 0, 17, 0, 18, 9, 2, + 60, 60, 57, +/* AUTO 100 LEFT CAVES*/ + 168, + 4, 8, 0, 18, + 60, +/* AUTO 100 OUT TUNLS DARK*/ + 179, + 4, 17, 0, 17, 0, 18, 8, 2, + 60, 60, 56, 76, +/* AUTO 100 MAN FOLLOWS*/ + 181, + 13, 44, 5, 44, 0, 44, 7, 30, 7, 31, + 53, 76, +/* AUTO 40 CAVEMAN NO GO*/ + 143, 40, + 2, 52, 2, 44, 9, 22, + 122, 135, 73, 132, +/* AUTO 0 .*/ + 195, + 133, 118, 45, 140, +/* AUTO 100 DINO SNACK*/ + 169, + 8, 25, 14, 47, + 139, 61, +/* AUTO 100 MAN OUT*/ + 176, + 8, 25, 14, 46, 14, 44, 0, 44, + 53, +/* AUTO 100 ONE MOVE OK*/ + 173, + 8, 24, 0, 25, 0, 24, + 58, 60, +/* AUTO 100 DEAD CAVE*/ + 169, + 4, 33, 12, 9, + 143, 61, +/* AUTO 100 NO TREAD*/ + 172, + 4, 12, 11, 0, 0, 14, + 60, +/* AUTO 0 .*/ +/* AUTO 100 LAKE WATCH*/ + 176, + 4, 12, 2, 19, 0, 19, 0, 13, + 62, +/* AUTO 100 LAKE KNIFE*/ + 176, + 4, 12, 2, 24, 0, 24, 0, 13, + 62, +/* AUTO 100 LAKE BOTTLE*/ + 176, + 4, 12, 2, 6, 0, 6, 0, 13, + 62, +/* AUTO 100 LAKE SALT*/ + 172, + 4, 12, 3, 10, 0, 10, + 59, +/* AUTO 100 BLOCK GLOWS*/ + 175, + 13, 9, 0, 7, 0, 26, + 81, 77, 59, 73, +/* AUTO 0 BURNT OUT*/ + 205, + 15, 0, 0, 9, 0, 26, + 72, 76, +/* AUTO 0 */ + 196, + 0, 7, + 81, +/* AUTO 100 FORCE LOG*/ + 181, + 14, 29, 8, 19, 14, 25, 0, 25, 0, 4, + 62, 43, +/* AUTO 100 FORCE LOG*/ + 181, + 14, 29, 8, 19, 14, 28, 0, 28, 0, 4, + 62, 43, +/* AUTO 100 SLIP ASH*/ + 171, + 4, 6, 8, 12, + 88, 88, 88, 73, +/* AUTO 0 SLIP ASH*/ + 199, + 0, 8, + 19, 25, 54, 76, +/* AUTO 0 DROP LOG OUTSIDE*/ + 211, + 1, 28, 0, 28, 0, 7, 8, 28, + 47, 145, 62, 76, +/* AUTO 0 */ + 211, + 1, 25, 0, 25, 0, 7, 8, 28, + 47, 145, 62, 76, +/* AUTO 100 OUTSIDE VOLCANO*/ + 168, + 4, 7, 0, 28, + 60, +/* AUTO 100 INSIDE VOLCANO*/ + 168, + 4, 8, 0, 28, + 58, +/* AUTO 100 LAKE BOTTLE*/ + 176, + 4, 12, 2, 14, 0, 14, 0, 13, + 62, +/* AUTO 100 DROWN LAKE*/ + 169, + 4, 13, 9, 7, + 38, 61, +/* AUTO 100 WIND*/ + 176, + 4, 8, 8, 4, 0, 31, 5, 31, + 53, +/* AUTO 100 END GAME*/ + 175, + 4, 34, 0, 20, 0, 44, + 59, 59, 76, 63, +}; +const uint8_t actions[] = { +/* LOOK CLIF */ + 7, 30, 22, + 4, 3, + 28, 23, 29, 30, +/* GO RAFT STORM DEAD*/ + 9, 1, 36, + 8, 4, 2, 29, + 11, 61, +/* LOOK DOWN */ + 7, 30, 6, + 4, 3, + 28, 23, 29, 30, +/* GO HEAD */ + 10, 1, 19, + 3, 21, 0, 10, + 1, 54, 76, +/* LOOK OCEA */ + 2, 30, 25, + 1, 23, 34, +/* LOOK JUNG */ + 7, 30, 26, + 2, 22, + 1, 23, 35, 73, +/* AUTO 0 */ + 196, + 14, 23, + 42, +/* CUT VINE */ + 17, 38, 27, + 2, 22, 14, 23, 0, 23, 3, 24, + 1, 53, +/* INVE ANY */ + 0, 44, 0, + 66, +/* GET INVE */ + 0, 10, 28, + 66, +/* GO LEDG */ + 14, 1, 34, + 4, 12, 0, 18, 9, 14, + 1, 54, 76, +/* SWIM WEST */ + 14, 46, 4, + 4, 12, 9, 14, 0, 18, + 1, 54, 76, +/* SWIM DOWN */ + 18, 46, 6, + 4, 12, 0, 13, 6, 28, 6, 25, + 1, 54, 76, +/* GET BREA */ + 15, 10, 31, + 7, 13, 0, 7, 0, 4, + 1, 58, 81, 73, +/* AUTO 0 */ + 201, + 0, 7, 0, 4, + 79, 81, +/* PET BEAR */ + 11, 54, 58, + 2, 20, 9, 5, + 1, 14, 15, 61, +/* PET BEAR */ + 8, 54, 58, + 2, 20, 8, 5, + 1, +/* GET OUT */ + 6, 10, 33, + 4, 8, + 19, 25, 26, +/* SWIM DOWN */ + 6, 46, 6, + 4, 12, + 103, 19, 66, +/* WITH KNIF */ + 21, 51, 41, + 3, 42, 3, 24, 8, 27, 0, 42, 0, 58, + 72, 1, +/* SWIM UP */ + 10, 46, 5, + 4, 13, 0, 12, + 1, 54, 76, +/* SWIM EAST */ + 15, 46, 3, + 4, 13, 0, 26, 14, 26, + 1, 23, 39, 53, +/* SWIM NORTH */ + 15, 46, 1, + 4, 13, 0, 24, 14, 24, + 1, 23, 39, 53, +/* OPEN COCO */ + 9, 81, 68, + 3, 42, 0, 27, + 36, 58, +/* SWIM ANY */ + 4, 46, 0, + 4, 13, + 1, +/* GO VOLC */ + 15, 1, 50, + 2, 27, 0, 6, 0, 33, + 47, 54, 76, 52, +/* GO OCEA */ + 19, 1, 25, + 7, 8, 7, 11, 7, 12, 7, 13, + 1, 15, 34, 61, +/* BUIL RAFT .*/ + 17, 49, 36, + 3, 23, 3, 28, 3, 25, 3, 24, + 1, 73, +/* AUTO 0 */ + 211, + 0, 29, 0, 23, 0, 28, 0, 25, + 53, 59, 59, 59, +/* AUTO 0 BUILT RITE*/ + 209, + 4, 5, 0, 36, 0, 14, 0, 11, + 62, 58, +/* AUTO 0 SET MOVES*/ + 206, + 0, 5, 0, 25, 0, 5, + 81, 79, 81, +/* ASK FREE */ + 15, 72, 51, + 2, 52, 0, 22, 9, 22, + 85, 132, 134, 58, +/* QUIT ANY */ + 0, 42, 0, + 63, +/* WAIT ANY */ + 15, 57, 0, + 0, 1, 0, 50, 0, 1, + 81, 83, 81, 73, +/* AUTO 0 */ + 211, + 0, 3, 0, 50, 0, 3, 0, 2, + 81, 83, 81, 81, +/* AUTO 0 */ + 206, + 0, 50, 0, 2, 0, 50, + 83, 81, 82, +/* WITH HAND DIG*/ + 18, 51, 29, + 2, 1, 8, 20, 0, 20, 0, 21, + 1, 60, 58, +/* GO CREV */ + 15, 1, 38, + 2, 30, 0, 3, 0, 18, + 1, 54, 76, 60, +/* GO CAVE */ + 15, 1, 39, + 2, 32, 0, 11, 0, 18, + 1, 54, 76, 58, +/* GO RAFT */ + 14, 1, 36, + 2, 29, 0, 14, 8, 11, + 1, 54, 76, +/* GET VINE */ + 9, 10, 27, + 3, 23, 0, 23, + 1, 52, +/* GET VINE */ + 6, 10, 27, + 2, 22, + 19, 46, 35, +/* LOOK HEAD */ + 7, 30, 19, + 3, 21, + 1, 49, 18, 50, +/* PADD ANY */ + 14, 79, 0, + 8, 11, 4, 14, 0, 10, + 51, 58, 73, +/* AUTO 0 */ + 211, + 0, 37, 0, 34, 0, 35, 0, 36, + 59, 59, 59, 59, +/* AUTO 0 */ + 202, + 0, 5, 0, 5, + 81, 77, 81, +/* PADD ANY */ + 0, 79, 0, + 36, +/* GO BEAC */ + 15, 1, 61, + 2, 35, 0, 16, 0, 29, + 1, 54, 53, 76, +/* GO ATOL */ + 15, 1, 60, + 2, 37, 0, 15, 0, 29, + 1, 54, 53, 76, +/* GO TIDE */ + 15, 1, 52, + 2, 36, 0, 5, 0, 29, + 1, 54, 53, 76, +/* GO CAVE */ + 10, 1, 39, + 2, 38, 0, 17, + 1, 54, 76, +/* LOOK WEST */ + 6, 30, 4, + 4, 12, + 1, 23, 104, +/* WITH HAND */ + 11, 51, 29, + 4, 32, 0, 20, + 1, 60, 31, 32, +/* SLEE ANY */ + 19, 63, 0, + 4, 18, 0, 2, 0, 1, 0, 170, + 60, 81, 79, 73, +/* AUTO 0 */ + 199, + 0, 1, + 81, 88, 88, 88, +/* AUTO 0 HURR SLEEP*/ + 198, + 8, 4, + 106, 11, 61, +/* AUTO 0 */ + 194, + 57, 108, 76, +/* GO BASI */ + 5, 1, 32, + 2, 15, + 19, 107, +/* SLEE ANY */ + 6, 63, 0, + 7, 18, + 106, 15, 61, +/* JUMP ANY */ + 5, 61, 0, + 4, 3, + 1, 61, +/* GO SHIP */ + 2, 1, 11, + 19, 20, 109, +/* FILL HOLE */ + 9, 45, 37, + 2, 2, 0, 2, + 1, 59, +/* WITH HAND DIG GUANO*/ + 23, 51, 29, + 8, 20, 2, 50, 14, 55, 0, 55, 0, 20, + 53, 60, 1, 131, +/* JUMP ANY */ + 10, 61, 0, + 4, 32, 0, 2, + 1, 54, 76, +/* AUTO 0 */ +/* DROP RUM */ + 0, 18, 9, + 3, +/* LOOK DRAW */ + 7, 30, 62, + 2, 39, + 1, 23, 111, 50, +/* LOOK NOTE */ + 5, 30, 66, + 3, 40, + 1, 113, +/* DRIN RUM */ + 4, 68, 9, + 3, 6, + 1, +/* DRIN WATE */ + 6, 68, 55, + 3, 8, + 1, 45, 114, +/* DRIN SWEA */ + 6, 68, 59, + 3, 33, + 1, 45, 114, +/* DRIN WATE */ + 4, 68, 55, + 3, 14, + 1, +/* YOHO ANY SAVE GAME*/ + 1, 78, 0, + 1, 71, +/* GO TREE */ + 10, 1, 16, + 2, 3, 0, 19, + 1, 54, 76, +/* SAVE GAME */ + 5, 41, 57, + 9, 4, + 1, 71, +/* SWIM ANY */ + 4, 46, 0, + 4, 5, + 1, +/* SWIM ANY */ + 19, 46, 0, + 4, 12, 10, 0, 6, 28, 6, 25, + 39, 40, 38, 61, +/* LOOK BEAR */ + 8, 30, 58, + 2, 20, 9, 5, + 105, +/* TREA WATE */ + 9, 71, 55, + 4, 12, 0, 14, + 60, 1, +/* SWIM ANY OUT LAKE*/ + 10, 46, 0, + 4, 12, 0, 8, + 1, 54, 76, +/* ASK ANY */ + 7, 72, 0, + 2, 44, + 1, 85, 118, 45, +/* GET STAL */ + 4, 10, 42, + 2, 43, + 36, +/* WITH COCO */ + 15, 51, 68, + 2, 43, 14, 45, 1, 42, + 119, 120, 120, 73, +/* AUTO 0 HIT STAL*/ + 199, + 0, 45, + 13, 23, 39, 53, +/* GO CREV */ + 15, 1, 38, + 2, 45, 0, 9, 0, 17, + 1, 54, 76, 58, +/* LOOK CASE */ + 11, 30, 69, + 2, 46, 14, 44, + 1, 23, 122, 125, +/* LOOK STAL */ + 6, 30, 42, + 2, 43, + 50, 23, 123, +/* LOOK CASE */ + 7, 30, 69, + 2, 47, + 1, 23, 124, 125, +/* LOOK META */ + 1, 30, 44, + 120, 126, +/* LOOK CONS */ + 6, 30, 74, + 2, 52, + 1, 23, 127, +/* LOOK HOLE */ + 23, 30, 37, + 8, 21, 9, 9, 0, 9, 0, 6, 2, 1, + 23, 58, 53, 39, +/* WITH COCO */ + 19, 51, 68, + 2, 43, 13, 45, 1, 42, 0, 45, + 119, 120, 13, 59, +/* WITH WIRE */ + 22, 51, 20, + 9, 26, 2, 57, 3, 55, 0, 55, 0, 26, + 1, 59, 58, +/* WITH HAND DIG GUANO*/ + 15, 51, 29, + 8, 20, 2, 50, 0, 20, + 60, 23, 31, 32, +/* OPEN ANY */ + 0, 81, 0, + 36, +/* KILL ANY */ + 1, 59, 0, + 19, 144, +/* PET ANY */ + 2, 54, 0, + 44, 31, 32, +/* WITH ANY */ + 11, 51, 0, + 0, 20, 0, 27, + 60, 84, 37, 60, +/* GO RAFT BAD BUILT*/ + 11, 1, 36, + 2, 29, 9, 11, + 19, 120, 121, 63, +/* DIG ANY */ + 5, 58, 0, + 0, 20, + 36, 58, +/* HELP ANY */ + 2, 43, 0, + 45, 44, 26, +/* DRIN COCO */ + 9, 68, 68, + 3, 58, 0, 58, + 1, 59, +/* BREA ANY */ + 5, 64, 0, + 0, 7, + 36, 60, +/* ASK ANY */ + 1, 72, 0, + 1, 85, +/* YELL ANY */ + 7, 66, 0, + 2, 20, + 1, 85, 15, 61, +/* JUMP ANY */ + 0, 61, 0, + 1, +/* GO OPEN */ + 11, 1, 72, + 2, 48, 0, 25, + 1, 54, 56, 76, +/* GO OPEN */ + 11, 1, 72, + 2, 49, 0, 11, + 1, 54, 76, 73, +/* AUTO 0 NOT NITE*/ + 197, + 9, 2, + 57, 76, +/* AUTO 0 */ +/* GO CREV */ + 18, 1, 38, + 2, 53, 0, 32, 6, 28, 6, 25, + 1, 54, 76, +/* LOOK CLIF */ + 6, 30, 22, + 4, 32, + 1, 23, 128, +/* LOOK DOWN */ + 6, 30, 6, + 4, 32, + 1, 23, 128, +/* GO CLIF */ + 0, 1, 22, + 19, +/* GO BEAC */ + 0, 1, 61, + 36, +/* YES ANY */ + 0, 48, 0, + 129, +/* GET GUAN */ + 5, 10, 73, + 2, 50, + 19, 131, +/* MOVE BUTT NO WORD YET*/ + 10, 25, 54, + 2, 52, 9, 22, + 1, 132, 133, +/* MOVE BUTT OPEN CASE*/ + 22, 25, 54, + 2, 46, 0, 46, 0, 56, 0, 24, 8, 26, + 72, 73, 58, +/* AUTO 0 */ + 196, + 14, 44, + 138, +/* MOVE BUTT */ + 18, 25, 54, + 2, 47, 0, 47, 0, 56, 0, 24, + 72, 138, 58, +/* MOVE BUTT CLOSE*/ + 22, 25, 54, + 2, 56, 4, 20, 0, 46, 0, 56, 0, 24, + 1, 72, 60, +/* MOVE BUTT CLOSE*/ + 22, 25, 54, + 2, 56, 4, 21, 0, 47, 0, 56, 0, 24, + 72, 60, 1, +/* MOVE BUTT STILL BROKE*/ + 9, 25, 54, + 2, 46, 9, 26, + 1, 140, +/* DRIN ANY */ + 1, 68, 0, + 19, 115, +/* MOVE LEVE */ + 5, 25, 80, + 2, 52, + 36, 121, +/* LOOK SAND */ + 10, 30, 7, + 2, 1, 8, 21, + 1, 23, 130, +/* GO VOLC .*/ + 15, 1, 50, + 4, 6, 0, 8, 0, 12, + 25, 54, 58, 76, +/* SPIL ANY */ + 0, 47, 0, + 3, +/* EMPT BOTT ON ROCKS*/ + 4, 35, 8, + 4, 3, + 73, +/* AUTO 0 SALT*/ + 215, + 3, 8, 0, 8, 0, 7, 0, 11, 0, 1, + 1, 72, 53, 58, +/* AUTO 0 RUM*/ + 210, + 3, 6, 0, 6, 0, 7, 0, 11, + 1, 72, 53, +/* AUTO 0 */ + 210, + 3, 14, 0, 14, 0, 7, 0, 11, + 1, 72, 53, +/* SCOR ANY */ + 1, 40, 0, + 19, 37, +/* GO FORC */ + 11, 1, 75, + 2, 51, 0, 51, + 80, 53, 73, 1, +/* AUTO 0 BLOCK GLOWS*/ + 215, + 1, 26, 0, 9, 0, 7, 0, 85, 0, 7, + 74, 81, 79, 81, +/* GO HOLE */ + 9, 1, 37, + 2, 1, 8, 21, + 19, 107, +/* LOOK DIAL */ + 6, 30, 79, + 2, 52, + 1, 23, 141, +/* LOOK MACH */ + 8, 30, 81, + 9, 26, 2, 57, + 142, +/* FIX MACH */ + 8, 76, 81, + 9, 26, 2, 57, + 36, +/* MOVE BUTT */ + 11, 25, 54, + 8, 22, 2, 52, + 1, 136, 73, 80, +/* AUTO 0 .*/ + 202, + 4, 30, 0, 31, + 54, 80, 76, +/* AUTO 0 FORCE FIELD SWAP*/ + 202, + 4, 31, 0, 30, + 54, 80, 76, +/* CUT VINE */ + 23, 38, 27, + 2, 29, 0, 28, 0, 25, 3, 24, 7, 14, + 1, 53, 53, 73, +/* AUTO 0 BREAK RAFT*/ + 196, + 0, 29, + 59, +/* CUT COCO */ + 9, 38, 68, + 3, 42, 0, 27, + 36, 58, +/* GO LAKE */ + 11, 1, 49, + 2, 13, 0, 12, + 1, 73, 54, 76, +/* AUTO 0 WATCH OFF*/ + 205, + 1, 19, 0, 19, 0, 13, + 62, 145, +/* AUTO 0 */ + 200, + 1, 33, 0, 33, + 59, +/* AUTO 0 */ +/* EMPT BOTT IN CAVE*/ + 22, 35, 8, + 3, 6, 2, 15, 0, 6, 0, 7, 0, 16, + 1, 72, 53, +/* EMPT BOTT */ + 15, 35, 8, + 3, 8, 0, 8, 0, 7, + 1, 72, 2, 73, +/* AUTO 0 */ + 196, + 2, 20, + 110, +/* EMPT BOTT */ + 14, 35, 8, + 3, 14, 0, 14, 0, 7, + 1, 72, 2, +/* EMPT BOTT */ + 14, 35, 8, + 3, 6, 0, 6, 0, 7, + 1, 72, 2, +/* GET WATE FRESH WATER*/ + 17, 10, 55, + 4, 12, 3, 7, 0, 7, 0, 14, + 1, 72, +/* DROP WATE */ + 0, 18, 55, + 3, +/* GO CREV */ + 15, 1, 38, + 2, 17, 0, 11, 0, 18, + 1, 54, 76, 58, +/* SWIM ANY */ + 1, 46, 0, + 22, 103, +/* CUT ANY */ + 0, 38, 0, + 36, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* MOVE ANY */ + 0, 25, 0, + 36, +/* GET RUM GET*/ + 22, 10, 9, + 3, 7, 2, 16, 0, 16, 0, 7, 0, 6, + 1, 59, 72, +/* GET WATE GET*/ + 17, 10, 55, + 3, 7, 2, 13, 0, 14, 0, 7, + 1, 72, +/* GET WATE */ + 17, 10, 55, + 3, 7, 2, 18, 0, 8, 0, 7, + 1, 72, +/* FILL BOTT */ + 5, 45, 8, + 3, 7, + 27, 4, +/* SAVE GAME */ + 6, 41, 57, + 8, 4, + 19, 20, 10, +/* LOOK WATC */ + 6, 30, 21, + 3, 19, + 12, 78, 13, +/* AUTO 0 */ +/* LOOK VOLC */ + 7, 30, 50, + 4, 6, + 21, 22, 73, 28, +/* AUTO 0 */ + 197, + 18, 20, + 23, 24, +/* AUTO 0 */ + 193, + 23, 29, +/* LOOK ANY */ + 2, 30, 0, + 23, 31, 32, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *RUN */ + 210, 85, 78, 32, + /* *CLIM */ + 195, 76, 73, 77, + /* *ENTE */ + 197, 78, 84, 69, + /* *CRAW */ + 195, 82, 65, 87, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* *PICK */ + 208, 73, 67, 75, + /* *HOLD */ + 200, 79, 76, 68, + /* *CATC */ + 195, 65, 84, 67, + /* . */ + 46, 32, 32, 32, + /* . */ + 46, 32, 32, 32, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *PUT */ + 208, 85, 84, 32, + /* *RELE */ + 210, 69, 76, 69, + /* *GIVE */ + 199, 73, 86, 69, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* MOVE */ + 77, 79, 86, 69, + /* *PRES */ + 208, 82, 69, 83, + /* *PUSH */ + 208, 85, 83, 72, + /* *TURN */ + 212, 85, 82, 78, + /* *PULL */ + 208, 85, 76, 76, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *DESC */ + 196, 69, 83, 67, + /* *READ */ + 210, 69, 65, 68, + /* *SEE */ + 211, 69, 69, 32, + /* EMPT */ + 69, 77, 80, 84, + /* . */ + 46, 32, 32, 32, + /* . */ + 46, 32, 32, 32, + /* CUT */ + 67, 85, 84, 32, + /* */ + 32, 32, 32, 32, + /* SCOR */ + 83, 67, 79, 82, + /* SAVE */ + 83, 65, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* HELP */ + 72, 69, 76, 80, + /* INVE */ + 73, 78, 86, 69, + /* FILL */ + 70, 73, 76, 76, + /* SWIM */ + 83, 87, 73, 77, + /* SPIL */ + 83, 80, 73, 76, + /* YES */ + 89, 69, 83, 32, + /* BUIL */ + 66, 85, 73, 76, + /* *MAKE */ + 205, 65, 75, 69, + /* WITH */ + 87, 73, 84, 72, + /* *USE */ + 213, 83, 69, 32, + /* SWIM */ + 83, 87, 73, 77, + /* PET */ + 80, 69, 84, 32, + /* *TOUC */ + 212, 79, 85, 67, + /* *FEEL */ + 198, 69, 69, 76, + /* WAIT */ + 87, 65, 73, 84, + /* DIG */ + 68, 73, 71, 32, + /* KILL */ + 75, 73, 76, 76, + /* *DEST */ + 196, 69, 83, 84, + /* JUMP */ + 74, 85, 77, 80, + /* . */ + 46, 32, 32, 32, + /* SLEE */ + 83, 76, 69, 69, + /* BREA */ + 66, 82, 69, 65, + /* *SMAS */ + 211, 77, 65, 83, + /* YELL */ + 89, 69, 76, 76, + /* *SCRE */ + 211, 67, 82, 69, + /* DRIN */ + 68, 82, 73, 78, + /* *EAT */ + 197, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* TREA */ + 84, 82, 69, 65, + /* ASK */ + 65, 83, 75, 32, + /* *SAY */ + 211, 65, 89, 32, + /* *TELL */ + 212, 69, 76, 76, + /* *YELL */ + 217, 69, 76, 76, + /* FIX */ + 70, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* YOHO */ + 89, 79, 72, 79, + /* PADD */ + 80, 65, 68, 68, + /* *SAIL */ + 211, 65, 73, 76, + /* OPEN */ + 79, 80, 69, 78, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* SAND */ + 83, 65, 78, 68, + /* BOTT */ + 66, 79, 84, 84, + /* RUM */ + 82, 85, 77, 32, + /* SALT */ + 83, 65, 76, 84, + /* SHIP */ + 83, 72, 73, 80, + /* PIRA */ + 80, 73, 82, 65, + /* STOR */ + 83, 84, 79, 82, + /* *HURR */ + 200, 85, 82, 82, + /* ARGH */ + 65, 82, 71, 72, + /* TREE */ + 84, 82, 69, 69, + /* *PALM */ + 208, 65, 76, 77, + /* LOG */ + 76, 79, 71, 32, + /* HEAD */ + 72, 69, 65, 68, + /* WIRE */ + 87, 73, 82, 69, + /* WATC */ + 87, 65, 84, 67, + /* CLIF */ + 67, 76, 73, 70, + /* *EDGE */ + 197, 68, 71, 69, + /* BAT */ + 66, 65, 84, 32, + /* OCEA */ + 79, 67, 69, 65, + /* JUNG */ + 74, 85, 78, 71, + /* VINE */ + 86, 73, 78, 69, + /* INVE */ + 73, 78, 86, 69, + /* HAND */ + 72, 65, 78, 68, + /* FEET */ + 70, 69, 69, 84, + /* BREA */ + 66, 82, 69, 65, + /* BASI */ + 66, 65, 83, 73, + /* OUT */ + 79, 85, 84, 32, + /* LEDG */ + 76, 69, 68, 71, + /* BONE */ + 66, 79, 78, 69, + /* RAFT */ + 82, 65, 70, 84, + /* HOLE */ + 72, 79, 76, 69, + /* CREV */ + 67, 82, 69, 86, + /* CAVE */ + 67, 65, 86, 69, + /* ASH */ + 65, 83, 72, 32, + /* KNIF */ + 75, 78, 73, 70, + /* STAL */ + 83, 84, 65, 76, + /* NEAN */ + 78, 69, 65, 78, + /* META */ + 77, 69, 84, 65, + /* TUNN */ + 84, 85, 78, 78, + /* PIRA */ + 80, 73, 82, 65, + /* ANIM */ + 65, 78, 73, 77, + /* . */ + 46, 32, 32, 32, + /* LAKE */ + 76, 65, 75, 69, + /* VOLC */ + 86, 79, 76, 67, + /* FREE */ + 70, 82, 69, 69, + /* TIDE */ + 84, 73, 68, 69, + /* . */ + 46, 32, 32, 32, + /* BUTT */ + 66, 85, 84, 84, + /* WATE */ + 87, 65, 84, 69, + /* HOL */ + 72, 79, 76, 32, + /* GAME */ + 71, 65, 77, 69, + /* BEAR */ + 66, 69, 65, 82, + /* SWEA */ + 83, 87, 69, 65, + /* ATOL */ + 65, 84, 79, 76, + /* BEAC */ + 66, 69, 65, 67, + /* DRAW */ + 68, 82, 65, 87, + /* AROU */ + 65, 82, 79, 85, + /* SHAR */ + 83, 72, 65, 82, + /* PLAI */ + 80, 76, 65, 73, + /* NOTE */ + 78, 79, 84, 69, + /* BAND */ + 66, 65, 78, 68, + /* COCO */ + 67, 79, 67, 79, + /* CASE */ + 67, 65, 83, 69, + /* *DISP */ + 196, 73, 83, 80, + /* BLOC */ + 66, 76, 79, 67, + /* OPEN */ + 79, 80, 69, 78, + /* GUAN */ + 71, 85, 65, 78, + /* CONS */ + 67, 79, 78, 83, + /* FORC */ + 70, 79, 82, 67, + /* *FIEL */ + 198, 73, 69, 76, + /* ROOF */ + 82, 79, 79, 70, + /* HELL */ + 72, 69, 76, 76, + /* DIAL */ + 68, 73, 65, 76, + /* LEVE */ + 76, 69, 86, 69, + /* MACH */ + 77, 65, 67, 72, + /* GROU */ + 71, 82, 79, 85, + /* ROCK */ + 82, 79, 67, 75, + /* PUDD */ + 80, 85, 68, 68, + 0, +}; +const uint8_t automap[] = { + /* BOTT */ + 66, 79, 84, 84, + 6, + /* BOTT */ + 66, 79, 84, 84, + 7, + /* BOTT */ + 66, 79, 84, 84, + 8, + /* BLOC */ + 66, 76, 79, 67, + 9, + /* SALT */ + 83, 65, 76, 84, + 10, + /* BONE */ + 66, 79, 78, 69, + 12, + /* BOTT */ + 66, 79, 84, 84, + 14, + /* WATC */ + 87, 65, 84, 67, + 19, + /* VINE */ + 86, 73, 78, 69, + 23, + /* KNIF */ + 75, 78, 73, 70, + 24, + /* LOG */ + 76, 79, 71, 32, + 25, + /* BLOC */ + 66, 76, 79, 67, + 26, + /* LOG */ + 76, 79, 71, 32, + 28, + /* NOTE */ + 78, 79, 84, 69, + 40, + /* BAND */ + 66, 65, 78, 68, + 41, + /* COCO */ + 67, 79, 67, 79, + 42, + /* WIRE */ + 87, 73, 82, 69, + 55, + /* COCO */ + 67, 79, 67, 79, + 58, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv11.c b/Applications/games/adv11.c new file mode 100644 index 00000000..b1fc2565 --- /dev/null +++ b/Applications/games/adv11.c @@ -0,0 +1,3117 @@ +#define NUM_OBJ 48 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 150; +const uint8_t lightfill = 150; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 30; +const uint8_t startloc = 30; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +115, 109, 97, 108, 108, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_2[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_3[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_4[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_5[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_6[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_7[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_8[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_9[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_10[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_11[] = { +109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_12[] = { +114, 101, 100, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_13[] = { +114, 101, 100, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_14[] = { +99, 114, 97, 109, 112, 101, 100, 32, 109, 101, 116, 97, 108, 32, 97, 114, 101, 97, 0 }; +const uint8_t loctxt_15[] = { +109, 101, 116, 97, 108, 32, 115, 116, 111, 114, 97, 103, 101, 32, 104, 111, 108, 100, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 116, 114, 101, 97, 100, 109, 105, 108, 108, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 112, 101, 110, 32, 100, 105, 115, 112, 108, 97, 121, 32, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_18[] = { +115, 109, 97, 108, 108, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_19[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_20[] = { +109, 97, 105, 110, 32, 99, 111, 110, 116, 114, 111, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_21[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_22[] = { +115, 109, 97, 108, 108, 32, 109, 101, 116, 97, 108, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_23[] = { +109, 101, 116, 97, 108, 32, 100, 111, 114, 109, 105, 116, 111, 114, 121, 0 }; +const uint8_t loctxt_24[] = { +109, 101, 116, 97, 108, 32, 108, 105, 102, 101, 98, 111, 97, 116, 32, 104, 97, 110, 103, 97, 114, 32, 111, 112, 101, 110, 32, 116, 111, 10, 111, 117, 116, 101, 114, 32, 115, 112, 97, 99, 101, 0 }; +const uint8_t loctxt_25[] = { +109, 101, 116, 97, 108, 32, 108, 105, 110, 101, 100, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_26[] = { +108, 97, 114, 103, 101, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_27[] = { +108, 97, 114, 103, 101, 32, 109, 101, 116, 97, 108, 32, 114, 111, 111, 109, 10, 119, 105, 116, 104, 32, 112, 111, 114, 99, 101, 108, 97, 105, 110, 32, 109, 97, 99, 104, 105, 110, 101, 114, 121, 0 }; +const uint8_t loctxt_28[] = { +0 }; +const uint8_t loctxt_29[] = { +0 }; +const uint8_t loctxt_30[] = { +108, 111, 116, 32, 111, 102, 32, 116, 114, 111, 117, 98, 108, 101, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_2, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_3, { 0, 6, 0, 2, 0, 0 } }, + { loctxt_4, { 0, 0, 5, 0, 0, 0 } }, + { loctxt_5, { 0, 0, 6, 4, 0, 0 } }, + { loctxt_6, { 3, 0, 7, 5, 0, 0 } }, + { loctxt_7, { 9, 0, 0, 6, 0, 0 } }, + { loctxt_8, { 19, 0, 0, 0, 0, 0 } }, + { loctxt_9, { 25, 7, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 25, 0, 0, 0, 0 } }, + { loctxt_11, { 21, 0, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 19, 13, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 12, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 8, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_19, { 12, 8, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 21, 0, 0 } }, + { loctxt_21, { 22, 11, 20, 23, 0, 0 } }, + { loctxt_22, { 0, 21, 0, 0, 0, 0 } }, + { loctxt_23, { 0, 0, 21, 27, 0, 0 } }, + { loctxt_24, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 10, 9, 0, 0, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 0, 23, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 26, + 26, + 1, + 2, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 20, + 0, + 0, + 0, + 10, + 12, + 0, + 8, + 10, + 20, + 11, + 0, + 0, + 11, + 0, + 0, + 0, + 16, + 8, + 0, + 17, + 15, + 15, + 2, + 0, + 2, + 15, + 15, + 15, + 11, + 11, + 0, + 22, + 23, + 22, + 9, + 9, + 0, +}; + + +const uint8_t objtxt_0[] = { +77, 97, 99, 104, 105, 110, 101, 114, 121, 0 }; +const uint8_t objtxt_1[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_2[] = { +70, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_3[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_4[] = { +80, 108, 97, 110, 116, 115, 0 }; +const uint8_t objtxt_5[] = { +70, 108, 111, 119, 101, 114, 0 }; +const uint8_t objtxt_6[] = { +70, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_7[] = { +66, 97, 110, 100, 97, 110, 110, 97, 0 }; +const uint8_t objtxt_8[] = { +87, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_9[] = { +108, 105, 116, 101, 32, 103, 111, 101, 115, 32, 104, 101, 114, 101, 46, 46, 46, 46, 46, 0 }; +const uint8_t objtxt_10[] = { +67, 111, 114, 112, 115, 101, 0 }; +const uint8_t objtxt_11[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_12[] = { +78, 101, 97, 110, 100, 101, 114, 116, 104, 97, 108, 0 }; +const uint8_t objtxt_13[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 100, 114, 97, 103, 103, 105, 110, 103, 0 }; +const uint8_t objtxt_14[] = { +76, 111, 110, 103, 32, 103, 108, 111, 119, 105, 110, 103, 32, 109, 101, 116, 97, 108, 32, 116, 104, 114, 101, 97, 100, 0 }; +const uint8_t objtxt_15[] = { +70, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_16[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_17[] = { +77, 101, 0 }; +const uint8_t objtxt_18[] = { +72, 121, 100, 114, 111, 112, 111, 110, 105, 99, 115, 0 }; +const uint8_t objtxt_19[] = { +66, 108, 105, 110, 107, 105, 110, 103, 32, 114, 101, 100, 32, 108, 105, 103, 104, 116, 32, 111, 118, 101, 114, 32, 102, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_20[] = { +86, 105, 101, 119, 115, 99, 114, 101, 101, 110, 0 }; +const uint8_t objtxt_21[] = { +67, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_22[] = { +71, 108, 111, 119, 105, 110, 103, 32, 116, 104, 114, 101, 97, 100, 32, 116, 105, 101, 100, 32, 116, 111, 32, 108, 101, 118, 101, 114, 0 }; +const uint8_t objtxt_23[] = { +76, 111, 111, 115, 101, 32, 101, 110, 100, 32, 111, 102, 32, 103, 108, 111, 119, 105, 110, 103, 32, 116, 104, 114, 101, 97, 100, 0 }; +const uint8_t objtxt_24[] = { +84, 114, 101, 97, 100, 109, 105, 108, 108, 0 }; +const uint8_t objtxt_25[] = { +119, 105, 116, 104, 32, 116, 104, 114, 101, 97, 100, 32, 116, 105, 101, 100, 32, 116, 111, 32, 105, 116, 0 }; +const uint8_t objtxt_26[] = { +77, 101, 116, 101, 114, 32, 108, 111, 111, 112, 32, 111, 102, 32, 103, 108, 111, 119, 105, 110, 103, 32, 116, 104, 114, 101, 97, 100, 0 }; +const uint8_t objtxt_27[] = { +68, 97, 114, 107, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_28[] = { +82, 97, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_29[] = { +68, 105, 115, 112, 108, 97, 121, 32, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_30[] = { +119, 104, 105, 99, 104, 32, 105, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t objtxt_31[] = { +66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_32[] = { +80, 105, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_33[] = { +119, 104, 105, 99, 104, 32, 105, 115, 32, 109, 111, 116, 105, 111, 110, 108, 101, 115, 115, 0 }; +const uint8_t objtxt_34[] = { +76, 97, 114, 103, 101, 32, 112, 108, 97, 115, 116, 105, 99, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_35[] = { +71, 76, 79, 87, 73, 78, 71, 32, 108, 97, 114, 103, 101, 32, 112, 108, 97, 115, 116, 105, 99, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_36[] = { +76, 97, 114, 103, 101, 32, 114, 97, 100, 105, 97, 110, 116, 32, 103, 108, 111, 119, 105, 110, 103, 32, 110, 101, 111, 110, 32, 115, 105, 103, 110, 0 }; +const uint8_t objtxt_37[] = { +68, 105, 115, 112, 108, 97, 121, 32, 99, 97, 115, 101, 115, 0 }; +const uint8_t objtxt_38[] = { +71, 105, 97, 110, 116, 32, 98, 111, 120, 101, 115, 32, 38, 32, 99, 114, 97, 116, 101, 115, 0 }; +const uint8_t objtxt_39[] = { +80, 117, 108, 115, 97, 116, 105, 110, 103, 32, 114, 101, 100, 32, 102, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_40[] = { +76, 97, 114, 103, 101, 32, 109, 101, 100, 105, 99, 105, 110, 101, 32, 98, 97, 108, 108, 0 }; +const uint8_t objtxt_41[] = { +70, 114, 101, 101, 115, 116, 97, 110, 100, 105, 110, 103, 32, 112, 117, 110, 99, 104, 105, 110, 103, 32, 98, 97, 103, 0 }; +const uint8_t objtxt_42[] = { +83, 99, 114, 97, 112, 115, 32, 111, 102, 32, 99, 108, 111, 116, 104, 0 }; +const uint8_t objtxt_43[] = { +83, 111, 102, 116, 32, 112, 108, 97, 116, 102, 111, 114, 109, 0 }; +const uint8_t objtxt_44[] = { +82, 111, 119, 115, 32, 111, 102, 32, 115, 111, 102, 116, 32, 112, 108, 97, 116, 102, 111, 114, 109, 115, 0 }; +const uint8_t objtxt_45[] = { +83, 109, 97, 108, 108, 32, 112, 108, 97, 115, 116, 105, 99, 32, 119, 97, 102, 101, 114, 0 }; +const uint8_t objtxt_46[] = { +70, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_47[] = { +119, 104, 105, 99, 104, 32, 105, 115, 32, 119, 101, 97, 107, 108, 121, 32, 102, 108, 105, 99, 107, 101, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_48[] = { +65, 108, 105, 101, 110, 32, 100, 101, 118, 105, 99, 101, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +79, 75, 0 }; +const uint8_t msgtxt_2[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 49, 49, 32, 34, 83, 65, 86, 65, 71, 69, 32, 73, 83, 76, 65, 78, 68, 32, 80, 65, 82, 84, 32, 50, 34, 10, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 32, 38, 32, 82, 117, 115, 115, 32, 87, 101, 116, 109, 111, 114, 101, 46, 32, 68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 70, 97, 110, 115, 10, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_3[] = { +66, 108, 105, 110, 100, 105, 110, 103, 32, 102, 108, 97, 115, 104, 32, 111, 102, 32, 108, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_4[] = { +73, 39, 109, 32, 115, 116, 97, 114, 107, 32, 110, 97, 107, 101, 100, 0 }; +const uint8_t msgtxt_5[] = { +98, 117, 116, 116, 111, 110, 44, 100, 105, 97, 108, 115, 44, 108, 101, 118, 101, 114, 0 }; +const uint8_t msgtxt_6[] = { +110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_7[] = { +101, 120, 99, 101, 112, 116, 0 }; +const uint8_t msgtxt_8[] = { +109, 101, 116, 97, 108, 108, 105, 99, 32, 118, 111, 105, 99, 101, 32, 119, 104, 105, 115, 112, 101, 114, 115, 32, 105, 110, 32, 109, 121, 32, 109, 105, 110, 100, 58, 0 }; +const uint8_t msgtxt_9[] = { +111, 110, 101, 32, 105, 116, 101, 109, 0 }; +const uint8_t msgtxt_10[] = { +119, 114, 111, 110, 103, 0 }; +const uint8_t msgtxt_11[] = { +34, 86, 111, 99, 97, 108, 105, 122, 101, 32, 112, 97, 115, 115, 119, 111, 114, 100, 32, 80, 108, 101, 97, 115, 101, 34, 0 }; +const uint8_t msgtxt_12[] = { +34, 82, 101, 97, 100, 121, 34, 0 }; +const uint8_t msgtxt_13[] = { +97, 108, 105, 101, 110, 32, 115, 99, 114, 105, 112, 116, 0 }; +const uint8_t msgtxt_14[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_15[] = { +100, 111, 101, 115, 110, 39, 116, 32, 119, 111, 114, 107, 0 }; +const uint8_t msgtxt_16[] = { +115, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_17[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_18[] = { +104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_19[] = { +84, 105, 109, 101, 32, 112, 97, 114, 97, 100, 111, 120, 32, 115, 104, 97, 116, 116, 101, 114, 115, 32, 114, 101, 97, 108, 105, 116, 121, 0 }; +const uint8_t msgtxt_20[] = { +103, 108, 111, 119, 105, 110, 103, 0 }; +const uint8_t msgtxt_21[] = { +105, 116, 0 }; +const uint8_t msgtxt_22[] = { +86, 97, 99, 117, 117, 109, 33, 0 }; +const uint8_t msgtxt_23[] = { +108, 117, 110, 103, 115, 32, 101, 120, 112, 108, 111, 100, 101, 32, 105, 110, 32, 114, 101, 100, 32, 98, 117, 98, 98, 108, 105, 110, 103, 32, 114, 117, 105, 110, 0 }; +const uint8_t msgtxt_24[] = { +65, 114, 103, 104, 0 }; +const uint8_t msgtxt_25[] = { +65, 83, 80, 72, 89, 88, 73, 65, 84, 69, 68, 0 }; +const uint8_t msgtxt_26[] = { +73, 32, 98, 114, 101, 97, 116, 104, 101, 100, 0 }; +const uint8_t msgtxt_27[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_28[] = { +73, 32, 102, 101, 101, 108, 0 }; +const uint8_t msgtxt_29[] = { +115, 101, 100, 97, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_30[] = { +98, 114, 105, 101, 102, 108, 121, 0 }; +const uint8_t msgtxt_31[] = { +78, 101, 97, 110, 100, 101, 114, 116, 104, 97, 108, 0 }; +const uint8_t msgtxt_32[] = { +116, 111, 111, 32, 108, 97, 114, 103, 101, 0 }; +const uint8_t msgtxt_33[] = { +97, 116, 116, 97, 99, 107, 115, 0 }; +const uint8_t msgtxt_34[] = { +109, 111, 118, 101, 115, 0 }; +const uint8_t msgtxt_35[] = { +109, 101, 116, 97, 108, 108, 105, 99, 32, 116, 104, 114, 101, 97, 100, 115, 0 }; +const uint8_t msgtxt_36[] = { +34, 80, 114, 101, 112, 97, 114, 101, 32, 82, 97, 121, 115, 104, 105, 101, 108, 100, 44, 32, 80, 83, 89, 67, 72, 79, 84, 82, 65, 78, 83, 70, 73, 71, 85, 82, 65, 84, 73, 79, 78, 34, 0 }; +const uint8_t msgtxt_37[] = { +116, 104, 105, 99, 107, 32, 104, 101, 97, 100, 101, 100, 0 }; +const uint8_t msgtxt_38[] = { +34, 78, 111, 116, 34, 0 }; +const uint8_t msgtxt_39[] = { +66, 114, 97, 105, 110, 32, 102, 114, 105, 101, 100, 33, 0 }; +const uint8_t msgtxt_40[] = { +115, 116, 114, 97, 110, 103, 101, 0 }; +const uint8_t msgtxt_41[] = { +98, 111, 100, 121, 0 }; +const uint8_t msgtxt_42[] = { +115, 97, 121, 115, 0 }; +const uint8_t msgtxt_43[] = { +73, 32, 102, 97, 105, 110, 116, 101, 100, 0 }; +const uint8_t msgtxt_44[] = { +65, 119, 97, 107, 101, 33, 0 }; +const uint8_t msgtxt_45[] = { +119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 0 }; +const uint8_t msgtxt_46[] = { +76, 105, 103, 104, 116, 32, 109, 101, 115, 109, 101, 114, 105, 122, 101, 115, 32, 109, 101, 0 }; +const uint8_t msgtxt_47[] = { +84, 111, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_48[] = { +115, 108, 105, 112, 115, 32, 111, 102, 102, 0 }; +const uint8_t msgtxt_49[] = { +76, 97, 114, 103, 101, 32, 84, 32, 115, 104, 97, 112, 101, 100, 32, 104, 97, 110, 100, 108, 101, 46, 0 }; +const uint8_t msgtxt_50[] = { +117, 116, 116, 101, 114, 32, 98, 108, 97, 99, 107, 110, 101, 115, 115, 32, 105, 110, 32, 99, 101, 110, 116, 101, 114, 33, 0 }; +const uint8_t msgtxt_51[] = { +84, 114, 121, 58, 32, 34, 71, 79, 34, 0 }; +const uint8_t msgtxt_52[] = { +73, 39, 109, 32, 104, 111, 108, 100, 105, 110, 103, 32, 105, 116, 0 }; +const uint8_t msgtxt_53[] = { +67, 108, 111, 115, 101, 117, 112, 115, 32, 115, 104, 111, 119, 32, 68, 105, 110, 111, 115, 97, 117, 114, 115, 32, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_54[] = { +66, 117, 116, 116, 111, 110, 32, 97, 116, 32, 98, 111, 116, 116, 111, 109, 46, 0 }; +const uint8_t msgtxt_55[] = { +67, 97, 115, 101, 32, 99, 108, 111, 115, 101, 115, 44, 32, 115, 111, 109, 101, 32, 103, 97, 115, 32, 99, 111, 109, 101, 115, 32, 111, 117, 116, 32, 97, 110, 100, 32, 73, 39, 109, 32, 115, 101, 100, 97, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_56[] = { +67, 111, 110, 103, 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 33, 32, 89, 111, 117, 39, 118, 101, 32, 102, 105, 110, 105, 115, 104, 101, 100, 32, 83, 97, 118, 97, 103, 101, 32, 73, 115, 108, 97, 110, 100, 32, 115, 117, 99, 99, 101, 115, 115, 102, 117, 108, 108, 121, 33, 10, 82, 101, 102, 101, 114, 32, 116, 111, 32, 105, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 115, 32, 102, 111, 114, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 99, 111, 100, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, 58, 10, 85, 32, 76, 32, 75, 32, 35, 32, 36, 32, 43, 32, 83, 32, 40, 32, 86, 32, 65, 32, 48, 32, 51, 32, 53, 32, 68, 32, 66, 32, 73, 32, 72, 10, 79, 32, 59, 32, 55, 32, 69, 32, 56, 32, 47, 32, 77, 32, 80, 32, 52, 32, 74, 32, 49, 32, 84, 32, 81, 32, 64, 32, 70, 32, 37, 32, 71, 10, 87, 32, 88, 32, 54, 32, 67, 32, 63, 32, 89, 32, 44, 32, 90, 32, 61, 32, 38, 32, 82, 32, 42, 32, 45, 32, 78, 32, 50, 32, 41, 32, 57, 0 }; +const uint8_t msgtxt_57[] = { +105, 115, 32, 97, 32, 114, 111, 98, 111, 116, 33, 0 }; +const uint8_t msgtxt_58[] = { +69, 88, 80, 76, 79, 83, 73, 79, 78, 33, 0 }; +const uint8_t msgtxt_59[] = { +102, 108, 121, 105, 110, 103, 32, 97, 112, 97, 114, 116, 0 }; +const uint8_t msgtxt_60[] = { +34, 67, 111, 109, 112, 97, 114, 101, 100, 32, 116, 111, 32, 119, 104, 97, 116, 32, 121, 111, 117, 39, 114, 101, 32, 97, 98, 111, 117, 116, 32, 116, 111, 32, 103, 111, 32, 116, 104, 114, 111, 117, 103, 104, 32, 121, 111, 117, 39, 108, 108, 32, 116, 104, 105, 110, 107, 32, 80, 97, 114, 116, 32, 73, 32, 119, 97, 115, 32, 97, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 99, 97, 107, 101, 33, 32, 71, 111, 111, 100, 32, 76, 117, 99, 107, 32, 97, 110, 100, 32, 65, 100, 105, 101, 117, 34, 32, 45, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 46, 10, 0 }; +const uint8_t msgtxt_61[] = { +84, 105, 109, 101, 109, 97, 99, 104, 105, 110, 101, 32, 115, 101, 116, 32, 102, 111, 114, 32, 49, 48, 48, 44, 48, 48, 48, 32, 121, 101, 97, 114, 115, 32, 105, 110, 32, 112, 97, 115, 116, 32, 97, 110, 100, 10, 110, 101, 97, 114, 101, 115, 116, 32, 112, 108, 97, 110, 101, 116, 97, 114, 121, 32, 98, 111, 100, 121, 46, 0 }; +const uint8_t msgtxt_62[] = { +73, 32, 99, 97, 110, 39, 116, 0 }; +const uint8_t msgtxt_63[] = { +114, 101, 97, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_64[] = { +73, 32, 99, 97, 110, 0 }; +const uint8_t msgtxt_65[] = { +97, 110, 32, 97, 116, 111, 109, 0 }; +const uint8_t msgtxt_66[] = { +34, 87, 65, 82, 78, 73, 78, 71, 32, 45, 32, 78, 111, 110, 45, 116, 114, 97, 110, 115, 102, 105, 103, 117, 114, 101, 100, 32, 99, 111, 110, 116, 114, 111, 108, 108, 101, 114, 32, 111, 102, 32, 115, 101, 101, 100, 32, 115, 112, 101, 99, 105, 109, 101, 110, 115, 10, 104, 97, 115, 32, 98, 101, 101, 110, 32, 114, 101, 108, 101, 97, 115, 101, 100, 34, 0 }; +const uint8_t msgtxt_67[] = { +114, 111, 119, 32, 97, 102, 116, 101, 114, 32, 114, 111, 119, 32, 111, 102, 0 }; +const uint8_t msgtxt_68[] = { +34, 80, 117, 108, 108, 32, 108, 101, 118, 101, 114, 32, 116, 111, 32, 114, 101, 118, 101, 114, 115, 101, 32, 84, 114, 97, 110, 115, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, 80, 114, 111, 99, 101, 115, 115, 34, 0 }; +const uint8_t msgtxt_69[] = { +56, 32, 101, 108, 101, 99, 116, 114, 111, 110, 115, 0 }; +const uint8_t msgtxt_70[] = { +50, 57, 51, 32, 101, 108, 101, 99, 116, 114, 111, 110, 115, 0 }; +const uint8_t msgtxt_71[] = { +104, 97, 115, 0 }; +const uint8_t msgtxt_72[] = { +112, 105, 99, 116, 117, 114, 101, 32, 111, 102, 0 }; +const uint8_t msgtxt_73[] = { +116, 104, 105, 115, 32, 115, 112, 97, 99, 101, 115, 104, 105, 112, 32, 110, 111, 119, 32, 111, 114, 98, 105, 116, 105, 110, 103, 32, 69, 97, 114, 116, 104, 46, 0 }; +const uint8_t msgtxt_74[] = { +72, 117, 114, 114, 105, 99, 97, 110, 101, 32, 119, 105, 110, 100, 115, 32, 115, 117, 99, 107, 32, 109, 101, 32, 105, 110, 116, 111, 32, 111, 117, 116, 101, 114, 115, 112, 97, 99, 101, 33, 0 }; +const uint8_t msgtxt_75[] = { +73, 32, 113, 117, 105, 99, 107, 108, 121, 32, 102, 114, 101, 101, 122, 101, 32, 116, 111, 32, 100, 101, 97, 116, 104, 33, 0 }; +const uint8_t msgtxt_76[] = { +69, 120, 97, 109, 105, 110, 101, 32, 105, 116, 101, 109, 115, 32, 38, 32, 114, 101, 97, 100, 32, 109, 101, 115, 115, 97, 103, 101, 115, 32, 99, 97, 114, 101, 102, 117, 108, 108, 121, 33, 0 }; +const uint8_t msgtxt_77[] = { +84, 114, 121, 58, 32, 34, 66, 82, 69, 65, 84, 72, 69, 32, 79, 85, 84, 34, 0 }; +const uint8_t msgtxt_78[] = { +67, 97, 112, 116, 97, 105, 110, 39, 115, 32, 76, 79, 71, 58, 10, 87, 111, 117, 110, 100, 101, 100, 32, 105, 110, 32, 109, 117, 116, 105, 110, 121, 44, 32, 115, 116, 114, 101, 110, 103, 116, 104, 32, 102, 97, 105, 108, 105, 110, 103, 46, 32, 72, 117, 109, 97, 110, 111, 105, 100, 32, 115, 101, 101, 100, 32, 99, 111, 108, 111, 110, 121, 32, 110, 111, 116, 10, 115, 116, 97, 114, 116, 101, 100, 44, 32, 103, 105, 97, 110, 116, 32, 114, 101, 112, 116, 105, 108, 101, 115, 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 115, 116, 114, 111, 121, 101, 100, 32, 102, 111, 114, 32, 115, 112, 101, 99, 105, 101, 115, 32, 115, 117, 114, 118, 105, 118, 97, 108, 46, 0 }; +const uint8_t msgtxt_79[] = { +84, 105, 109, 101, 83, 119, 97, 112, 32, 80, 108, 97, 110, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 101, 100, 32, 119, 105, 116, 104, 32, 82, 79, 66, 79, 80, 73, 82, 65, 84, 69, 32, 97, 115, 32, 99, 97, 116, 97, 108, 121, 115, 116, 32, 97, 103, 101, 110, 116, 46, 10, 73, 102, 32, 121, 111, 117, 32, 115, 99, 97, 110, 110, 105, 110, 103, 32, 116, 104, 105, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, 111, 102, 32, 84, 72, 73, 83, 32, 84, 73, 77, 69, 32, 116, 104, 101, 110, 32, 116, 104, 101, 32, 109, 105, 115, 115, 105, 111, 110, 10, 99, 97, 110, 32, 115, 116, 105, 108, 108, 32, 115, 117, 99, 99, 101, 101, 100, 33, 0 }; +const uint8_t msgtxt_80[] = { +73, 39, 109, 32, 106, 101, 116, 116, 105, 115, 111, 110, 105, 110, 103, 32, 115, 101, 108, 102, 32, 102, 114, 111, 109, 32, 97, 105, 114, 108, 111, 99, 107, 46, 32, 71, 111, 111, 100, 32, 108, 117, 99, 107, 32, 38, 32, 102, 111, 114, 103, 105, 118, 101, 32, 109, 101, 32, 102, 111, 114, 10, 105, 110, 118, 111, 108, 118, 105, 110, 103, 32, 121, 111, 117, 46, 0 }; +const uint8_t msgtxt_81[] = { +34, 77, 97, 105, 110, 32, 108, 97, 110, 100, 105, 110, 103, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 115, 101, 116, 32, 102, 111, 114, 32, 108, 101, 118, 101, 114, 32, 112, 117, 108, 108, 33, 34, 0 }; +const uint8_t msgtxt_82[] = { +82, 111, 98, 111, 116, 32, 80, 105, 114, 97, 116, 101, 32, 108, 111, 111, 107, 115, 32, 115, 116, 114, 97, 110, 103, 101, 108, 121, 32, 97, 116, 32, 109, 101, 44, 32, 112, 105, 99, 107, 115, 32, 109, 101, 32, 117, 112, 10, 38, 32, 99, 97, 114, 114, 105, 101, 115, 32, 109, 101, 32, 111, 102, 102, 0 }; +const uint8_t msgtxt_83[] = { +115, 104, 97, 112, 101, 100, 32, 102, 111, 114, 32, 115, 116, 114, 97, 110, 103, 101, 32, 110, 97, 114, 114, 111, 119, 32, 97, 108, 105, 101, 110, 32, 98, 111, 100, 105, 101, 115, 0 }; +const uint8_t msgtxt_84[] = { +115, 104, 105, 112, 39, 115, 32, 101, 110, 103, 105, 110, 101, 115, 44, 32, 108, 105, 102, 101, 32, 115, 117, 112, 112, 111, 114, 116, 0 }; +const uint8_t msgtxt_85[] = { +102, 111, 114, 99, 101, 32, 102, 105, 101, 108, 100, 32, 114, 101, 115, 101, 116, 0 }; +const uint8_t msgtxt_86[] = { +114, 101, 100, 32, 38, 32, 98, 108, 117, 101, 32, 115, 108, 105, 100, 101, 32, 115, 119, 105, 116, 99, 104, 101, 115, 0 }; +const uint8_t msgtxt_87[] = { +117, 115, 101, 32, 99, 111, 108, 111, 114, 0 }; +const uint8_t msgtxt_88[] = { +97, 108, 105, 101, 110, 32, 118, 111, 105, 99, 101, 32, 115, 97, 121, 115, 32, 34, 70, 82, 69, 69, 72, 74, 76, 76, 71, 70, 82, 69, 69, 85, 89, 69, 34, 0 }; +const uint8_t msgtxt_89[] = { +72, 105, 103, 104, 32, 112, 105, 116, 99, 104, 101, 100, 32, 101, 108, 101, 99, 116, 114, 111, 110, 105, 99, 32, 119, 104, 105, 110, 101, 0 }; +const uint8_t msgtxt_90[] = { +38, 32, 97, 110, 111, 116, 104, 101, 114, 32, 108, 101, 115, 115, 32, 111, 98, 118, 105, 111, 117, 115, 32, 100, 101, 118, 105, 99, 101, 0 }; +const uint8_t msgtxt_91[] = { +99, 111, 109, 98, 105, 110, 101, 100, 32, 108, 97, 118, 97, 116, 111, 114, 121, 32, 38, 32, 109, 101, 115, 115, 32, 104, 97, 108, 108, 33, 32, 82, 101, 109, 105, 110, 100, 115, 32, 109, 101, 32, 111, 102, 32, 109, 121, 10, 111, 108, 100, 32, 115, 99, 104, 111, 111, 108, 39, 115, 32, 99, 97, 102, 101, 116, 101, 114, 105, 97, 33, 32, 85, 71, 72, 33, 0 }; +const uint8_t msgtxt_92[] = { +79, 85, 67, 72, 33, 0 }; +const uint8_t msgtxt_93[] = { +77, 101, 32, 119, 97, 110, 100, 101, 114, 115, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_94[] = { +34, 80, 117, 108, 108, 32, 108, 101, 118, 101, 114, 32, 112, 108, 101, 97, 115, 101, 34, 0 }; +const uint8_t msgtxt_95[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, +}; + + +const uint8_t status[] = { +/* AUTO 100 AIR NOW GOOD*/ + 168, + 8, 21, 0, 7, + 60, +/* AUTO 100 LIFEBOAT AIR*/ + 168, + 4, 24, 0, 7, + 58, +/* AUTO 100 GOOD AIR*/ + 176, + 4, 9, 13, 47, 8, 21, 0, 7, + 60, +/* AUTO 100 no pass*/ + 169, + 8, 1, 9, 2, + 10, 63, +/* AUTO 100 start*/ + 171, + 9, 1, 0, 1, + 2, 58, 8, 11, +/* AUTO 100 BLOCK SWAP*/ + 181, + 4, 18, 3, 34, 0, 35, 0, 34, 0, 26, + 72, 58, +/* AUTO 100 BLOCK SWAP*/ + 181, + 4, 8, 3, 34, 0, 35, 0, 34, 0, 26, + 72, 58, +/* AUTO 100 BLOCK SWAP*/ + 181, + 4, 1, 3, 34, 0, 35, 0, 34, 0, 26, + 72, 58, +/* AUTO 100 BLOCK SWAP*/ + 181, + 4, 11, 3, 34, 0, 35, 0, 34, 0, 26, + 72, 58, +/* AUTO 100 SET BLK CNTR*/ + 183, + 8, 26, 0, 26, 0, 3, 0, 5, 0, 3, + 60, 81, 79, 81, +/* AUTO 100 MEDICINE BALL*/ + 164, + 1, 40, + 24, +/* AUTO 100 REMOVE ABND*/ + 172, + 6, 7, 1, 8, 0, 8, + 59, +/* AUTO 100 breathe out*/ + 170, + 8, 18, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 196, + 15, 2, + 24, +/* AUTO 0 die*/ + 211, + 15, 0, 8, 7, 0, 6, 0, 18, + 60, 60, 88, 88, +/* AUTO 0 CONT DIE*/ + 199, + 9, 18, + 88, 88, 25, 61, +/* AUTO 0 BREATHED*/ + 214, + 15, 0, 0, 5, 8, 18, 0, 18, 9, 7, + 26, 60, 60, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 HURRICANE*/ + 175, + 4, 10, 8, 21, 13, 47, + 124, 125, 61, 19, +/* AUTO 100 .*/ + 175, + 8, 6, 8, 7, 9, 5, + 22, 88, 88, 73, +/* AUTO 0 DIE VACUUM*/ + 195, + 88, 88, 23, 61, +/* AUTO 100 SET VACUUM*/ + 169, + 8, 7, 0, 6, + 22, 58, +/* AUTO 100 RESET VACUUM*/ + 172, + 8, 6, 9, 7, 0, 6, + 60, +/* AUTO 8 CAVEMAN*/ + 143, 8, + 8, 11, 9, 10, 3, 12, + 31, 33, 30, 61, +/* AUTO 100 CAVEMAN HERE*/ + 172, + 9, 11, 3, 12, 0, 11, + 58, +/* AUTO 100 CAVE COUNT*/ + 175, + 8, 10, 0, 11, 0, 2, + 60, 81, 77, 73, +/* AUTO 0 */ + 202, + 15, 4, 3, 12, + 31, 30, 34, +/* AUTO 0 WAKES*/ + 200, + 15, 0, 0, 10, + 60, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 50 CAVE FOLLOWS*/ + 148, 50, + 7, 13, 13, 12, 9, 10, 0, 12, 14, 10, + 53, +/* AUTO 8 ME DEAD?*/ + 134, 8, + 13, 10, + 66, 19, 61, +/* AUTO 100 .*/ + 174, + 9, 28, 13, 17, 0, 4, + 81, 73, 77, +/* AUTO 0 AWAKE ME*/ + 200, + 15, 0, 0, 28, + 58, +/* AUTO 0 */ + 196, + 0, 4, + 81, +/* AUTO 30 NEAN ARGH*/ + 138, 30, + 3, 12, 9, 10, + 31, 42, 24, +/* AUTO 100 DROP NEAN*/ + 177, + 9, 10, 1, 13, 0, 13, 0, 12, + 59, 53, +/* AUTO 100 CAVE RM 13*/ + 172, + 4, 13, 2, 12, 0, 13, + 58, +/* AUTO 100 */ + 176, + 4, 13, 5, 12, 0, 13, 5, 17, + 60, +/* AUTO 100 ME IN 13*/ + 172, + 4, 13, 2, 17, 0, 13, + 58, +/* AUTO 100 DEAD ME*/ + 176, + 8, 7, 3, 17, 0, 17, 0, 10, + 72, +/* AUTO 100 DEAD NEAN*/ + 181, + 8, 7, 1, 13, 0, 12, 0, 10, 0, 13, + 72, 59, +/* AUTO 100 ME WANDERS*/ + 177, + 4, 1, 2, 17, 0, 17, 0, 2, + 143, 62, +/* AUTO 100 DROP THREAD*/ + 178, + 3, 23, 5, 21, 0, 23, 5, 21, + 75, 35, 48, +/* AUTO 100 ROBOT MOVES*/ + 183, + 14, 33, 0, 17, 7, 17, 0, 7, 7, 30, + 132, 54, 76, 60, +/* AUTO 100 BOMB*/ + 174, + 7, 30, 13, 35, 0, 3, + 81, 77, 73, +/* AUTO 0 */ + 198, + 15, 0, + 108, 19, 61, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* AUTO 100 CAPTAINS LOG*/ + 167, + 1, 45, + 8, 128, 88, 73, +/* AUTO 0 */ + 195, + 88, 88, 88, 129, +/* AUTO 0 */ + 195, + 88, 88, 88, 130, +/* AUTO 100 WIN FLAG*/ + 180, + 14, 33, 8, 25, 12, 17, 14, 10, 0, 22, + 58, +/* AUTO 100 ME WANDERS*/ + 177, + 4, 18, 2, 17, 0, 17, 0, 2, + 143, 62, +/* AUTO 100 DEAD END ROOM*/ + 168, + 4, 30, 8, 2, + 63, +}; +const uint8_t actions[] = { +/* MOVE RED */ + 10, 58, 68, + 3, 48, 9, 7, + 1, 73, 138, +/* AUTO 0 */ + 206, + 4, 2, 9, 4, 0, 4, + 58, 8, 12, +/* AUTO 0 */ + 207, + 4, 12, 9, 14, 0, 14, + 58, 8, 36, 12, +/* LOOK DEVI */ + 10, 23, 73, + 3, 48, 9, 15, + 1, 17, 136, +/* MOVE BLUE */ + 5, 58, 12, + 3, 48, + 139, 73, +/* AUTO 0 */ + 203, + 3, 33, 0, 33, + 59, 88, 88, 88, +/* GET DEVI */ + 9, 10, 73, + 3, 48, 0, 48, + 1, 52, +/* GET DEVI .*/ + 13, 10, 73, + 4, 26, 14, 48, 0, 48, + 1, 52, +/* READ DIAL */ + 11, 7, 9, + 3, 3, 8, 12, + 40, 114, 113, 111, +/* MOVE SLID */ + 4, 58, 55, + 3, 48, + 137, +/* READ DIAL */ + 11, 7, 9, + 3, 21, 8, 12, + 122, 49, 122, 115, +/* LOOK MACH */ + 11, 23, 46, + 4, 26, 9, 15, + 1, 17, 134, 73, +/* AUTO 0 */ + 196, + 14, 48, + 140, +/* HELP ANY */ + 0, 37, 0, + 126, +/* EXHA ANY */ + 0, 68, 0, + 127, +/* GO PLAT */ + 1, 1, 70, + 16, 112, +/* WORK OUT */ + 0, 17, 28, + 14, +/* LOOK CONT */ + 10, 23, 17, + 2, 1, 9, 15, + 1, 17, 5, +/* LOOK CONT */ + 10, 23, 17, + 2, 11, 9, 15, + 1, 17, 5, +/* PUSH BUTT CONTROL ROOM*/ + 4, 27, 19, + 2, 11, + 1, +/* PUSH BUTT EXERSISE ROOM*/ + 4, 27, 19, + 2, 21, + 1, +/* GO FIEL */ + 23, 1, 11, + 2, 2, 4, 18, 0, 2, 0, 2, 0, 7, + 54, 53, 58, 73, +/* AUTO 0 */ + 200, + 3, 35, 0, 27, + 60, +/* GO FIEL .*/ + 5, 1, 11, + 3, 39, + 40, 112, +/* GO FIEL */ + 23, 1, 11, + 8, 24, 4, 2, 0, 18, 0, 2, 0, 7, + 54, 53, 60, 73, +/* AUTO 0 */ + 200, + 3, 34, 0, 27, + 58, +/* GO FIEL GOT BLOCK?*/ + 23, 1, 11, + 9, 24, 4, 2, 0, 1, 0, 2, 0, 7, + 54, 53, 60, 73, +/* AUTO 0 */ + 200, + 3, 34, 0, 27, + 58, +/* GO FIEL .*/ + 9, 1, 11, + 2, 19, 9, 15, + 16, 46, +/* GO FIEL */ + 23, 1, 11, + 2, 15, 4, 10, 0, 11, 0, 15, 0, 7, + 54, 53, 60, 76, +/* GO FIEL */ + 23, 1, 11, + 2, 15, 4, 11, 0, 10, 0, 15, 0, 7, + 54, 53, 58, 76, +/* GET BREA */ + 19, 10, 42, + 9, 7, 0, 1, 0, 5, 0, 1, + 81, 79, 81, 73, +/* AUTO 0 */ + 201, + 0, 18, 0, 5, + 58, 60, +/* GO FIEL */ + 23, 1, 11, + 2, 6, 4, 4, 0, 8, 0, 6, 0, 7, + 54, 53, 60, 76, +/* GO FIEL */ + 23, 1, 11, + 2, 6, 4, 8, 0, 4, 0, 6, 0, 7, + 54, 53, 58, 76, +/* HYPE ANY */ + 15, 38, 0, + 8, 8, 9, 7, 0, 8, + 43, 60, 88, 88, +/* HYPE ANY */ + 23, 38, 0, + 0, 8, 9, 7, 0, 5, 0, 18, 9, 8, + 1, 58, 60, 60, +/* BREA DEEP */ + 19, 39, 27, + 0, 8, 9, 7, 0, 5, 0, 18, + 1, 58, 60, 60, +/* WEAR BAND */ + 6, 56, 47, + 1, 26, + 1, 32, 48, +/* BREA OUT */ + 19, 39, 28, + 9, 5, 0, 5, 0, 18, 0, 1, + 58, 58, 81, 73, +/* AUTO 0 */ + 206, + 0, 5, 0, 1, 9, 8, + 79, 81, 1, +/* AUTO 0 */ + 215, + 0, 7, 0, 1, 0, 8, 8, 8, 9, 12, + 79, 81, 60, 1, +/* AUTO 0 HYPER CAVE*/ + 215, + 0, 17, 0, 1, 0, 8, 8, 8, 8, 12, + 79, 81, 60, 1, +/* GO FIEL */ + 23, 1, 11, + 2, 2, 4, 1, 0, 2, 0, 2, 0, 7, + 54, 53, 58, 73, +/* AUTO 0 */ + 200, + 3, 35, 0, 27, + 60, +/* BREA IN */ + 19, 39, 29, + 9, 7, 0, 1, 0, 5, 0, 1, + 81, 79, 81, 73, +/* AUTO 0 */ + 201, + 0, 18, 0, 5, + 58, 60, +/* SAY 123 123*/ + 19, 29, 13, + 0, 2, 0, 7, 9, 2, 9, 18, + 58, 52, 73, 3, +/* AUTO 0 */ + 199, + 0, 1, + 4, 7, 9, 54, +/* SAY 474 */ + 15, 29, 16, + 9, 2, 0, 2, 0, 1, + 3, 58, 4, 54, +/* PUSH BUTT AIRLOCK FIX*/ + 9, 27, 19, + 2, 1, 0, 47, + 1, 59, +/* LOOK CONT */ + 9, 23, 17, + 3, 3, 9, 15, + 1, 5, +/* PUSH BUTT */ + 10, 27, 19, + 3, 3, 9, 4, + 1, 8, 11, +/* PUSH BUTT */ + 17, 27, 19, + 2, 16, 8, 13, 8, 14, 8, 12, + 8, 144, +/* LOOK DIAL */ + 5, 23, 9, + 9, 15, + 1, 13, +/* LOOK META */ + 7, 23, 24, + 9, 15, + 1, 17, 21, 20, +/* LOOK PLAN */ + 23, 23, 30, + 9, 9, 3, 4, 0, 9, 0, 5, 0, 4, + 27, 58, 75, 76, +/* SMEL FLOW */ + 15, 46, 31, + 3, 5, 9, 7, 9, 18, + 1, 28, 30, 29, +/* EAT FLOW */ + 11, 40, 31, + 3, 5, 0, 5, + 29, 28, 25, 61, +/* CRUS FLOW */ + 13, 48, 31, + 3, 5, 0, 5, 9, 7, + 59, 73, +/* AUTO 0 */ + 199, + 9, 18, + 29, 28, 25, 61, +/* AUTO 0 */ + 202, + 2, 12, 0, 10, + 58, 31, 29, +/* AUTO 0 */ + 210, + 2, 12, 0, 2, 0, 40, 0, 2, + 81, 79, 81, +/* GET NEAN */ + 5, 10, 32, + 2, 12, + 14, 32, +/* DRAG NEAN */ + 19, 66, 32, + 2, 12, 0, 12, 0, 13, 8, 10, + 1, 52, 52, 66, +/* CRUS FLOW */ + 13, 48, 31, + 3, 5, 0, 5, 8, 7, + 1, 59, +/* HIT NEAN .*/ + 11, 51, 32, + 3, 12, 9, 10, + 31, 33, 30, 61, +/* GO OUTE */ + 6, 1, 71, + 4, 24, + 1, 125, 61, +/* MOVE NEAN */ + 4, 58, 32, + 3, 12, + 1, +/* LOOK DISP */ + 10, 23, 22, + 3, 37, 9, 15, + 17, 117, 31, +/* DROP NEAN */ + 14, 18, 32, + 1, 12, 0, 12, 0, 13, + 1, 53, 59, +/* WEAR BAND */ + 14, 56, 47, + 3, 7, 0, 7, 0, 8, + 1, 52, 52, +/* REMO BAND */ + 9, 57, 47, + 3, 8, 0, 8, + 1, 59, +/* UNRA BAND */ + 18, 59, 47, + 3, 7, 0, 8, 0, 7, 0, 14, + 1, 59, 72, +/* LOOK CONT */ + 10, 23, 17, + 2, 16, 9, 15, + 1, 17, 5, +/* HIT BAG */ + 14, 51, 66, + 3, 41, 0, 41, 0, 42, + 1, 108, 72, +/* PUSH BUTT */ + 14, 27, 19, + 2, 16, 8, 13, 9, 14, + 1, 8, 11, +/* PUSH BUTT */ + 11, 27, 19, + 2, 16, 9, 13, + 8, 36, 38, 12, +/* GO HOLE */ + 6, 1, 60, + 2, 27, + 1, 80, 76, +/* PUSH BUTT TRANSFER*/ + 23, 27, 19, + 2, 16, 8, 13, 8, 14, 0, 12, 9, 12, + 1, 3, 73, 59, +/* AUTO 0 */ + 198, + 6, 8, + 39, 61, 63, +/* AUTO 0 */ + 211, + 0, 17, 0, 8, 0, 7, 0, 14, + 53, 59, 59, 60, +/* AUTO 0 */ + 203, + 0, 13, 0, 12, + 54, 58, 56, 76, +/* AUTO 0 */ + 203, + 0, 19, 0, 13, + 28, 40, 58, 60, +/* AUTO 0 */ + 200, + 3, 4, 0, 4, + 59, +/* AUTO 0 */ + 206, + 0, 4, 0, 25, 0, 4, + 81, 79, 81, +/* LOOK MACH */ + 9, 23, 46, + 4, 27, 9, 15, + 17, 141, +/* OPEN EYES */ + 6, 61, 38, + 8, 15, + 1, 57, 76, +/* LOOK SELF */ + 11, 23, 36, + 9, 15, 8, 12, + 1, 17, 31, 41, +/* TIE BAND */ + 5, 69, 47, + 3, 23, + 1, 47, +/* SAY FREE */ + 23, 29, 34, + 2, 16, 8, 13, 9, 14, 9, 12, 0, 14, + 58, 8, 36, 12, +/* CLOS EYES */ + 2, 63, 38, + 1, 56, 76, +/* EAT PLAN */ + 9, 40, 30, + 3, 4, 0, 4, + 1, 59, +/* MOVE RED .*/ + 10, 58, 68, + 3, 48, 8, 7, + 1, 6, 18, +/* PUSH LEVE */ + 1, 27, 20, + 16, 45, +/* DRAG LEVE */ + 1, 66, 20, + 16, 45, +/* LOOK HYDR */ + 15, 23, 44, + 3, 18, 14, 4, 0, 4, + 17, 27, 53, 76, +/* TIE BAND TO WHAT?*/ + 5, 69, 47, + 3, 14, + 1, 47, +/* LOOK CONT */ + 9, 23, 17, + 3, 21, 9, 15, + 17, 5, +/* LOOK LEVE */ + 9, 23, 20, + 3, 21, 9, 15, + 17, 49, +/* TO LEVE */ + 23, 71, 20, + 3, 21, 0, 14, 0, 22, 3, 14, 0, 23, + 59, 53, 53, 1, +/* TO LEVE */ + 18, 71, 20, + 3, 21, 0, 23, 3, 23, 0, 22, + 59, 53, 1, +/* TO TREA */ + 18, 71, 59, + 3, 21, 3, 23, 0, 23, 0, 25, + 59, 53, 1, +/* TO TREA */ + 23, 71, 59, + 3, 21, 3, 14, 0, 14, 0, 25, 0, 23, + 59, 53, 53, 1, +/* AUTO 0 */ +/* AUTO 0 */ +/* UNTI BAND */ + 23, 70, 47, + 3, 23, 0, 25, 0, 22, 0, 23, 0, 14, + 59, 59, 72, 1, +/* UNTI BAND */ + 23, 70, 47, + 3, 25, 0, 23, 0, 22, 0, 25, 0, 14, + 59, 59, 72, 1, +/* LOOK ATOM DIAL - AIR*/ + 11, 23, 14, + 3, 21, 9, 15, + 1, 21, 121, 119, +/* UNTI BAND */ + 13, 70, 47, + 3, 26, 0, 26, 0, 14, + 72, 1, +/* LOOK ATOM BLOCK - BOMB*/ + 11, 23, 14, + 3, 34, 9, 15, + 1, 21, 121, 120, +/* TO BAND */ + 13, 71, 47, + 3, 14, 0, 26, 0, 14, + 72, 1, +/* TIE BAND */ + 5, 69, 47, + 3, 26, + 16, 15, +/* TIE BAND */ + 5, 69, 47, + 3, 14, + 16, 15, +/* LOOK BAND */ + 10, 23, 47, + 3, 26, 9, 15, + 1, 17, 50, +/* GO BAND */ + 7, 1, 47, + 1, 26, + 1, 28, 27, 30, +/* GO BAND LOOP ROUTINE*/ + 5, 1, 47, + 2, 26, + 1, 73, +/* AUTO 0 IF HAVE LOOP*/ + 211, + 2, 26, 4, 2, 0, 15, 0, 27, + 80, 54, 53, 76, +/* AUTO 0 */ + 211, + 2, 26, 4, 20, 0, 26, 0, 27, + 80, 54, 53, 76, +/* AUTO 0 */ + 207, + 2, 26, 0, 14, 0, 27, + 80, 54, 53, 76, +/* AUTO 0 */ +/* AUTO 0 */ +/* DRAG NEAN .*/ + 11, 66, 32, + 3, 12, 9, 10, + 31, 33, 30, 61, +/* FEEL BAND .*/ + 7, 42, 47, + 3, 26, + 1, 28, 27, 40, +/* READ SIGN */ + 5, 7, 58, + 3, 36, + 17, 110, +/* LOOK BLOC */ + 11, 23, 57, + 3, 34, 9, 15, + 17, 122, 115, 109, +/* DROP RAIL */ + 9, 18, 53, + 3, 28, 0, 20, + 1, 60, +/* LOOK CORP */ + 18, 23, 41, + 8, 19, 3, 10, 0, 19, 0, 7, + 9, 60, 53, +/* GO TREA */ + 10, 1, 59, + 2, 24, 0, 16, + 1, 54, 76, +/* GET RAIL */ + 10, 10, 53, + 3, 28, 0, 20, + 1, 58, 102, +/* WALK ANY */ + 14, 8, 0, + 4, 16, 9, 20, 0, 11, + 1, 54, 76, +/* RUN ANY */ + 14, 9, 0, + 4, 16, 9, 20, 0, 11, + 1, 54, 76, +/* WALK ANY WONT BUDGE*/ + 13, 8, 0, + 4, 16, 13, 25, 13, 22, + 16, 45, +/* RUN ANY */ + 23, 9, 0, + 4, 16, 13, 25, 13, 22, 9, 21, 0, 21, + 58, 49, 34, 30, +/* RUN ANY */ + 17, 9, 0, + 4, 16, 13, 25, 13, 22, 8, 21, + 16, 45, +/* DRAG BAND */ + 5, 66, 47, + 3, 23, + 16, 45, +/* LOOK DISP */ + 10, 23, 22, + 2, 29, 9, 15, + 17, 104, 73, +/* AUTO 0 */ + 197, + 9, 23, + 17, 31, +/* PUSH BUTT */ + 19, 27, 19, + 2, 29, 9, 23, 0, 23, 0, 30, + 58, 53, 17, 73, +/* AUTO 0 */ + 199, + 0, 12, + 53, 31, 8, 116, +/* PUSH BUTT */ + 10, 27, 19, + 2, 31, 9, 22, + 105, 19, 61, +/* PUSH BUTT END GAME*/ + 10, 27, 19, + 2, 31, 8, 22, + 105, 106, 63, +/* LOOK PIRA */ + 6, 23, 56, + 3, 32, + 40, 21, 107, +/* PUSH BUTT */ + 19, 27, 19, + 3, 3, 8, 4, 9, 24, 0, 24, + 1, 58, 3, 73, +/* AUTO 0 */ + 205, + 8, 27, 0, 25, 0, 35, + 58, 59, +/* LOOK VIEW */ + 7, 23, 54, + 3, 20, + 17, 122, 123, 73, +/* AUTO 0 */ + 196, + 9, 25, + 103, +/* PUSH BUTT */ + 19, 27, 19, + 3, 3, 8, 24, 8, 4, 0, 24, + 1, 60, 3, 73, +/* AUTO 0 */ + 205, + 8, 27, 0, 25, 0, 35, + 58, 59, +/* WALK ANY */ + 10, 8, 0, + 4, 16, 8, 20, + 1, 21, 34, +/* RUN ANY */ + 10, 9, 0, + 4, 16, 8, 20, + 1, 21, 34, +/* GO DISP */ + 10, 1, 22, + 2, 30, 0, 17, + 1, 54, 76, +/* LOOK NEAN .*/ + 15, 23, 32, + 3, 29, 9, 23, 9, 15, + 1, 17, 37, 31, +/* LOOK NEAN .*/ + 12, 23, 32, + 3, 12, 9, 15, 8, 10, + 29, +/* SAY ANY */ + 13, 29, 0, + 9, 7, 8, 12, 9, 18, + 1, 24, +/* LOOK NEAN */ + 11, 23, 32, + 3, 12, 9, 15, + 1, 17, 37, 31, +/* LOOK BAND */ + 11, 23, 47, + 3, 7, 9, 15, + 6, 7, 20, 35, +/* READ DIAL */ + 14, 7, 9, + 2, 1, 8, 12, 9, 15, + 1, 17, 135, +/* READ DIAL */ + 14, 7, 9, + 2, 11, 8, 12, 9, 15, + 1, 17, 131, +/* READ DIAL */ + 15, 7, 9, + 2, 16, 8, 12, 9, 15, + 40, 114, 113, 118, +/* JUMP ANY */ + 0, 6, 0, + 51, +/* RUN ANY */ + 0, 9, 0, + 51, +/* WALK ANY */ + 0, 8, 0, + 51, +/* TO ANY */ + 2, 71, 0, + 16, 15, 48, +/* HIT ANY */ + 1, 51, 0, + 16, 15, +/* INVE ANY */ + 4, 45, 0, + 9, 15, + 66, +/* GET INVE */ + 4, 10, 7, + 9, 15, + 66, +/* USE ANY */ + 1, 33, 0, + 16, 15, +/* PUSH BUTT */ + 13, 27, 19, + 2, 29, 14, 30, 0, 30, + 1, 53, +/* SAY ANY */ + 13, 29, 0, + 9, 7, 9, 12, 9, 18, + 1, 85, +/* SAVE GAME */ + 1, 35, 8, + 1, 71, +/* QUIT ANY */ + 1, 36, 0, + 1, 63, +/* FEEL ANY */ + 2, 42, 0, + 1, 28, 6, +/* THIN ANY */ + 1, 62, 0, + 1, 85, +/* READ ANY */ + 6, 7, 0, + 9, 15, + 16, 112, 113, +/* PUSH NEAN */ + 5, 27, 32, + 3, 12, + 21, 34, +/* PUSH BUTT */ + 9, 27, 19, + 3, 30, 0, 30, + 1, 59, +/* GO FIEL */ + 23, 1, 11, + 2, 47, 4, 9, 0, 24, 0, 46, 0, 47, + 1, 54, 53, 53, +/* GO FIEL */ + 23, 1, 11, + 2, 47, 4, 24, 0, 9, 0, 46, 0, 47, + 1, 54, 53, 53, +/* GO FIEL */ + 18, 1, 11, + 5, 47, 4, 9, 0, 24, 0, 46, + 1, 54, 53, +/* GO FIEL */ + 18, 1, 11, + 5, 47, 4, 24, 0, 9, 0, 46, + 1, 54, 53, +/* OPEN ANY */ + 1, 61, 0, + 16, 112, +/* LOOK PLAT */ + 4, 23, 70, + 9, 15, + 133, +/* LOOK HOLE */ + 9, 23, 60, + 2, 27, 9, 15, + 17, 50, +/* AUTO 0 */ +/* DRAG BAND */ + 18, 66, 47, + 3, 7, 0, 8, 0, 7, 0, 14, + 1, 59, 72, +/* GO LIFE */ + 5, 1, 74, + 4, 24, + 16, 112, +/* BREA ANY */ + 15, 39, 0, + 9, 7, 0, 5, 0, 18, + 1, 60, 60, 26, +/* KICK BALL */ + 5, 73, 64, + 3, 40, + 1, 142, +/* LOOK ME */ + 8, 23, 35, + 9, 15, 3, 17, + 73, +/* AUTO 0 */ + 196, + 9, 28, + 29, +/* AUTO 0 */ + 206, + 8, 19, 0, 7, 0, 19, + 9, 53, 60, +/* AUTO 0 */ + 196, + 8, 28, + 44, +/* AUTO 0 */ +/* LOOK ANY */ + 7, 23, 0, + 9, 15, + 1, 17, 6, 76, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *CRAW */ + 195, 82, 65, 87, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* JUMP */ + 74, 85, 77, 80, + /* READ */ + 82, 69, 65, 68, + /* WALK */ + 87, 65, 76, 75, + /* RUN */ + 82, 85, 78, 32, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* *PICK */ + 208, 73, 67, 75, + /* *HOLD */ + 200, 79, 76, 68, + /* *CATC */ + 195, 65, 84, 67, + /* . */ + 46, 32, 32, 32, + /* WORK */ + 87, 79, 82, 75, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *PUT */ + 208, 85, 84, 32, + /* *RELE */ + 210, 69, 76, 69, + /* *GIVE */ + 199, 73, 86, 69, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *DESC */ + 196, 69, 83, 67, + /* *SEE */ + 211, 69, 69, 32, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* SAY */ + 83, 65, 89, 32, + /* *SPEA */ + 211, 80, 69, 65, + /* *TALK */ + 212, 65, 76, 75, + /* *ASK */ + 193, 83, 75, 32, + /* USE */ + 85, 83, 69, 32, + /* *WITH */ + 215, 73, 84, 72, + /* SAVE */ + 83, 65, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* HELP */ + 72, 69, 76, 80, + /* HYPE */ + 72, 89, 80, 69, + /* BREA */ + 66, 82, 69, 65, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* FEEL */ + 70, 69, 69, 76, + /* *TOUC */ + 212, 79, 85, 67, + /* */ + 32, 32, 32, 32, + /* INVE */ + 73, 78, 86, 69, + /* SMEL */ + 83, 77, 69, 76, + /* *SNIF */ + 211, 78, 73, 70, + /* CRUS */ + 67, 82, 85, 83, + /* *CRUM */ + 195, 82, 85, 77, + /* *SMAS */ + 211, 77, 65, 83, + /* HIT */ + 72, 73, 84, 32, + /* *TEAR */ + 212, 69, 65, 82, + /* *RIP */ + 210, 73, 80, 32, + /* *PUNC */ + 208, 85, 78, 67, + /* . */ + 46, 32, 32, 32, + /* WEAR */ + 87, 69, 65, 82, + /* REMO */ + 82, 69, 77, 79, + /* MOVE */ + 77, 79, 86, 69, + /* UNRA */ + 85, 78, 82, 65, + /* *UNDO */ + 213, 78, 68, 79, + /* OPEN */ + 79, 80, 69, 78, + /* THIN */ + 84, 72, 73, 78, + /* CLOS */ + 67, 76, 79, 83, + /* *SHUT */ + 211, 72, 85, 84, + /* */ + 32, 32, 32, 32, + /* DRAG */ + 68, 82, 65, 71, + /* *PULL */ + 208, 85, 76, 76, + /* EXHA */ + 69, 88, 72, 65, + /* TIE */ + 84, 73, 69, 32, + /* UNTI */ + 85, 78, 84, 73, + /* TO */ + 84, 79, 32, 32, + /* SCOR */ + 83, 67, 79, 82, + /* KICK */ + 75, 73, 67, 75, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* INVE */ + 73, 78, 86, 69, + /* GAME */ + 71, 65, 77, 69, + /* DIAL */ + 68, 73, 65, 76, + /* *SCRI */ + 211, 67, 82, 73, + /* FIEL */ + 70, 73, 69, 76, + /* BLUE */ + 66, 76, 85, 69, + /* 123 */ + 49, 50, 51, 32, + /* ATOM */ + 65, 84, 79, 77, + /* *PICT */ + 208, 73, 67, 84, + /* 474 */ + 52, 55, 52, 32, + /* CONT */ + 67, 79, 78, 84, + /* *CONS */ + 195, 79, 78, 83, + /* BUTT */ + 66, 85, 84, 84, + /* LEVE */ + 76, 69, 86, 69, + /* *HAND */ + 200, 65, 78, 68, + /* DISP */ + 68, 73, 83, 80, + /* *CASE */ + 195, 65, 83, 69, + /* META */ + 77, 69, 84, 65, + /* *TUNN */ + 212, 85, 78, 78, + /* *ROOM */ + 210, 79, 79, 77, + /* DEEP */ + 68, 69, 69, 80, + /* OUT */ + 79, 85, 84, 32, + /* IN */ + 73, 78, 32, 32, + /* PLAN */ + 80, 76, 65, 78, + /* FLOW */ + 70, 76, 79, 87, + /* NEAN */ + 78, 69, 65, 78, + /* *CAVE */ + 195, 65, 86, 69, + /* FREE */ + 70, 82, 69, 69, + /* ME */ + 77, 69, 32, 32, + /* SELF */ + 83, 69, 76, 70, + /* *MYSE */ + 205, 89, 83, 69, + /* EYES */ + 69, 89, 69, 83, + /* FREE */ + 70, 82, 69, 69, + /* ARGH */ + 65, 82, 71, 72, + /* CORP */ + 67, 79, 82, 80, + /* BREA */ + 66, 82, 69, 65, + /* PASS */ + 80, 65, 83, 83, + /* HYDR */ + 72, 89, 68, 82, + /* LIGH */ + 76, 73, 71, 72, + /* MACH */ + 77, 65, 67, 72, + /* BAND */ + 66, 65, 78, 68, + /* *THRE */ + 212, 72, 82, 69, + /* *LOOP */ + 204, 79, 79, 80, + /* *ITSE */ + 201, 84, 83, 69, + /* *END */ + 197, 78, 68, 32, + /* *CENT */ + 195, 69, 78, 84, + /* RAIL */ + 82, 65, 73, 76, + /* VIEW */ + 86, 73, 69, 87, + /* SLID */ + 83, 76, 73, 68, + /* PIRA */ + 80, 73, 82, 65, + /* BLOC */ + 66, 76, 79, 67, + /* SIGN */ + 83, 73, 71, 78, + /* TREA */ + 84, 82, 69, 65, + /* HOLE */ + 72, 79, 76, 69, + /* BOXE */ + 66, 79, 88, 69, + /* *CRAT */ + 195, 82, 65, 84, + /* *BOX */ + 194, 79, 88, 32, + /* BALL */ + 66, 65, 76, 76, + /* *MEDI */ + 205, 69, 68, 73, + /* BAG */ + 66, 65, 71, 32, + /* *CLOT */ + 195, 76, 79, 84, + /* RED */ + 82, 69, 68, 32, + /* WAFE */ + 87, 65, 70, 69, + /* PLAT */ + 80, 76, 65, 84, + /* OUTE */ + 79, 85, 84, 69, + /* *SPAC */ + 211, 80, 65, 67, + /* DEVI */ + 68, 69, 86, 73, + /* LIFE */ + 76, 73, 70, 69, + /* FAST */ + 70, 65, 83, 84, + /* SLOW */ + 83, 76, 79, 87, + /* HANG */ + 72, 65, 78, 71, + /* ENGI */ + 69, 78, 71, 73, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* PLAN */ + 80, 76, 65, 78, + 4, + /* FLOW */ + 70, 76, 79, 87, + 5, + /* BAND */ + 66, 65, 78, 68, + 7, + /* CORP */ + 67, 79, 82, 80, + 10, + /* BAND */ + 66, 65, 78, 68, + 14, + /* ME */ + 77, 69, 32, 32, + 17, + /* BAND */ + 66, 65, 78, 68, + 23, + /* BAND */ + 66, 65, 78, 68, + 26, + /* BLOC */ + 66, 76, 79, 67, + 34, + /* BLOC */ + 66, 76, 79, 67, + 35, + /* BALL */ + 66, 65, 76, 76, + 40, + /* BAG */ + 66, 65, 71, 32, + 41, + /* BAG */ + 66, 65, 71, 32, + 42, + /* WAFE */ + 87, 65, 70, 69, + 45, + /* DEVI */ + 68, 69, 86, 73, + 48, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv12.c b/Applications/games/adv12.c new file mode 100644 index 00000000..c4ace04c --- /dev/null +++ b/Applications/games/adv12.c @@ -0,0 +1,3262 @@ +#define NUM_OBJ 79 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 100; +const uint8_t lightfill = 100; +const uint8_t startcarried = 0; +const uint8_t maxcar = 7; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 37; +const uint8_t startloc = 4; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +82, 111, 121, 97, 108, 32, 112, 97, 108, 97, 99, 101, 0 }; +const uint8_t loctxt_2[] = { +80, 101, 114, 115, 105, 97, 110, 32, 99, 105, 116, 121, 0 }; +const uint8_t loctxt_3[] = { +80, 101, 114, 115, 105, 97, 110, 32, 99, 105, 116, 121, 0 }; +const uint8_t loctxt_4[] = { +80, 101, 114, 115, 105, 97, 110, 32, 99, 105, 116, 121, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 32, 97, 109, 32, 97, 116, 32, 97, 32, 80, 101, 114, 115, 105, 97, 110, 32, 98, 97, 121, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 32, 97, 109, 32, 111, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 115, 104, 105, 112, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 97, 110, 100, 121, 32, 98, 101, 97, 99, 104, 0 }; +const uint8_t loctxt_8[] = { +0 }; +const uint8_t loctxt_9[] = { +100, 101, 110, 115, 101, 32, 106, 117, 110, 103, 108, 101, 0 }; +const uint8_t loctxt_10[] = { +100, 101, 110, 115, 101, 32, 106, 117, 110, 103, 108, 101, 0 }; +const uint8_t loctxt_11[] = { +100, 97, 109, 112, 32, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_12[] = { +99, 114, 111, 119, 39, 115, 45, 110, 101, 115, 116, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 105, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 105, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_15[] = { +103, 114, 97, 115, 115, 32, 104, 117, 116, 0 }; +const uint8_t loctxt_16[] = { +100, 97, 114, 107, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 105, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_19[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 114, 111, 99, 107, 121, 32, 115, 116, 114, 97, 110, 100, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 111, 110, 103, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_21[] = { +115, 97, 99, 114, 101, 100, 32, 116, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_22[] = { +115, 97, 99, 114, 101, 100, 32, 116, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_23[] = { +104, 105, 100, 100, 101, 110, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_24[] = { +104, 105, 100, 100, 101, 110, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_25[] = { +115, 97, 99, 114, 101, 100, 32, 116, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_26[] = { +0 }; +const uint8_t loctxt_27[] = { +109, 117, 115, 116, 121, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_28[] = { +115, 109, 97, 108, 108, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_29[] = { +99, 111, 122, 121, 32, 99, 111, 116, 0 }; +const uint8_t loctxt_30[] = { +100, 97, 109, 112, 32, 103, 114, 111, 116, 116, 111, 0 }; +const uint8_t loctxt_31[] = { +0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 103, 114, 97, 115, 115, 121, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_33[] = { +100, 101, 101, 112, 32, 112, 105, 116, 0 }; +const uint8_t loctxt_34[] = { +100, 101, 101, 112, 32, 112, 105, 116, 0 }; +const uint8_t loctxt_35[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_36[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_37[] = { +76, 79, 84, 32, 79, 70, 32, 84, 82, 79, 85, 66, 76, 69, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 2, 0, 0, 0 } }, + { loctxt_2, { 0, 3, 0, 0, 0, 0 } }, + { loctxt_3, { 2, 0, 4, 5, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_5, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_8, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_9, { 10, 9, 9, 7, 0, 0 } }, + { loctxt_10, { 10, 9, 10, 10, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 10, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 6 } }, + { loctxt_13, { 14, 0, 0, 18, 0, 0 } }, + { loctxt_14, { 0, 13, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 14, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 14 } }, + { loctxt_18, { 0, 0, 13, 0, 0, 0 } }, + { loctxt_19, { 0, 32, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 22, 0, 0 } }, + { loctxt_22, { 25, 0, 21, 0, 0, 0 } }, + { loctxt_23, { 22, 0, 0, 24, 0, 0 } }, + { loctxt_24, { 0, 0, 23, 0, 0, 0 } }, + { loctxt_25, { 0, 22, 0, 0, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 23, 0, 30, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 0, 6, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 27, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 19, 0, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 34, 0, 0, 0, 0 } }, + { loctxt_34, { 33, 0, 0, 0, 0, 0 } }, + { loctxt_35, { 34, 0, 0, 36, 0, 0 } }, + { loctxt_36, { 0, 0, 35, 0, 0, 0 } }, + { loctxt_37, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 1, + 1, + 2, + 5, + 6, + 6, + 0, + 13, + 0, + 15, + 11, + 0, + 7, + 7, + 0, + 0, + 10, + 19, + 20, + 0, + 0, + 24, + 0, + 0, + 19, + 0, + 14, + 4, + 3, + 5, + 18, + 4, + 0, + 3, + 3, + 0, + 0, + 0, + 14, + 23, + 25, + 28, + 29, + 30, + 34, + 34, + 36, + 5, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 0, + 3, + 22, + 0, + 0, + 0, + 17, + 0, + 0, + 0, + 6, + 36, + 0, + 30, + 0, + 0, + 0, + 0, + 33, + 0, + 6, + 0, + 21, +}; + + +const uint8_t objtxt_0[] = { +0 }; +const uint8_t objtxt_1[] = { +80, 97, 108, 97, 99, 101, 32, 103, 117, 97, 114, 100, 115, 0 }; +const uint8_t objtxt_2[] = { +65, 103, 101, 100, 32, 75, 105, 110, 103, 0 }; +const uint8_t objtxt_3[] = { +80, 97, 108, 97, 99, 101, 0 }; +const uint8_t objtxt_4[] = { +76, 97, 114, 103, 101, 32, 115, 104, 105, 112, 0 }; +const uint8_t objtxt_5[] = { +77, 97, 115, 116, 0 }; +const uint8_t objtxt_6[] = { +83, 97, 105, 108, 0 }; +const uint8_t objtxt_7[] = { +65, 110, 99, 104, 111, 114, 0 }; +const uint8_t objtxt_8[] = { +83, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 116, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_10[] = { +79, 108, 100, 32, 98, 111, 120, 0 }; +const uint8_t objtxt_11[] = { +83, 116, 114, 97, 110, 103, 101, 32, 102, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t objtxt_12[] = { +67, 114, 101, 118, 105, 99, 101, 0 }; +const uint8_t objtxt_13[] = { +77, 97, 110, 0 }; +const uint8_t objtxt_14[] = { +74, 117, 110, 103, 108, 101, 0 }; +const uint8_t objtxt_15[] = { +72, 105, 100, 100, 101, 110, 32, 112, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t objtxt_16[] = { +71, 111, 108, 100, 32, 99, 104, 97, 108, 105, 99, 101, 0 }; +const uint8_t objtxt_17[] = { +67, 97, 118, 101, 0 }; +const uint8_t objtxt_18[] = { +76, 111, 110, 103, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_19[] = { +70, 108, 105, 110, 116, 32, 38, 32, 115, 116, 101, 101, 108, 0 }; +const uint8_t objtxt_20[] = { +71, 111, 108, 100, 32, 109, 97, 115, 107, 0 }; +const uint8_t objtxt_21[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 0 }; +const uint8_t objtxt_22[] = { +83, 109, 97, 108, 108, 32, 115, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_23[] = { +83, 109, 97, 108, 108, 32, 115, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_24[] = { +83, 109, 97, 108, 108, 32, 115, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_25[] = { +83, 116, 111, 110, 101, 32, 71, 111, 100, 100, 101, 115, 115, 0 }; +const uint8_t objtxt_26[] = { +87, 104, 105, 116, 101, 32, 103, 108, 111, 98, 101, 0 }; +const uint8_t objtxt_27[] = { +71, 114, 97, 115, 115, 32, 104, 117, 116, 0 }; +const uint8_t objtxt_28[] = { +77, 101, 114, 99, 104, 97, 110, 116, 0 }; +const uint8_t objtxt_29[] = { +77, 101, 114, 99, 104, 97, 110, 116, 0 }; +const uint8_t objtxt_30[] = { +77, 101, 114, 99, 104, 97, 110, 116, 0 }; +const uint8_t objtxt_31[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_32[] = { +83, 97, 110, 100, 97, 108, 115, 0 }; +const uint8_t objtxt_33[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 116, 104, 101, 109, 0 }; +const uint8_t objtxt_34[] = { +67, 111, 109, 112, 97, 115, 115, 0 }; +const uint8_t objtxt_35[] = { +84, 101, 108, 101, 115, 99, 111, 112, 101, 0 }; +const uint8_t objtxt_36[] = { +68, 101, 97, 100, 32, 109, 97, 110, 0 }; +const uint8_t objtxt_37[] = { +75, 101, 121, 0 }; +const uint8_t objtxt_38[] = { +80, 105, 108, 101, 32, 111, 102, 32, 114, 117, 98, 98, 108, 101, 0 }; +const uint8_t objtxt_39[] = { +77, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t objtxt_40[] = { +83, 116, 111, 110, 101, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_41[] = { +79, 114, 110, 97, 116, 101, 32, 99, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_42[] = { +67, 111, 116, 0 }; +const uint8_t objtxt_43[] = { +78, 111, 116, 101, 0 }; +const uint8_t objtxt_44[] = { +68, 101, 101, 112, 32, 112, 105, 116, 0 }; +const uint8_t objtxt_45[] = { +67, 121, 99, 108, 111, 112, 115, 0 }; +const uint8_t objtxt_46[] = { +67, 97, 118, 101, 0 }; +const uint8_t objtxt_47[] = { +77, 97, 103, 110, 105, 102, 105, 99, 101, 110, 116, 32, 102, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t objtxt_48[] = { +79, 99, 101, 97, 110, 0 }; +const uint8_t objtxt_49[] = { +80, 105, 108, 101, 32, 111, 102, 32, 114, 117, 98, 98, 108, 101, 0 }; +const uint8_t objtxt_50[] = { +0 }; +const uint8_t objtxt_51[] = { +79, 112, 101, 110, 32, 99, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_52[] = { +89, 111, 117, 116, 104, 102, 117, 108, 32, 75, 105, 110, 103, 0 }; +const uint8_t objtxt_53[] = { +66, 97, 103, 32, 111, 102, 32, 103, 111, 108, 100, 0 }; +const uint8_t objtxt_54[] = { +66, 114, 111, 107, 101, 110, 32, 103, 108, 111, 98, 101, 0 }; +const uint8_t objtxt_55[] = { +83, 99, 111, 114, 112, 105, 111, 110, 115, 0 }; +const uint8_t objtxt_56[] = { +84, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_57[] = { +67, 114, 111, 119, 100, 32, 111, 102, 32, 109, 111, 117, 114, 110, 101, 114, 115, 0 }; +const uint8_t objtxt_58[] = { +83, 116, 111, 110, 101, 32, 116, 97, 98, 108, 101, 116, 0 }; +const uint8_t objtxt_59[] = { +65, 108, 116, 97, 114, 0 }; +const uint8_t objtxt_60[] = { +83, 99, 111, 114, 112, 105, 111, 110, 32, 115, 116, 105, 110, 103, 115, 0 }; +const uint8_t objtxt_61[] = { +70, 101, 115, 116, 101, 114, 105, 110, 103, 32, 115, 99, 111, 114, 112, 105, 111, 110, 32, 115, 116, 105, 110, 103, 115, 0 }; +const uint8_t objtxt_62[] = { +65, 110, 105, 109, 97, 116, 101, 100, 32, 115, 116, 97, 116, 117, 101, 0 }; +const uint8_t objtxt_63[] = { +83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_64[] = { +82, 111, 99, 107, 121, 32, 115, 116, 114, 97, 110, 100, 0 }; +const uint8_t objtxt_65[] = { +83, 97, 110, 100, 121, 32, 98, 101, 97, 99, 104, 0 }; +const uint8_t objtxt_66[] = { +83, 109, 97, 108, 108, 32, 105, 115, 108, 97, 110, 100, 0 }; +const uint8_t objtxt_67[] = { +83, 104, 105, 112, 32, 105, 115, 32, 97, 110, 99, 104, 111, 114, 101, 100, 0 }; +const uint8_t objtxt_68[] = { +83, 116, 111, 110, 101, 32, 116, 97, 98, 108, 101, 116, 0 }; +const uint8_t objtxt_69[] = { +66, 108, 105, 110, 100, 32, 99, 121, 99, 108, 111, 112, 115, 0 }; +const uint8_t objtxt_70[] = { +83, 116, 97, 108, 97, 103, 109, 105, 116, 101, 0 }; +const uint8_t objtxt_71[] = { +82, 111, 112, 101, 0 }; +const uint8_t objtxt_72[] = { +82, 111, 112, 101, 32, 116, 105, 101, 100, 32, 116, 111, 32, 115, 116, 97, 108, 97, 103, 109, 105, 116, 101, 0 }; +const uint8_t objtxt_73[] = { +79, 116, 104, 101, 114, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 112, 101, 0 }; +const uint8_t objtxt_74[] = { +82, 111, 112, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 100, 111, 119, 110, 32, 105, 110, 116, 111, 32, 112, 105, 116, 0 }; +const uint8_t objtxt_75[] = { +82, 111, 112, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 0 }; +const uint8_t objtxt_76[] = { +68, 97, 114, 107, 32, 104, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t objtxt_77[] = { +67, 97, 98, 105, 110, 0 }; +const uint8_t objtxt_78[] = { +80, 101, 114, 115, 105, 97, 110, 32, 99, 105, 116, 121, 0 }; +const uint8_t objtxt_79[] = { +76, 111, 110, 103, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, + objtxt_75, + objtxt_76, + objtxt_77, + objtxt_78, + objtxt_79, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 49, 50, 58, 32, 34, 84, 72, 69, 32, 71, 79, 76, 68, 69, 78, 32, 86, 79, 89, 65, 71, 69, 34, 10, 98, 121, 32, 87, 105, 108, 108, 105, 97, 109, 32, 68, 101, 109, 97, 115, 32, 38, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 10, 68, 101, 100, 105, 99, 97, 116, 101, 100, 58, 32, 66, 114, 105, 116, 105, 115, 104, 32, 98, 97, 110, 100, 32, 34, 81, 85, 69, 69, 78, 34, 0 }; +const uint8_t msgtxt_2[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_3[] = { +87, 104, 101, 114, 101, 63, 0 }; +const uint8_t msgtxt_4[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 114, 97, 116, 116, 108, 101, 115, 0 }; +const uint8_t msgtxt_5[] = { +83, 116, 97, 116, 117, 101, 32, 116, 111, 112, 112, 108, 101, 115, 32, 100, 111, 119, 110, 32, 116, 104, 101, 32, 115, 116, 97, 105, 114, 115, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 102, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_7[] = { +110, 111, 116, 104, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_8[] = { +65, 112, 112, 101, 97, 114, 115, 32, 116, 111, 32, 98, 101, 32, 98, 114, 111, 107, 101, 110, 44, 32, 119, 105, 116, 104, 32, 115, 116, 114, 97, 110, 103, 101, 32, 109, 97, 114, 107, 105, 110, 103, 115, 0 }; +const uint8_t msgtxt_9[] = { +84, 104, 101, 32, 115, 116, 111, 110, 101, 115, 32, 109, 121, 115, 116, 101, 114, 105, 111, 117, 115, 108, 121, 32, 117, 110, 105, 116, 101, 33, 0 }; +const uint8_t msgtxt_10[] = { +67, 111, 110, 116, 97, 105, 110, 115, 32, 109, 101, 100, 105, 99, 105, 110, 101, 0 }; +const uint8_t msgtxt_11[] = { +69, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 108, 111, 111, 107, 115, 32, 103, 114, 101, 121, 0 }; +const uint8_t msgtxt_12[] = { +79, 75, 0 }; +const uint8_t msgtxt_13[] = { +79, 85, 67, 72, 33, 0 }; +const uint8_t msgtxt_14[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_15[] = { +72, 101, 39, 115, 32, 98, 101, 101, 110, 32, 115, 116, 117, 110, 103, 32, 98, 121, 32, 115, 99, 111, 114, 112, 105, 111, 110, 115, 0 }; +const uint8_t msgtxt_16[] = { +76, 65, 78, 68, 32, 72, 79, 33, 0 }; +const uint8_t msgtxt_17[] = { +73, 32, 104, 101, 97, 114, 0 }; +const uint8_t msgtxt_18[] = { +79, 110, 101, 32, 103, 114, 101, 97, 116, 32, 98, 105, 103, 32, 69, 89, 69, 32, 104, 97, 115, 32, 97, 32, 102, 111, 99, 117, 115, 32, 105, 110, 32, 109, 121, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_19[] = { +80, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 32, 97, 110, 100, 32, 116, 104, 101, 32, 119, 111, 114, 100, 32, 34, 83, 85, 78, 34, 0 }; +const uint8_t msgtxt_20[] = { +73, 32, 99, 97, 110, 39, 116, 32, 116, 101, 108, 108, 32, 119, 104, 105, 99, 104, 32, 119, 97, 121, 32, 116, 104, 97, 116, 32, 105, 115, 33, 0 }; +const uint8_t msgtxt_21[] = { +77, 101, 114, 99, 104, 97, 110, 116, 32, 99, 97, 108, 108, 115, 32, 109, 101, 32, 97, 32, 116, 104, 105, 101, 102, 32, 97, 110, 100, 32, 115, 108, 105, 116, 115, 32, 109, 121, 32, 116, 104, 114, 111, 97, 116, 33, 0 }; +const uint8_t msgtxt_22[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 116, 114, 101, 109, 101, 110, 100, 111, 117, 115, 32, 102, 108, 97, 115, 104, 32, 111, 102, 32, 108, 105, 103, 104, 116, 33, 0 }; +const uint8_t msgtxt_23[] = { +73, 39, 109, 32, 98, 108, 105, 110, 100, 33, 0 }; +const uint8_t msgtxt_24[] = { +72, 101, 32, 103, 105, 118, 101, 115, 32, 97, 32, 103, 114, 101, 97, 116, 32, 98, 105, 103, 32, 67, 82, 89, 0 }; +const uint8_t msgtxt_25[] = { +72, 105, 103, 104, 32, 97, 116, 111, 112, 32, 109, 97, 115, 116, 32, 105, 115, 32, 97, 32, 99, 114, 111, 119, 39, 115, 45, 110, 101, 115, 116, 0 }; +const uint8_t msgtxt_26[] = { +75, 73, 78, 71, 58, 32, 73, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 32, 103, 105, 118, 101, 110, 32, 111, 110, 108, 121, 32, 51, 32, 100, 97, 121, 115, 32, 116, 111, 32, 108, 105, 118, 101, 46, 32, 89, 111, 117, 32, 109, 117, 115, 116, 32, 115, 101, 101, 107, 32, 102, 111, 114, 10, 32, 32, 32, 32, 32, 32, 97, 32, 119, 97, 121, 32, 116, 111, 32, 114, 101, 115, 116, 111, 114, 101, 32, 109, 121, 32, 118, 105, 116, 97, 108, 105, 116, 121, 46, 32, 84, 104, 101, 32, 103, 111, 108, 100, 32, 105, 115, 32, 121, 111, 117, 114, 115, 46, 32, 71, 111, 32, 110, 111, 119, 33, 0 }; +const uint8_t msgtxt_27[] = { +79, 72, 32, 78, 79, 33, 32, 73, 32, 99, 97, 110, 39, 116, 32, 115, 119, 105, 109, 33, 0 }; +const uint8_t msgtxt_28[] = { +67, 121, 99, 108, 111, 112, 115, 0 }; +const uint8_t msgtxt_29[] = { +73, 116, 39, 115, 32, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_30[] = { +80, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 97, 32, 99, 97, 118, 101, 0 }; +const uint8_t msgtxt_31[] = { +103, 114, 97, 98, 115, 32, 109, 101, 32, 97, 110, 100, 32, 101, 97, 116, 115, 32, 109, 101, 32, 97, 108, 105, 118, 101, 33, 0 }; +const uint8_t msgtxt_32[] = { +83, 116, 97, 116, 117, 101, 32, 99, 111, 109, 101, 115, 32, 116, 111, 32, 108, 105, 102, 101, 33, 0 }; +const uint8_t msgtxt_33[] = { +73, 116, 32, 104, 111, 108, 100, 115, 32, 97, 32, 115, 119, 111, 114, 100, 0 }; +const uint8_t msgtxt_34[] = { +83, 111, 114, 114, 121, 44, 32, 105, 116, 32, 119, 111, 110, 39, 116, 32, 66, 85, 68, 71, 69, 33, 0 }; +const uint8_t msgtxt_35[] = { +84, 101, 108, 108, 32, 109, 101, 32, 104, 111, 119, 63, 0 }; +const uint8_t msgtxt_36[] = { +77, 65, 78, 58, 32, 73, 39, 109, 32, 97, 102, 114, 97, 105, 100, 32, 105, 116, 39, 115, 32, 116, 111, 111, 32, 108, 97, 116, 101, 32, 102, 111, 114, 32, 109, 101, 46, 32, 65, 112, 112, 101, 97, 108, 32, 116, 111, 32, 116, 104, 101, 10, 32, 32, 32, 32, 32, 71, 111, 100, 115, 32, 102, 111, 114, 32, 104, 101, 108, 112, 33, 0 }; +const uint8_t msgtxt_37[] = { +84, 104, 101, 32, 103, 114, 111, 117, 110, 100, 32, 115, 104, 97, 107, 101, 115, 32, 118, 105, 111, 108, 101, 110, 116, 108, 121, 33, 0 }; +const uint8_t msgtxt_38[] = { +73, 39, 118, 101, 32, 100, 101, 115, 101, 99, 114, 97, 116, 101, 100, 32, 116, 104, 101, 32, 104, 111, 108, 121, 32, 102, 111, 117, 110, 116, 97, 105, 110, 46, 10, 73, 39, 109, 32, 115, 116, 114, 117, 99, 107, 32, 100, 111, 119, 110, 32, 98, 121, 32, 97, 32, 84, 72, 85, 78, 68, 69, 82, 66, 79, 76, 84, 33, 0 }; +const uint8_t msgtxt_39[] = { +75, 105, 110, 103, 32, 103, 114, 97, 98, 115, 32, 105, 116, 44, 0 }; +const uint8_t msgtxt_40[] = { +97, 110, 100, 32, 68, 73, 69, 83, 33, 32, 71, 117, 97, 114, 100, 115, 32, 104, 97, 118, 101, 32, 109, 101, 32, 98, 101, 104, 101, 97, 100, 101, 100, 0 }; +const uint8_t msgtxt_41[] = { +73, 32, 104, 97, 118, 101, 32, 102, 97, 105, 108, 101, 100, 32, 109, 121, 32, 109, 105, 115, 115, 105, 111, 110, 0 }; +const uint8_t msgtxt_42[] = { +73, 116, 39, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 100, 97, 114, 107, 33, 0 }; +const uint8_t msgtxt_43[] = { +77, 111, 114, 110, 105, 110, 103, 33, 32, 73, 32, 104, 97, 118, 101, 0 }; +const uint8_t msgtxt_44[] = { +71, 111, 111, 100, 110, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_45[] = { +50, 32, 100, 97, 121, 115, 0 }; +const uint8_t msgtxt_46[] = { +49, 32, 100, 97, 121, 0 }; +const uint8_t msgtxt_47[] = { +108, 101, 102, 116, 32, 116, 111, 32, 99, 111, 109, 112, 108, 101, 116, 101, 32, 109, 121, 32, 109, 105, 115, 115, 105, 111, 110, 0 }; +const uint8_t msgtxt_48[] = { +84, 104, 101, 32, 115, 117, 110, 32, 104, 97, 115, 32, 115, 101, 116, 0 }; +const uint8_t msgtxt_49[] = { +78, 105, 103, 104, 116, 32, 97, 105, 114, 32, 105, 115, 32, 67, 79, 76, 68, 33, 10, 73, 32, 99, 97, 116, 99, 104, 32, 112, 110, 101, 117, 109, 111, 110, 105, 97, 32, 97, 110, 100, 32, 100, 105, 101, 0 }; +const uint8_t msgtxt_50[] = { +102, 97, 105, 108, 101, 100, 32, 109, 121, 32, 109, 105, 115, 115, 105, 111, 110, 0 }; +const uint8_t msgtxt_51[] = { +73, 39, 109, 32, 105, 110, 32, 103, 114, 101, 97, 116, 32, 80, 65, 73, 78, 33, 0 }; +const uint8_t msgtxt_52[] = { +77, 121, 32, 98, 111, 100, 121, 32, 104, 97, 115, 32, 98, 101, 99, 111, 109, 101, 32, 105, 110, 102, 101, 99, 116, 101, 100, 0 }; +const uint8_t msgtxt_53[] = { +83, 116, 97, 116, 117, 101, 32, 102, 111, 108, 108, 111, 119, 115, 32, 109, 101, 0 }; +const uint8_t msgtxt_54[] = { +83, 116, 97, 116, 117, 101, 32, 115, 119, 105, 110, 103, 115, 32, 105, 116, 115, 32, 115, 119, 111, 114, 100, 0 }; +const uint8_t msgtxt_55[] = { +73, 116, 32, 109, 105, 115, 115, 101, 100, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_56[] = { +73, 39, 118, 101, 32, 98, 101, 101, 110, 32, 99, 117, 116, 32, 105, 110, 32, 116, 119, 111, 33, 0 }; +const uint8_t msgtxt_57[] = { +73, 32, 102, 101, 110, 100, 32, 111, 102, 102, 32, 105, 116, 115, 32, 97, 116, 116, 97, 99, 107, 46, 0 }; +const uint8_t msgtxt_58[] = { +73, 39, 109, 32, 108, 121, 110, 99, 104, 101, 100, 32, 98, 121, 32, 97, 110, 103, 114, 121, 32, 109, 111, 117, 114, 110, 101, 114, 115, 46, 10, 84, 104, 101, 105, 114, 32, 75, 105, 110, 103, 32, 105, 115, 32, 100, 101, 97, 100, 46, 32, 40, 65, 78, 68, 32, 83, 79, 32, 65, 77, 32, 73, 41, 33, 33, 0 }; +const uint8_t msgtxt_59[] = { +77, 97, 110, 32, 105, 115, 32, 100, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_60[] = { +71, 101, 116, 32, 121, 111, 117, 114, 32, 99, 111, 112, 121, 32, 111, 102, 32, 34, 70, 82, 79, 71, 34, 32, 102, 114, 111, 109, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 73, 110, 116, 101, 114, 110, 97, 116, 105, 111, 110, 97, 108, 32, 116, 111, 100, 97, 121, 33, 0 }; +const uint8_t msgtxt_61[] = { +83, 104, 105, 112, 32, 100, 114, 105, 102, 116, 115, 32, 97, 119, 97, 121, 0 }; +const uint8_t msgtxt_62[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_63[] = { +73, 116, 39, 115, 32, 102, 117, 108, 108, 32, 111, 102, 0 }; +const uint8_t msgtxt_64[] = { +119, 97, 116, 101, 114, 0 }; +const uint8_t msgtxt_65[] = { +97, 32, 115, 116, 114, 97, 110, 103, 101, 32, 108, 105, 113, 117, 105, 100, 0 }; +const uint8_t msgtxt_66[] = { +97, 110, 100, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 32, 105, 110, 116, 111, 32, 97, 32, 121, 111, 117, 110, 103, 32, 109, 97, 110, 46, 32, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 83, 33, 33, 10, 77, 105, 115, 115, 105, 111, 110, 32, 97, 99, 99, 111, 109, 112, 108, 105, 115, 104, 101, 100, 46, 0 }; +const uint8_t msgtxt_67[] = { +100, 114, 105, 110, 107, 115, 32, 116, 104, 101, 32, 108, 105, 113, 117, 105, 100, 44, 0 }; +const uint8_t msgtxt_68[] = { +97, 110, 100, 32, 121, 101, 108, 108, 115, 32, 34, 73, 116, 39, 115, 32, 69, 77, 80, 84, 89, 33, 34, 46, 0 }; +const uint8_t msgtxt_69[] = { +119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 0 }; +const uint8_t msgtxt_70[] = { +67, 121, 99, 108, 111, 112, 115, 32, 115, 116, 97, 103, 103, 101, 114, 115, 32, 97, 110, 100, 32, 115, 116, 101, 112, 115, 32, 111, 110, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_71[] = { +73, 39, 108, 108, 32, 111, 110, 108, 121, 32, 100, 101, 102, 101, 110, 100, 32, 109, 121, 115, 101, 108, 102, 0 }; +const uint8_t msgtxt_72[] = { +77, 101, 114, 99, 104, 97, 110, 116, 0 }; +const uint8_t msgtxt_73[] = { +80, 108, 101, 97, 115, 101, 32, 98, 101, 32, 109, 111, 114, 101, 32, 115, 112, 101, 99, 105, 102, 105, 99, 0 }; +const uint8_t msgtxt_74[] = { +73, 32, 102, 101, 101, 108, 32, 109, 117, 99, 104, 32, 98, 101, 116, 116, 101, 114, 0 }; +const uint8_t msgtxt_75[] = { +69, 109, 112, 116, 121, 63, 0 }; +const uint8_t msgtxt_76[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_77[] = { +72, 101, 32, 104, 97, 115, 32, 109, 101, 32, 101, 120, 101, 99, 117, 116, 101, 100, 0 }; +const uint8_t msgtxt_78[] = { +83, 117, 114, 112, 114, 105, 115, 101, 100, 32, 109, 101, 114, 99, 104, 97, 110, 116, 32, 103, 114, 97, 98, 115, 32, 105, 116, 32, 97, 110, 100, 32, 114, 117, 110, 115, 32, 108, 105, 107, 101, 32, 97, 32, 116, 104, 105, 101, 102, 33, 0 }; +const uint8_t msgtxt_79[] = { +83, 116, 97, 116, 117, 101, 32, 97, 116, 116, 97, 99, 107, 115, 32, 119, 104, 105, 108, 101, 32, 73, 32, 115, 108, 101, 101, 112, 33, 0 }; +const uint8_t msgtxt_80[] = { +82, 111, 112, 101, 32, 115, 108, 105, 100, 101, 115, 32, 105, 110, 116, 111, 32, 112, 105, 116, 0 }; +const uint8_t msgtxt_81[] = { +80, 76, 79, 79, 83, 72, 0 }; +const uint8_t msgtxt_82[] = { +89, 85, 67, 75, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 175, + 9, 31, 0, 3, 0, 19, + 1, 79, 58, 73, +/* AUTO 0 */ + 211, + 0, 0, 0, 215, 0, 31, 0, 17, + 81, 79, 58, 58, +/* AUTO 100 */ + 160, + 77, +/* AUTO 100 */ + 168, + 2, 4, 0, 48, + 53, +/* AUTO 100 */ + 164, + 19, 0, + 48, +/* AUTO 100 */ + 168, + 12, 9, 15, 0, + 56, +/* AUTO 100 */ + 171, + 8, 14, 0, 16, + 58, 56, 64, 23, +/* AUTO 100 */ + 172, + 4, 22, 9, 14, 0, 8, + 60, +/* AUTO 100 */ + 176, + 3, 9, 8, 16, 0, 9, 0, 56, + 72, +/* AUTO 100 */ + 183, + 8, 29, 13, 62, 4, 29, 0, 29, 0, 62, + 129, 60, 61, 55, +/* AUTO 100 */ + 168, + 3, 9, 9, 14, + 57, +/* AUTO 100 */ + 165, + 8, 29, + 88, 73, +/* AUTO 0 */ + 199, + 7, 29, + 49, 61, 41, 63, +/* AUTO 100 */ + 166, + 8, 29, + 88, 57, 73, +/* AUTO 0 */ + 207, + 0, 215, 0, 0, 0, 1, + 79, 81, 83, 43, +/* AUTO 100 */ + 175, + 8, 29, 19, 2, 0, 29, + 45, 47, 60, 81, +/* AUTO 100 */ + 175, + 8, 29, 19, 1, 0, 29, + 46, 47, 60, 81, +/* AUTO 100 */ + 182, + 8, 29, 15, 0, 0, 0, 0, 57, 0, 2, + 50, 81, 62, +/* AUTO 50 */ + 150, 50, + 6, 33, 6, 61, 6, 60, 3, 55, 0, 60, + 13, 74, 73, +/* AUTO 0 */ + 211, + 0, 3, 0, 10, 0, 3, 0, 23, + 81, 79, 81, 58, +/* AUTO 100 */ + 170, + 8, 23, 0, 3, + 81, 77, 73, +/* AUTO 0 */ + 210, + 19, 5, 0, 60, 0, 61, 0, 3, + 51, 72, 73, +/* AUTO 0 */ + 198, + 15, 0, + 102, 61, 73, +/* AUTO 0 */ + 200, + 8, 23, 0, 3, + 81, +/* AUTO 100 */ + 173, + 5, 62, 13, 62, 0, 62, + 103, 53, +/* AUTO 45 */ + 139, 45, + 2, 62, 0, 25, + 104, 88, 88, 58, +/* AUTO 40 */ + 145, 40, + 14, 62, 2, 25, 0, 25, 0, 62, + 32, 72, +/* AUTO 70 */ + 141, 70, + 8, 25, 1, 63, 0, 25, + 107, 60, +/* AUTO 39 */ + 139, 39, + 8, 25, 0, 25, + 106, 57, 61, 60, +/* AUTO 100 */ + 169, + 8, 25, 0, 25, + 105, 60, +/* AUTO 60 */ + 143, 60, + 8, 18, 2, 45, 0, 26, + 24, 88, 88, 58, +/* AUTO 45 */ + 133, 45, + 8, 26, + 31, 61, +/* AUTO 100 */ + 168, + 8, 26, 0, 26, + 60, +/* AUTO 100 */ + 168, + 8, 29, 0, 29, + 60, +/* AUTO 100 */ + 167, + 2, 57, + 88, 88, 108, 73, +/* AUTO 0 */ + 193, + 61, 63, +/* AUTO 100 */ + 183, + 4, 6, 0, 64, 0, 65, 0, 66, 0, 78, + 59, 59, 59, 59, +/* AUTO 100 */ + 183, + 14, 58, 14, 68, 9, 9, 0, 30, 0, 9, + 37, 58, 58, 73, +/* AUTO 0 */ + 210, + 0, 38, 0, 40, 0, 76, 0, 23, + 72, 62, 131, +/* AUTO 45 */ + 137, 45, + 9, 6, 2, 69, + 120, 61, +/* AUTO 100 */ + 168, + 13, 69, 0, 6, + 60, +/* AUTO 100 */ + 183, + 2, 22, 2, 23, 2, 24, 0, 22, 0, 23, + 9, 59, 59, 73, +/* AUTO 0 */ + 201, + 0, 24, 0, 68, + 59, 53, +/* AUTO 100 */ + 169, + 12, 9, 8, 8, + 56, 64, +/* AUTO 100 */ + 168, + 15, 10, 16, 0, + 42, +/* AUTO 100 */ + 169, + 4, 16, 12, 9, + 56, 64, +/* AUTO 100 */ + 173, + 4, 14, 16, 0, 9, 14, + 57, 64, +/* AUTO 60 */ + 141, 60, + 9, 19, 2, 4, 0, 4, + 111, 55, +/* AUTO 100 */ + 176, + 8, 0, 4, 6, 8, 22, 0, 64, + 53, +/* AUTO 100 */ + 169, + 12, 9, 8, 15, + 56, 64, +/* AUTO 100 */ + 167, + 4, 37, + 57, 64, 41, 63, +/* AUTO 100 */ + 176, + 8, 0, 4, 12, 8, 22, 0, 64, + 53, +/* AUTO 100 */ + 176, + 8, 1, 4, 6, 8, 20, 0, 66, + 53, +/* AUTO 100 */ + 176, + 8, 1, 4, 12, 8, 20, 0, 66, + 53, +/* AUTO 100 */ + 176, + 8, 5, 4, 6, 8, 28, 0, 65, + 53, +/* AUTO 100 */ + 176, + 8, 5, 4, 12, 8, 28, 0, 65, + 53, +/* AUTO 100 */ + 169, + 9, 15, 9, 14, + 57, 64, +/* AUTO 100 */ + 178, + 4, 10, 16, 0, 9, 14, 0, 8, + 57, 64, 60, +/* AUTO 100 */ + 172, + 4, 6, 8, 17, 0, 78, + 53, +/* AUTO 100 */ + 172, + 4, 12, 8, 17, 0, 78, + 53, +/* AUTO 100 */ + 173, + 4, 1, 17, 53, 0, 53, + 26, 53, +/* AUTO 100 */ + 168, + 4, 34, 0, 18, + 58, +/* AUTO 100 */ + 169, + 4, 22, 16, 0, + 57, 64, +/* AUTO 100 */ + 176, + 4, 34, 1, 73, 0, 73, 0, 33, + 62, +/* AUTO 100 */ + 176, + 4, 27, 1, 73, 0, 73, 0, 30, + 62, +}; +const uint8_t actions[] = { +/* GO PIT */ + 5, 1, 45, + 4, 30, + 12, 35, +/* GO FOUN */ + 6, 1, 47, + 2, 11, + 12, 38, 61, +/* GO STRA */ + 23, 1, 63, + 2, 64, 4, 6, 0, 19, 0, 55, 0, 4, + 12, 54, 53, 53, +/* GO BEAC */ + 23, 1, 64, + 2, 65, 4, 6, 0, 7, 0, 55, 0, 4, + 12, 54, 53, 53, +/* GO ISLA */ + 23, 1, 65, + 2, 66, 4, 6, 0, 13, 0, 55, 0, 4, + 12, 54, 53, 53, +/* GO ASHO */ + 23, 1, 67, + 4, 6, 2, 64, 0, 19, 0, 55, 0, 4, + 12, 54, 53, 53, +/* GO ASHO */ + 23, 1, 67, + 4, 6, 2, 65, 0, 7, 0, 55, 0, 4, + 12, 54, 53, 53, +/* GO ASHO */ + 23, 1, 67, + 4, 6, 2, 66, 0, 13, 0, 55, 0, 4, + 12, 54, 53, 53, +/* GO ROPE */ + 9, 1, 72, + 2, 74, 0, 33, + 12, 54, +/* GO ROPE */ + 9, 1, 72, + 2, 75, 0, 30, + 12, 54, +/* GO PASS */ + 15, 1, 21, + 2, 15, 0, 23, 0, 8, + 12, 54, 56, 58, +/* GO HALL */ + 9, 1, 22, + 2, 76, 0, 27, + 12, 54, +/* SAVE GAME */ + 0, 8, 68, + 71, +/* DIG ANY */ + 18, 9, 0, + 4, 32, 14, 37, 1, 31, 0, 37, + 6, 2, 53, +/* DIG ANY */ + 18, 9, 0, + 4, 9, 14, 71, 1, 31, 0, 71, + 6, 2, 53, +/* TAKE INVE */ + 0, 10, 60, + 66, +/* GO PALA */ + 9, 1, 9, + 4, 2, 0, 1, + 12, 54, +/* TAKE MEDI */ + 19, 10, 16, + 3, 10, 13, 60, 0, 60, 0, 23, + 12, 59, 124, 60, +/* TAKE MEDI */ + 19, 10, 16, + 3, 10, 13, 61, 0, 61, 0, 23, + 12, 59, 124, 60, +/* TAKE MEDI */ + 5, 10, 16, + 3, 10, + 12, 112, +/* TAKE OCEA */ + 1, 10, 18, + 12, 35, +/* DIG ANY */ + 22, 9, 0, + 4, 10, 14, 56, 14, 9, 1, 31, 0, 56, + 6, 2, 53, +/* DIG ANY */ + 18, 9, 0, + 4, 10, 14, 24, 1, 31, 0, 24, + 6, 2, 53, +/* GO SHIP */ + 18, 1, 11, + 2, 4, 8, 2, 0, 6, 0, 48, + 12, 54, 53, +/* DIG ANY */ + 5, 9, 0, + 1, 31, + 6, 7, +/* TAKE STON */ + 9, 10, 25, + 2, 22, 0, 22, + 52, 12, +/* TAKE STON */ + 9, 10, 25, + 2, 23, 0, 23, + 52, 12, +/* TAKE STON */ + 9, 10, 25, + 2, 24, 0, 24, + 52, 12, +/* TAKE TABL */ + 15, 10, 24, + 2, 58, 9, 6, 0, 58, + 52, 12, 21, 61, +/* TAKE TABL */ + 9, 10, 24, + 2, 58, 0, 58, + 52, 12, +/* TAKE TABL */ + 9, 10, 24, + 2, 68, 0, 68, + 52, 12, +/* TAKE TELE */ + 15, 10, 54, + 2, 35, 9, 7, 0, 35, + 52, 12, 21, 61, +/* TAKE TELE */ + 9, 10, 54, + 2, 35, 0, 35, + 52, 12, +/* TAKE COMP */ + 15, 10, 55, + 2, 34, 9, 3, 0, 34, + 52, 12, 21, 61, +/* TAKE COMP */ + 9, 10, 55, + 2, 34, 0, 34, + 52, 12, +/* TAKE SAND */ + 11, 10, 56, + 2, 32, 9, 4, + 52, 12, 21, 61, +/* TAKE SAND */ + 9, 10, 56, + 2, 32, 0, 32, + 52, 12, +/* EXAM FOUN */ + 9, 22, 47, + 2, 11, 9, 30, + 113, 115, +/* WAIT ANY */ + 6, 74, 0, + 0, 6, + 12, 88, 83, +/* TAKE ROPE */ + 9, 10, 72, + 2, 71, 0, 71, + 52, 12, +/* TAKE ROPE */ + 14, 10, 72, + 2, 74, 0, 74, 0, 73, + 12, 59, 74, +/* GIVE MEDI */ + 15, 17, 16, + 2, 13, 0, 13, 0, 36, + 86, 36, 72, 109, +/* GO FOUN */ + 6, 1, 47, + 4, 36, + 12, 38, 61, +/* GIVE CHAL */ + 15, 17, 59, + 4, 1, 1, 16, 8, 10, + 39, 117, 88, 73, +/* AUTO 0 */ + 195, + 88, 112, 127, 61, +/* GIVE CHAL */ + 15, 17, 59, + 4, 1, 1, 16, 8, 11, + 39, 117, 88, 73, +/* AUTO 0 */ + 194, + 88, 40, 61, +/* GIVE CHAL */ + 15, 17, 59, + 4, 1, 1, 16, 8, 12, + 39, 117, 88, 73, +/* AUTO 0 */ + 203, + 0, 2, 0, 52, + 88, 72, 116, 63, +/* GIVE CHAL */ + 10, 17, 59, + 4, 1, 1, 16, + 39, 88, 73, +/* AUTO 0 */ + 195, + 88, 118, 127, 61, +/* PRAY ANY */ + 15, 61, 0, + 4, 22, 5, 15, 0, 15, + 12, 17, 2, 53, +/* GIVE BAG */ + 23, 17, 73, + 3, 53, 4, 5, 0, 53, 0, 2, 0, 30, + 55, 128, 58, 59, +/* GIVE BAG */ + 23, 17, 73, + 3, 53, 4, 4, 0, 53, 0, 4, 0, 28, + 55, 128, 58, 59, +/* GIVE BAG */ + 19, 17, 73, + 3, 53, 4, 3, 0, 53, 0, 6, + 55, 128, 58, 73, +/* AUTO 0 */ + 206, + 0, 3, 0, 7, 0, 29, + 58, 58, 59, +/* SLEE ANY */ + 6, 49, 0, + 0, 29, + 44, 58, 88, +/* JUMP PIT */ + 5, 60, 45, + 4, 30, + 12, 61, +/* GO ASHO */ + 18, 1, 67, + 4, 6, 2, 78, 0, 5, 0, 4, + 12, 54, 53, +/* GO CITY */ + 17, 1, 37, + 2, 78, 4, 6, 0, 5, 0, 4, + 54, 53, +/* GO CABI */ + 9, 1, 46, + 4, 6, 0, 28, + 12, 54, +/* GO SHIP */ + 11, 1, 11, + 2, 4, 9, 2, + 12, 88, 122, 119, +/* GO MAST */ + 9, 1, 14, + 4, 6, 0, 12, + 12, 54, +/* GO OCEA */ + 6, 1, 18, + 2, 48, + 12, 27, 61, +/* GO JUNG */ + 9, 1, 44, + 4, 7, 0, 9, + 12, 54, +/* GO CAVE */ + 19, 1, 23, + 4, 10, 0, 11, 0, 8, 0, 11, + 12, 54, 58, 53, +/* GO HUT */ + 9, 1, 32, + 4, 14, 0, 15, + 12, 54, +/* GO MOUN */ + 9, 1, 33, + 4, 14, 0, 17, + 12, 54, +/* GO CREV */ + 23, 1, 34, + 2, 12, 4, 14, 0, 16, 0, 12, 0, 11, + 12, 54, 53, 53, +/* TAKE UP */ + 9, 10, 5, + 4, 29, 0, 28, + 12, 54, +/* FILL CHAL */ + 8, 16, 59, + 1, 16, 8, 10, + 126, +/* FILL CHAL */ + 8, 16, 59, + 1, 16, 8, 11, + 126, +/* FILL CHAL */ + 8, 16, 59, + 1, 16, 8, 12, + 126, +/* FILL CHAL */ + 21, 16, 59, + 2, 11, 1, 16, 9, 10, 9, 12, 0, 11, + 12, 58, +/* FILL CHAL */ + 21, 16, 59, + 2, 48, 1, 16, 9, 11, 9, 12, 0, 10, + 12, 58, +/* FILL CHAL */ + 21, 16, 59, + 2, 47, 1, 16, 9, 10, 9, 11, 0, 12, + 12, 58, +/* DROP MEDI */ + 9, 18, 16, + 1, 10, 0, 10, + 12, 53, +/* DRIN OCEA */ + 9, 52, 18, + 1, 16, 8, 11, + 12, 61, +/* DROP STON */ + 9, 18, 25, + 1, 22, 0, 22, + 12, 53, +/* DROP STON */ + 9, 18, 25, + 1, 23, 0, 23, + 12, 53, +/* DROP STON */ + 9, 18, 25, + 1, 24, 0, 24, + 12, 53, +/* DROP TABL */ + 4, 18, 24, + 1, 58, + 3, +/* DROP TABL */ + 4, 18, 24, + 1, 68, + 3, +/* DROP ROPE */ + 4, 18, 72, + 1, 73, + 3, +/* EXAM MAST */ + 4, 22, 14, + 4, 6, + 25, +/* EXAM TABL */ + 4, 22, 24, + 3, 68, + 19, +/* EXAM TABL */ + 4, 22, 24, + 3, 58, + 30, +/* EXAM STON */ + 4, 22, 25, + 3, 24, + 8, +/* EXAM STON */ + 4, 22, 25, + 3, 23, + 8, +/* EXAM STON */ + 4, 22, 25, + 3, 22, + 8, +/* EXAM MAN */ + 4, 22, 28, + 2, 13, + 15, +/* EXAM BOX */ + 4, 22, 35, + 3, 10, + 10, +/* EXAM STAT */ + 4, 22, 38, + 2, 25, + 33, +/* EXAM STAT */ + 4, 22, 38, + 2, 62, + 33, +/* EXAM ALTA */ + 14, 22, 40, + 4, 22, 14, 16, 0, 16, + 6, 2, 53, +/* EXAM CHES */ + 14, 22, 41, + 3, 51, 14, 20, 0, 20, + 6, 2, 53, +/* EXAM CYCL */ + 4, 22, 43, + 2, 45, + 18, +/* EXAM NOTE */ + 4, 22, 48, + 3, 43, + 123, +/* EXAM TELE */ + 17, 22, 54, + 1, 35, 4, 12, 8, 22, 14, 64, + 16, 58, +/* EXAM TELE */ + 21, 22, 54, + 1, 35, 4, 12, 8, 28, 14, 65, 0, 5, + 16, 58, +/* EXAM TELE */ + 21, 22, 54, + 1, 35, 4, 12, 8, 20, 14, 66, 0, 1, + 16, 58, +/* EXAM RUBB */ + 14, 22, 53, + 3, 49, 14, 23, 0, 23, + 6, 2, 53, +/* EXAM CHAL */ + 9, 22, 59, + 3, 16, 8, 10, + 113, 114, +/* EXAM CHAL */ + 9, 22, 59, + 3, 16, 8, 11, + 113, 115, +/* EXAM CHAL */ + 9, 22, 59, + 3, 16, 8, 12, + 113, 115, +/* GO CAVE */ + 11, 1, 23, + 4, 34, 13, 45, + 12, 88, 28, 119, +/* GO CAVE */ + 9, 1, 23, + 4, 34, 0, 35, + 12, 54, +/* TAKE SWOR */ + 8, 10, 62, + 2, 25, 5, 63, + 34, +/* TAKE SWOR */ + 8, 10, 62, + 2, 62, 5, 63, + 34, +/* TAKE SWOR */ + 9, 10, 62, + 2, 63, 0, 63, + 52, 12, +/* SAIL ANY */ + 8, 27, 0, + 4, 6, 2, 67, + 126, +/* SAIL WEST */ + 23, 27, 4, + 4, 6, 8, 17, 3, 34, 0, 17, 0, 20, + 12, 88, 60, 58, +/* SAIL EAST */ + 23, 27, 3, + 4, 6, 8, 17, 3, 34, 0, 17, 0, 27, + 12, 88, 60, 58, +/* SAIL SOUTH */ + 23, 27, 2, + 4, 6, 8, 17, 3, 34, 0, 17, 0, 22, + 12, 88, 60, 58, +/* SAIL EAST */ + 23, 27, 3, + 4, 6, 8, 20, 3, 34, 0, 20, 0, 17, + 12, 88, 60, 58, +/* SAIL SOUTH */ + 23, 27, 2, + 4, 6, 8, 20, 3, 34, 0, 20, 0, 21, + 12, 88, 60, 58, +/* SAIL NORTH */ + 23, 27, 1, + 4, 6, 8, 21, 3, 34, 0, 21, 0, 20, + 12, 88, 60, 58, +/* SAIL EAST */ + 23, 27, 3, + 4, 6, 8, 21, 3, 34, 0, 21, 0, 22, + 12, 88, 60, 58, +/* SAIL NORTH */ + 23, 27, 1, + 4, 6, 8, 22, 3, 34, 0, 22, 0, 17, + 12, 88, 60, 58, +/* SAIL WEST */ + 23, 27, 4, + 4, 6, 8, 22, 3, 34, 0, 22, 0, 21, + 12, 88, 60, 58, +/* SAIL EAST */ + 23, 27, 3, + 4, 6, 8, 27, 3, 34, 0, 27, 0, 28, + 12, 88, 60, 58, +/* SAIL WEST */ + 23, 27, 4, + 4, 6, 8, 27, 3, 34, 0, 27, 0, 17, + 12, 88, 60, 58, +/* SAIL WEST */ + 23, 27, 4, + 4, 6, 8, 28, 3, 34, 0, 28, 0, 27, + 12, 88, 60, 58, +/* SAIL ANY */ + 8, 27, 0, + 4, 6, 12, 34, + 20, +/* PUSH STAT */ + 4, 29, 38, + 2, 25, + 4, +/* PUSH STAT */ + 22, 29, 38, + 2, 62, 4, 20, 0, 62, 0, 49, 0, 19, + 59, 5, 62, +/* PUSH STAT */ + 0, 29, 38, + 112, +/* PUSH ANY */ + 0, 29, 0, + 35, +/* ON GROU */ + 9, 66, 70, + 1, 73, 0, 73, + 12, 53, +/* DROP GLOB */ + 19, 18, 57, + 1, 26, 0, 26, 0, 26, 0, 54, + 53, 72, 22, 73, +/* AUTO 0 */ + 202, + 6, 21, 0, 14, + 88, 58, 73, +/* AUTO 0 */ + 205, + 2, 45, 0, 45, 0, 69, + 88, 72, +/* OPEN CHES */ + 17, 33, 41, + 3, 41, 1, 37, 0, 41, 0, 51, + 12, 72, +/* LIGH TORC */ + 21, 35, 52, + 3, 56, 3, 19, 9, 16, 0, 56, 0, 9, + 12, 72, +/* BREA ANY */ + 0, 38, 0, + 126, +/* OPEN CHES */ + 5, 33, 41, + 3, 41, + 126, 29, +/* ATTA ANY */ + 1, 41, 0, + 126, 121, +/* EMPT CHAL */ + 16, 43, 59, + 1, 16, 9, 10, 9, 11, 9, 12, + 112, +/* POUR OCEA */ + 4, 44, 18, + 1, 16, + 125, +/* EXAM FOUN */ + 19, 22, 47, + 2, 11, 8, 30, 0, 30, 0, 26, + 6, 2, 60, 53, +/* UNTI ROPE */ + 18, 46, 72, + 2, 72, 2, 74, 0, 72, 0, 74, + 59, 59, 130, +/* UNTI ROPE */ + 19, 46, 72, + 2, 72, 0, 72, 0, 73, 0, 71, + 55, 55, 53, 12, +/* UNLI TORC */ + 13, 47, 52, + 3, 9, 0, 9, 0, 56, + 12, 72, +/* READ NOTE */ + 4, 48, 48, + 3, 43, + 110, +/* WEAR SAND */ + 13, 50, 56, + 1, 32, 6, 33, 0, 33, + 12, 74, +/* WEAR MASK */ + 14, 50, 58, + 1, 20, 6, 21, 0, 21, + 12, 74, 11, +/* TAKE ROPE */ + 9, 10, 72, + 2, 73, 0, 73, + 12, 74, +/* REMO SAND */ + 9, 51, 56, + 1, 33, 0, 33, + 12, 55, +/* REMO MASK */ + 9, 51, 58, + 1, 21, 0, 21, + 12, 55, +/* EMPT CHAL */ + 19, 43, 59, + 1, 16, 0, 10, 0, 11, 0, 12, + 12, 60, 60, 60, +/* ON GROU */ + 23, 66, 70, + 1, 58, 0, 58, 0, 58, 0, 30, 0, 38, + 12, 53, 62, 53, +/* DROP ANCH */ + 22, 18, 66, + 4, 6, 2, 7, 0, 67, 0, 7, 0, 19, + 12, 72, 58, +/* SAY SUN */ + 15, 54, 61, + 4, 14, 3, 68, 0, 12, + 12, 85, 37, 53, +/* SAY ANY */ + 2, 54, 0, + 12, 85, 112, +/* QUIT ANY */ + 1, 58, 0, + 41, 63, +/* INVE ANY */ + 0, 59, 0, + 66, +/* STEP UP */ + 9, 72, 5, + 4, 20, 0, 21, + 12, 54, +/* STEP DOWN */ + 9, 72, 6, + 4, 20, 0, 19, + 12, 54, +/* RAIS ANCH */ + 22, 69, 66, + 4, 6, 2, 67, 0, 67, 0, 7, 0, 19, + 12, 72, 60, +/* TIE ROPE */ + 5, 62, 72, + 1, 71, + 12, 3, +/* TO STAL */ + 22, 63, 69, + 4, 30, 3, 71, 0, 72, 0, 73, 0, 71, + 12, 53, 72, +/* DROP ROPE */ + 9, 18, 72, + 1, 71, 0, 71, + 12, 53, +/* ON GROU */ + 9, 66, 70, + 1, 68, 0, 68, + 12, 53, +/* IN FOUN */ + 14, 68, 47, + 1, 58, 4, 11, 0, 58, + 12, 59, 131, +/* IN FOUN */ + 14, 68, 47, + 1, 68, 4, 16, 0, 68, + 12, 59, 131, +/* BUY SHIP */ + 17, 64, 11, + 2, 4, 1, 53, 9, 2, 0, 2, + 12, 58, +/* BUY SAND */ + 17, 64, 56, + 2, 32, 1, 53, 9, 4, 0, 4, + 12, 58, +/* BUY COMP */ + 17, 64, 55, + 2, 34, 1, 53, 9, 3, 0, 3, + 12, 58, +/* BUY TELE */ + 17, 64, 54, + 2, 35, 1, 53, 9, 7, 0, 7, + 12, 58, +/* BUY TABL */ + 17, 64, 24, + 2, 58, 1, 53, 9, 6, 0, 6, + 12, 58, +/* GO CREV */ + 23, 1, 34, + 2, 12, 4, 16, 0, 14, 0, 12, 0, 8, + 12, 54, 53, 60, +/* GO STAI */ + 8, 1, 36, + 4, 19, 0, 20, + 54, +/* GO STAI */ + 8, 1, 36, + 4, 21, 0, 20, + 54, +/* GO STAI */ + 4, 1, 36, + 4, 20, + 123, +/* HELP ANY */ + 0, 53, 0, + 126, +/* IN PIT */ + 14, 68, 45, + 1, 73, 0, 73, 0, 74, + 12, 59, 53, +/* PRAY ANY */ + 1, 61, 0, + 12, 112, +/* IN FOUN */ + 18, 68, 47, + 1, 58, 4, 16, 0, 58, 0, 8, + 12, 62, 131, +/* IN FOUN */ + 18, 68, 47, + 1, 68, 4, 11, 0, 68, 0, 8, + 12, 62, 131, +/* DRIN OCEA */ + 14, 52, 18, + 1, 16, 8, 10, 0, 10, + 12, 60, 132, +/* DRIN OCEA */ + 13, 52, 18, + 1, 16, 8, 12, 0, 12, + 12, 60, +/* EXAM FOUN */ + 5, 22, 47, + 4, 36, + 113, 115, +/* EXAM ANY */ + 1, 22, 0, + 76, 14, +/* DROP MASK */ + 14, 18, 58, + 1, 20, 0, 20, 0, 21, + 12, 53, 55, +/* SAIL ANY */ + 5, 27, 0, + 4, 6, + 12, 88, +/* DROP SAND */ + 14, 18, 56, + 1, 32, 0, 32, 0, 33, + 12, 53, 55, +/* DROP SAND */ + 255, 18, 56, + 1, 32, +/* TAKE SCOR */ + 5, 10, 39, + 2, 55, + 132, 126, +/* GO COT */ + 9, 1, 49, + 4, 28, 0, 29, + 12, 54, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *PROC */ + 208, 82, 79, 67, + /* *RIDE */ + 210, 73, 68, 69, + /* *RUN */ + 210, 85, 78, 32, + /* *CLIM */ + 195, 76, 73, 77, + /* *ENTE */ + 197, 78, 84, 69, + /* *EXIT */ + 197, 88, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* DIG */ + 68, 73, 71, 32, + /* TAKE */ + 84, 65, 75, 69, + /* *GET */ + 199, 69, 84, 32, + /* *CARR */ + 195, 65, 82, 82, + /* *GRAB */ + 199, 82, 65, 66, + /* *HOLD */ + 200, 79, 76, 68, + /* *STEA */ + 211, 84, 69, 65, + /* FILL */ + 70, 73, 76, 76, + /* GIVE */ + 71, 73, 86, 69, + /* DROP */ + 68, 82, 79, 80, + /* *LOWE */ + 204, 79, 87, 69, + /* *PUT */ + 208, 85, 84, 32, + /* *THRO */ + 212, 72, 82, 79, + /* EXAM */ + 69, 88, 65, 77, + /* *STUD */ + 211, 84, 85, 68, + /* *LOOK */ + 204, 79, 79, 75, + /* *SEE */ + 211, 69, 69, 32, + /* *WATC */ + 215, 65, 84, 67, + /* SAIL */ + 83, 65, 73, 76, + /* *NAVI */ + 206, 65, 86, 73, + /* PUSH */ + 80, 85, 83, 72, + /* *SHOV */ + 211, 72, 79, 86, + /* *MOVE */ + 205, 79, 86, 69, + /* *SHAK */ + 211, 72, 65, 75, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* *BURN */ + 194, 85, 82, 78, + /* BREA */ + 66, 82, 69, 65, + /* *DEST */ + 196, 69, 83, 84, + /* *SMAS */ + 211, 77, 65, 83, + /* ATTA */ + 65, 84, 84, 65, + /* *KILL */ + 203, 73, 76, 76, + /* EMPT */ + 69, 77, 80, 84, + /* POUR */ + 80, 79, 85, 82, + /* *SPIL */ + 211, 80, 73, 76, + /* UNTI */ + 85, 78, 84, 73, + /* UNLI */ + 85, 78, 76, 73, + /* READ */ + 82, 69, 65, 68, + /* SLEE */ + 83, 76, 69, 69, + /* WEAR */ + 87, 69, 65, 82, + /* REMO */ + 82, 69, 77, 79, + /* DRIN */ + 68, 82, 73, 78, + /* HELP */ + 72, 69, 76, 80, + /* SAY */ + 83, 65, 89, 32, + /* *SCRE */ + 211, 67, 82, 69, + /* *YELL */ + 217, 69, 76, 76, + /* *HOLL */ + 200, 79, 76, 76, + /* QUIT */ + 81, 85, 73, 84, + /* INVE */ + 73, 78, 86, 69, + /* JUMP */ + 74, 85, 77, 80, + /* PRAY */ + 80, 82, 65, 89, + /* TIE */ + 84, 73, 69, 32, + /* TO */ + 84, 79, 32, 32, + /* BUY */ + 66, 85, 89, 32, + /* *PURC */ + 208, 85, 82, 67, + /* ON */ + 79, 78, 32, 32, + /* *AT */ + 193, 84, 32, 32, + /* IN */ + 73, 78, 32, 32, + /* RAIS */ + 82, 65, 73, 83, + /* *LIFT */ + 204, 73, 70, 84, + /* *WEIG */ + 215, 69, 73, 71, + /* STEP */ + 83, 84, 69, 80, + /* *WALK */ + 215, 65, 76, 75, + /* WAIT */ + 87, 65, 73, 84, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* KING */ + 75, 73, 78, 71, + /* GUAR */ + 71, 85, 65, 82, + /* PALA */ + 80, 65, 76, 65, + /* MERC */ + 77, 69, 82, 67, + /* SHIP */ + 83, 72, 73, 80, + /* *BOAT */ + 194, 79, 65, 84, + /* *ABOA */ + 193, 66, 79, 65, + /* MAST */ + 77, 65, 83, 84, + /* SAIL */ + 83, 65, 73, 76, + /* MEDI */ + 77, 69, 68, 73, + /* AROU */ + 65, 82, 79, 85, + /* OCEA */ + 79, 67, 69, 65, + /* *WATE */ + 215, 65, 84, 69, + /* *LIQU */ + 204, 73, 81, 85, + /* PASS */ + 80, 65, 83, 83, + /* HALL */ + 72, 65, 76, 76, + /* CAVE */ + 67, 65, 86, 69, + /* TABL */ + 84, 65, 66, 76, + /* STON */ + 83, 84, 79, 78, + /* SKEL */ + 83, 75, 69, 76, + /* *BONE */ + 194, 79, 78, 69, + /* MAN */ + 77, 65, 78, 32, + /* FLIN */ + 70, 76, 73, 78, + /* *STEE */ + 211, 84, 69, 69, + /* SHOV */ + 83, 72, 79, 86, + /* HUT */ + 72, 85, 84, 32, + /* MOUN */ + 77, 79, 85, 78, + /* CREV */ + 67, 82, 69, 86, + /* BOX */ + 66, 79, 88, 32, + /* STAI */ + 83, 84, 65, 73, + /* CITY */ + 67, 73, 84, 89, + /* STAT */ + 83, 84, 65, 84, + /* SCOR */ + 83, 67, 79, 82, + /* ALTA */ + 65, 76, 84, 65, + /* CHES */ + 67, 72, 69, 83, + /* KEY */ + 75, 69, 89, 32, + /* CYCL */ + 67, 89, 67, 76, + /* JUNG */ + 74, 85, 78, 71, + /* PIT */ + 80, 73, 84, 32, + /* CABI */ + 67, 65, 66, 73, + /* FOUN */ + 70, 79, 85, 78, + /* NOTE */ + 78, 79, 84, 69, + /* COT */ + 67, 79, 84, 32, + /* MARK */ + 77, 65, 82, 75, + /* BLOC */ + 66, 76, 79, 67, + /* TORC */ + 84, 79, 82, 67, + /* RUBB */ + 82, 85, 66, 66, + /* TELE */ + 84, 69, 76, 69, + /* COMP */ + 67, 79, 77, 80, + /* SAND */ + 83, 65, 78, 68, + /* GLOB */ + 71, 76, 79, 66, + /* MASK */ + 77, 65, 83, 75, + /* CHAL */ + 67, 72, 65, 76, + /* INVE */ + 73, 78, 86, 69, + /* SUN */ + 83, 85, 78, 32, + /* SWOR */ + 83, 87, 79, 82, + /* STRA */ + 83, 84, 82, 65, + /* BEAC */ + 66, 69, 65, 67, + /* ISLA */ + 73, 83, 76, 65, + /* ANCH */ + 65, 78, 67, 72, + /* ASHO */ + 65, 83, 72, 79, + /* GAME */ + 71, 65, 77, 69, + /* STAL */ + 83, 84, 65, 76, + /* GROU */ + 71, 82, 79, 85, + /* *FLOO */ + 198, 76, 79, 79, + /* ROPE */ + 82, 79, 80, 69, + /* BAG */ + 66, 65, 71, 32, + /* *GOLD */ + 199, 79, 76, 68, + 0, +}; +const uint8_t automap[] = { + /* SKEL */ + 83, 75, 69, 76, + 8, + /* TORC */ + 84, 79, 82, 67, + 9, + /* BOX */ + 66, 79, 88, 32, + 10, + /* CHAL */ + 67, 72, 65, 76, + 16, + /* FLIN */ + 70, 76, 73, 78, + 19, + /* MASK */ + 77, 65, 83, 75, + 20, + /* GLOB */ + 71, 76, 79, 66, + 26, + /* SHOV */ + 83, 72, 79, 86, + 31, + /* SAND */ + 83, 65, 78, 68, + 32, + /* COMP */ + 67, 79, 77, 80, + 34, + /* TELE */ + 84, 69, 76, 69, + 35, + /* KEY */ + 75, 69, 89, 32, + 37, + /* RUBB */ + 82, 85, 66, 66, + 38, + /* CHES */ + 67, 72, 69, 83, + 41, + /* NOTE */ + 78, 79, 84, 69, + 43, + /* RUBB */ + 82, 85, 66, 66, + 49, + /* CHES */ + 67, 72, 69, 83, + 51, + /* BAG */ + 66, 65, 71, 32, + 53, + /* TORC */ + 84, 79, 82, 67, + 56, + /* SWOR */ + 83, 87, 79, 82, + 63, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv13.c b/Applications/games/adv13.c new file mode 100644 index 00000000..da25d9a8 --- /dev/null +++ b/Applications/games/adv13.c @@ -0,0 +1,3454 @@ +#define NUM_OBJ 75 +#define WORDSIZE 5 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 6; +const uint8_t maxcar = 10; +const uint8_t treasure = 19; +const uint8_t treasures = 13; +const uint8_t lastloc = 32; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +102, 105, 101, 108, 100, 0 }; +const uint8_t loctxt_2[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 68, 114, 97, 119, 98, 114, 105, 100, 103, 101, 0 }; +const uint8_t loctxt_3[] = { +99, 111, 117, 114, 116, 121, 97, 114, 100, 0 }; +const uint8_t loctxt_4[] = { +109, 97, 103, 105, 99, 32, 102, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_5[] = { +115, 116, 114, 101, 97, 109, 32, 111, 102, 32, 108, 97, 118, 97, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 116, 104, 101, 32, 102, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_7[] = { +98, 97, 108, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_8[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 99, 104, 97, 110, 100, 101, 108, 105, 101, 114, 0 }; +const uint8_t loctxt_9[] = { +102, 111, 114, 101, 115, 116, 32, 111, 102, 32, 101, 110, 99, 104, 97, 110, 116, 109, 101, 110, 116, 0 }; +const uint8_t loctxt_10[] = { +112, 108, 97, 105, 110, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_11[] = { +115, 116, 111, 114, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_12[] = { +100, 117, 110, 103, 101, 111, 110, 32, 99, 101, 108, 108, 0 }; +const uint8_t loctxt_13[] = { +97, 110, 116, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_14[] = { +115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_15[] = { +108, 111, 102, 116, 32, 97, 98, 111, 118, 101, 32, 98, 97, 108, 108, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 111, 102, 32, 97, 32, 109, 111, 97, 116, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 117, 110, 100, 101, 114, 119, 97, 116, 101, 114, 32, 105, 110, 10, 116, 104, 105, 99, 107, 32, 109, 117, 114, 107, 121, 32, 102, 108, 117, 105, 100, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 115, 116, 97, 105, 114, 115, 0 }; +const uint8_t loctxt_19[] = { +104, 111, 108, 108, 111, 119, 32, 116, 114, 101, 101, 32, 115, 105, 103, 110, 32, 115, 97, 121, 115, 32, 100, 114, 111, 112, 10, 115, 116, 97, 114, 115, 32, 104, 101, 114, 101, 0 }; +const uint8_t loctxt_20[] = { +112, 111, 111, 108, 32, 111, 102, 32, 100, 105, 114, 116, 121, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t loctxt_21[] = { +107, 105, 116, 99, 104, 101, 110, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 98, 111, 120, 0 }; +const uint8_t loctxt_23[] = { +98, 111, 120, 0 }; +const uint8_t loctxt_24[] = { +100, 117, 115, 116, 121, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_25[] = { +115, 116, 111, 110, 101, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_26[] = { +100, 97, 109, 112, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_27[] = { +115, 116, 111, 110, 101, 32, 103, 114, 111, 116, 116, 111, 0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 101, 110, 116, 114, 121, 119, 97, 121, 0 }; +const uint8_t loctxt_29[] = { +100, 114, 97, 103, 111, 110, 39, 115, 32, 108, 97, 105, 114, 0 }; +const uint8_t loctxt_30[] = { +119, 105, 122, 97, 114, 100, 39, 115, 32, 119, 111, 114, 107, 115, 104, 111, 112, 0 }; +const uint8_t loctxt_31[] = { +118, 97, 99, 97, 110, 116, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_32[] = { +114, 101, 97, 108, 32, 109, 101, 115, 115, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 9, 9, 0, 9, 0, 0 } }, + { loctxt_2, { 0, 0, 28, 1, 0, 0 } }, + { loctxt_3, { 21, 10, 7, 28, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_5, { 26, 27, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 0, 4 } }, + { loctxt_7, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_8, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_9, { 9, 9, 1, 9, 0, 0 } }, + { loctxt_10, { 3, 0, 0, 0, 0, 0 } }, + { loctxt_11, { 10, 0, 0, 0, 0, 14 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 14, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 21, 0 } }, + { loctxt_21, { 0, 3, 0, 0, 0, 0 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_24, { 0, 0, 0, 10, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 24, 26 } }, + { loctxt_26, { 0, 0, 0, 0, 25, 0 } }, + { loctxt_27, { 5, 0, 0, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 10, 0 } }, + { loctxt_30, { 0, 0, 0, 29, 0, 0 } }, + { loctxt_31, { 0, 0, 10, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 12, + 1, + 1, + 1, + 0, + 4, + 8, + 0, + 30, + 0, + 11, + 18, + 0, + 0, + 0, + 27, + 29, + 0, + 3, + 4, + 0, + 26, + 6, + 6, + 255, + 7, + 0, + 7, + 8, + 12, + 0, + 13, + 0, + 31, + 255, + 15, + 255, + 8, + 0, + 0, + 3, + 0, + 0, + 16, + 2, + 255, + 21, + 0, + 21, + 0, + 3, + 0, + 0, + 24, + 0, + 28, + 0, + 30, + 29, + 0, + 0, + 255, + 17, + 0, + 31, + 0, + 0, + 12, + 0, + 0, + 27, + 23, + 11, + 255, + 28, + 14, +}; + + +const uint8_t objtxt_0[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_1[] = { +77, 111, 97, 116, 0 }; +const uint8_t objtxt_2[] = { +67, 97, 115, 116, 108, 101, 0 }; +const uint8_t objtxt_3[] = { +82, 97, 105, 115, 101, 100, 32, 100, 114, 97, 119, 98, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_4[] = { +76, 111, 119, 101, 114, 101, 100, 32, 100, 114, 97, 119, 98, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_5[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_6[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_7[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_8[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_9[] = { +73, 39, 109, 32, 103, 108, 111, 119, 105, 110, 103, 0 }; +const uint8_t objtxt_10[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_11[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_12[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_13[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_14[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_15[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_16[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_17[] = { +42, 83, 84, 65, 82, 0 }; +const uint8_t objtxt_18[] = { +77, 97, 103, 105, 99, 32, 70, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t objtxt_19[] = { +67, 111, 117, 114, 116, 121, 97, 114, 100, 0 }; +const uint8_t objtxt_20[] = { +77, 97, 103, 105, 99, 32, 109, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_21[] = { +72, 111, 116, 32, 108, 97, 118, 97, 32, 115, 116, 114, 101, 97, 109, 0 }; +const uint8_t objtxt_22[] = { +68, 97, 114, 107, 32, 97, 105, 114, 32, 115, 104, 97, 102, 116, 0 }; +const uint8_t objtxt_23[] = { +87, 97, 116, 101, 114, 32, 111, 117, 116, 108, 101, 116, 0 }; +const uint8_t objtxt_24[] = { +70, 105, 114, 101, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_25[] = { +67, 104, 97, 110, 100, 101, 108, 105, 101, 114, 32, 110, 101, 97, 114, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_26[] = { +70, 97, 108, 108, 101, 110, 32, 67, 104, 97, 110, 100, 101, 108, 105, 101, 114, 0 }; +const uint8_t objtxt_27[] = { +84, 105, 101, 100, 32, 101, 110, 100, 32, 111, 102, 32, 114, 111, 112, 101, 0 }; +const uint8_t objtxt_28[] = { +66, 114, 111, 107, 101, 110, 32, 103, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_29[] = { +79, 97, 107, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_30[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_31[] = { +79, 97, 107, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_32[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_33[] = { +83, 112, 101, 108, 108, 32, 111, 102, 32, 77, 101, 116, 104, 117, 115, 101, 108, 97, 104, 0 }; +const uint8_t objtxt_34[] = { +83, 101, 101, 100, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_35[] = { +80, 111, 116, 105, 111, 110, 0 }; +const uint8_t objtxt_36[] = { +76, 105, 103, 104, 116, 32, 115, 113, 117, 97, 114, 101, 100, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_37[] = { +66, 97, 108, 108, 114, 111, 111, 109, 0 }; +const uint8_t objtxt_38[] = { +76, 111, 102, 116, 0 }; +const uint8_t objtxt_39[] = { +77, 111, 97, 116, 32, 98, 111, 116, 116, 111, 109, 0 }; +const uint8_t objtxt_40[] = { +80, 101, 114, 109, 101, 97, 98, 105, 108, 105, 116, 121, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_41[] = { +83, 112, 101, 108, 108, 32, 111, 102, 32, 66, 108, 105, 115, 115, 0 }; +const uint8_t objtxt_42[] = { +80, 105, 101, 99, 101, 32, 111, 102, 32, 119, 111, 111, 100, 0 }; +const uint8_t objtxt_43[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 109, 111, 97, 116, 32, 109, 111, 110, 115, 116, 101, 114, 0 }; +const uint8_t objtxt_44[] = { +77, 111, 97, 116, 0 }; +const uint8_t objtxt_45[] = { +89, 111, 104, 111, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_46[] = { +76, 97, 114, 103, 101, 32, 102, 108, 111, 111, 114, 32, 100, 114, 97, 105, 110, 0 }; +const uint8_t objtxt_47[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_48[] = { +87, 111, 111, 100, 101, 110, 32, 99, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_49[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_50[] = { +70, 105, 114, 101, 32, 98, 114, 105, 99, 107, 115, 0 }; +const uint8_t objtxt_51[] = { +87, 97, 116, 101, 114, 32, 100, 114, 111, 112, 108, 101, 116, 115, 0 }; +const uint8_t objtxt_52[] = { +87, 114, 105, 110, 107, 108, 101, 115, 0 }; +const uint8_t objtxt_53[] = { +83, 116, 111, 110, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_54[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_55[] = { +82, 97, 105, 115, 101, 100, 32, 100, 114, 97, 119, 98, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_56[] = { +76, 111, 119, 101, 114, 101, 100, 32, 100, 114, 97, 119, 98, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_57[] = { +70, 105, 114, 101, 102, 108, 121, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_58[] = { +79, 108, 100, 32, 100, 114, 97, 103, 111, 110, 0 }; +const uint8_t objtxt_59[] = { +68, 117, 115, 116, 0 }; +const uint8_t objtxt_60[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_61[] = { +87, 105, 99, 107, 101, 100, 32, 81, 117, 101, 101, 110, 39, 115, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_62[] = { +83, 111, 103, 103, 121, 32, 116, 111, 119, 101, 108, 0 }; +const uint8_t objtxt_63[] = { +65, 115, 104, 101, 115, 0 }; +const uint8_t objtxt_64[] = { +85, 110, 114, 97, 118, 101, 108, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_65[] = { +68, 97, 109, 112, 32, 116, 111, 119, 101, 108, 0 }; +const uint8_t objtxt_66[] = { +68, 114, 121, 32, 116, 111, 119, 101, 108, 0 }; +const uint8_t objtxt_67[] = { +65, 105, 114, 32, 115, 104, 97, 102, 116, 0 }; +const uint8_t objtxt_68[] = { +84, 105, 110, 32, 99, 97, 110, 0 }; +const uint8_t objtxt_69[] = { +79, 112, 101, 110, 32, 99, 97, 110, 0 }; +const uint8_t objtxt_70[] = { +68, 105, 122, 122, 121, 32, 68, 101, 97, 110, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_71[] = { +80, 105, 101, 99, 101, 32, 111, 102, 32, 109, 101, 116, 97, 108, 0 }; +const uint8_t objtxt_72[] = { +83, 105, 103, 110, 58, 32, 83, 84, 65, 73, 82, 87, 65, 89, 32, 67, 79, 78, 68, 69, 77, 69, 68, 0 }; +const uint8_t objtxt_73[] = { +76, 121, 99, 97, 110, 116, 104, 114, 111, 112, 101, 32, 115, 112, 101, 108, 108, 0 }; +const uint8_t objtxt_74[] = { +79, 108, 100, 32, 108, 101, 118, 101, 114, 32, 105, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_75[] = { +82, 97, 98, 105, 100, 32, 114, 97, 116, 115, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, + objtxt_75, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_2[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_3[] = { +110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_4[] = { +115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_5[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_6[] = { +83, 111, 114, 114, 121, 44, 0 }; +const uint8_t msgtxt_7[] = { +73, 39, 109, 0 }; +const uint8_t msgtxt_8[] = { +121, 101, 97, 114, 115, 32, 111, 108, 100, 44, 0 }; +const uint8_t msgtxt_9[] = { +104, 101, 97, 108, 116, 104, 121, 44, 0 }; +const uint8_t msgtxt_10[] = { +102, 108, 111, 97, 116, 105, 110, 103, 32, 97, 110, 32, 105, 110, 99, 104, 32, 97, 98, 111, 118, 101, 32, 115, 117, 114, 102, 97, 99, 101, 44, 0 }; +const uint8_t msgtxt_11[] = { +105, 110, 118, 105, 115, 105, 98, 108, 101, 44, 0 }; +const uint8_t msgtxt_12[] = { +114, 105, 103, 104, 116, 32, 110, 111, 119, 33, 0 }; +const uint8_t msgtxt_13[] = { +65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 49, 51, 32, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 44, 32, 100, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 58, 10, 82, 111, 101, 32, 65, 100, 97, 109, 115, 32, 40, 110, 111, 116, 32, 97, 32, 114, 101, 108, 97, 116, 105, 118, 101, 41, 32, 97, 110, 100, 10, 82, 105, 99, 104, 97, 114, 100, 32, 65, 100, 97, 109, 115, 32, 40, 66, 114, 111, 116, 104, 101, 114, 32, 97, 110, 100, 32, 102, 97, 118, 111, 114, 105, 116, 101, 32, 66, 101, 116, 97, 32, 84, 101, 115, 116, 101, 114, 41, 33, 0 }; +const uint8_t msgtxt_14[] = { +35, 32, 64, 32, 33, 32, 35, 32, 37, 32, 42, 32, 40, 101, 120, 112, 108, 101, 116, 105, 118, 101, 32, 100, 101, 108, 101, 116, 101, 100, 41, 32, 108, 97, 118, 97, 33, 0 }; +const uint8_t msgtxt_15[] = { +73, 32, 98, 117, 114, 110, 116, 32, 116, 111, 32, 97, 32, 99, 114, 105, 115, 112, 46, 0 }; +const uint8_t msgtxt_16[] = { +108, 97, 114, 103, 101, 32, 119, 97, 116, 101, 114, 32, 102, 111, 117, 110, 116, 97, 105, 110, 32, 119, 105, 116, 104, 32, 50, 32, 115, 116, 111, 114, 121, 32, 99, 101, 110, 116, 101, 114, 112, 105, 101, 99, 101, 46, 0 }; +const uint8_t msgtxt_17[] = { +105, 110, 32, 50, 32, 119, 111, 114, 100, 115, 59, 32, 97, 116, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_18[] = { +105, 116, 32, 115, 116, 97, 114, 116, 115, 32, 116, 111, 32, 98, 117, 114, 110, 46, 0 }; +const uint8_t msgtxt_19[] = { +67, 104, 97, 110, 100, 101, 108, 105, 101, 114, 32, 102, 101, 108, 108, 32, 119, 105, 116, 104, 32, 97, 32, 99, 114, 97, 115, 104, 0 }; +const uint8_t msgtxt_20[] = { +111, 110, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_21[] = { +97, 110, 32, 105, 110, 97, 99, 99, 101, 115, 115, 105, 98, 108, 101, 32, 108, 111, 102, 116, 32, 97, 114, 101, 97, 46, 0 }; +const uint8_t msgtxt_22[] = { +73, 116, 39, 115, 32, 115, 116, 114, 97, 105, 103, 104, 116, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_23[] = { +73, 116, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 46, 0 }; +const uint8_t msgtxt_24[] = { +83, 97, 121, 32, 97, 103, 97, 105, 110, 32, 119, 105, 116, 104, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 46, 0 }; +const uint8_t msgtxt_25[] = { +104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_26[] = { +119, 97, 108, 108, 0 }; +const uint8_t msgtxt_27[] = { +105, 110, 32, 116, 104, 101, 32, 119, 97, 121, 0 }; +const uint8_t msgtxt_28[] = { +109, 111, 118, 101, 115, 46, 0 }; +const uint8_t msgtxt_29[] = { +97, 32, 108, 111, 99, 107, 101, 100, 32, 115, 111, 108, 105, 100, 32, 100, 111, 111, 114, 46, 0 }; +const uint8_t msgtxt_30[] = { +73, 32, 102, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_31[] = { +79, 112, 101, 110, 32, 83, 69, 83, 65, 77, 69, 32, 83, 69, 69, 68, 33, 0 }; +const uint8_t msgtxt_32[] = { +83, 112, 101, 108, 108, 32, 102, 97, 105, 108, 115, 33, 0 }; +const uint8_t msgtxt_33[] = { +73, 32, 104, 105, 116, 32, 104, 97, 114, 100, 33, 0 }; +const uint8_t msgtxt_34[] = { +71, 111, 116, 0 }; +const uint8_t msgtxt_35[] = { +105, 116, 39, 115, 32, 101, 110, 99, 104, 97, 110, 116, 101, 100, 0 }; +const uint8_t msgtxt_36[] = { +73, 32, 99, 97, 110, 39, 116, 44, 0 }; +const uint8_t msgtxt_37[] = { +83, 112, 101, 108, 108, 32, 119, 111, 114, 107, 115, 33, 0 }; +const uint8_t msgtxt_38[] = { +73, 32, 98, 114, 101, 97, 116, 104, 101, 46, 0 }; +const uint8_t msgtxt_39[] = { +65, 114, 103, 104, 33, 0 }; +const uint8_t msgtxt_40[] = { +73, 32, 100, 114, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_41[] = { +65, 115, 116, 104, 109, 97, 32, 121, 111, 117, 32, 107, 110, 111, 119, 46, 0 }; +const uint8_t msgtxt_42[] = { +87, 104, 111, 111, 115, 104, 33, 0 }; +const uint8_t msgtxt_43[] = { +73, 116, 32, 98, 114, 101, 97, 107, 115, 33, 0 }; +const uint8_t msgtxt_44[] = { +73, 32, 116, 114, 105, 112, 32, 38, 0 }; +const uint8_t msgtxt_45[] = { +67, 114, 97, 115, 104, 33, 0 }; +const uint8_t msgtxt_46[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_47[] = { +105, 116, 39, 115, 32, 100, 105, 115, 115, 111, 108, 118, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_48[] = { +73, 32, 102, 101, 101, 108, 32, 118, 101, 114, 121, 32, 111, 100, 100, 33, 0 }; +const uint8_t msgtxt_49[] = { +71, 114, 101, 97, 116, 33, 32, 73, 39, 109, 32, 100, 114, 97, 103, 111, 110, 32, 102, 111, 100, 100, 101, 114, 33, 0 }; +const uint8_t msgtxt_50[] = { +51, 32, 111, 100, 100, 32, 119, 97, 108, 108, 115, 32, 38, 32, 102, 108, 111, 111, 114, 46, 0 }; +const uint8_t msgtxt_51[] = { +115, 109, 97, 108, 108, 32, 99, 114, 97, 99, 107, 115, 32, 97, 114, 111, 117, 110, 100, 32, 101, 100, 103, 101, 115, 32, 38, 32, 101, 109, 112, 116, 121, 32, 105, 99, 111, 110, 32, 110, 105, 99, 104, 101, 115, 46, 0 }; +const uint8_t msgtxt_52[] = { +111, 102, 32, 97, 32, 104, 111, 108, 101, 46, 0 }; +const uint8_t msgtxt_53[] = { +65, 67, 72, 79, 79, 79, 79, 33, 0 }; +const uint8_t msgtxt_54[] = { +68, 114, 97, 103, 111, 110, 0 }; +const uint8_t msgtxt_55[] = { +83, 111, 117, 110, 100, 115, 32, 104, 111, 108, 108, 111, 119, 33, 0 }; +const uint8_t msgtxt_56[] = { +104, 101, 97, 114, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_57[] = { +73, 39, 109, 32, 100, 114, 97, 103, 103, 101, 100, 32, 117, 110, 100, 101, 114, 33, 0 }; +const uint8_t msgtxt_58[] = { +76, 105, 103, 104, 116, 32, 108, 105, 103, 104, 116, 32, 40, 117, 110, 104, 101, 97, 118, 121, 32, 108, 97, 109, 112, 41, 32, 114, 105, 115, 101, 115, 33, 0 }; +const uint8_t msgtxt_59[] = { +73, 32, 99, 97, 110, 39, 116, 32, 116, 104, 114, 111, 119, 32, 116, 104, 97, 116, 33, 0 }; +const uint8_t msgtxt_60[] = { +98, 97, 116, 116, 108, 101, 109, 101, 110, 116, 115, 32, 97, 98, 111, 118, 101, 46, 0 }; +const uint8_t msgtxt_61[] = { +97, 32, 116, 105, 110, 32, 99, 97, 110, 32, 117, 112, 32, 116, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_62[] = { +68, 114, 97, 116, 32, 73, 32, 109, 105, 115, 115, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_63[] = { +73, 32, 104, 105, 116, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_64[] = { +77, 117, 99, 104, 32, 116, 111, 111, 32, 104, 105, 103, 104, 32, 102, 111, 114, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_65[] = { +97, 114, 109, 115, 32, 111, 102, 32, 115, 116, 101, 101, 108, 44, 0 }; +const uint8_t msgtxt_66[] = { +97, 32, 115, 104, 97, 114, 112, 32, 104, 111, 111, 107, 101, 100, 32, 112, 105, 101, 99, 101, 32, 111, 102, 32, 109, 101, 116, 97, 108, 46, 0 }; +const uint8_t msgtxt_67[] = { +116, 104, 101, 32, 117, 115, 117, 97, 108, 32, 116, 104, 105, 110, 103, 115, 46, 0 }; +const uint8_t msgtxt_68[] = { +83, 97, 121, 32, 97, 103, 97, 105, 110, 32, 38, 32, 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 99, 46, 0 }; +const uint8_t msgtxt_69[] = { +87, 104, 97, 116, 32, 100, 111, 32, 121, 111, 117, 32, 116, 104, 105, 110, 107, 32, 73, 39, 109, 32, 100, 111, 105, 110, 103, 63, 0 }; +const uint8_t msgtxt_70[] = { +97, 32, 102, 101, 114, 114, 101, 116, 44, 0 }; +const uint8_t msgtxt_71[] = { +114, 97, 116, 115, 32, 115, 99, 117, 116, 116, 108, 105, 110, 103, 32, 105, 110, 116, 111, 32, 116, 104, 101, 105, 114, 32, 104, 111, 108, 101, 46, 0 }; +const uint8_t msgtxt_72[] = { +114, 97, 116, 115, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 121, 33, 0 }; +const uint8_t msgtxt_73[] = { +97, 32, 115, 109, 97, 108, 108, 32, 116, 121, 112, 101, 0 }; +const uint8_t msgtxt_74[] = { +105, 116, 115, 32, 115, 101, 97, 108, 101, 100, 46, 0 }; +const uint8_t msgtxt_75[] = { +69, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 115, 112, 105, 110, 115, 32, 97, 114, 111, 117, 110, 100, 33, 0 }; +const uint8_t msgtxt_76[] = { +67, 97, 115, 116, 32, 97, 32, 115, 112, 101, 108, 108, 33, 0 }; +const uint8_t msgtxt_77[] = { +73, 39, 109, 32, 100, 101, 45, 109, 111, 97, 116, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 33, 0 }; +const uint8_t msgtxt_78[] = { +83, 119, 105, 109, 32, 100, 111, 119, 110, 63, 0 }; +const uint8_t msgtxt_79[] = { +66, 108, 117, 98, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, +}; + + +const uint8_t status[] = { +/* AUTO 100 IN TREE*/ + 170, + 4, 19, 9, 15, + 56, 70, 76, +/* AUTO 100 IN BOX*/ + 174, + 4, 23, 5, 47, 9, 15, + 56, 70, 76, +/* AUTO 100 NOT DARK*/ + 177, + 8, 15, 7, 23, 7, 19, 7, 12, + 57, 76, +/* AUTO 100 WATER FOUNTAIN*/ + 172, + 8, 8, 6, 51, 0, 51, + 74, +/* AUTO 50 FNTN YOUTH*/ + 146, 50, + 1, 51, 0, 4, 0, 11, 0, 4, + 81, 83, 81, +/* AUTO 50 ELDER SPELL*/ + 142, 50, + 8, 7, 0, 5, 0, 5, + 81, 77, 73, +/* AUTO 0 AGING OVER*/ + 200, + 15, 0, 0, 7, + 60, +/* AUTO 0 AGE HIM*/ + 211, + 0, 5, 0, 4, 0, 19, 0, 4, + 81, 81, 82, 81, +/* AUTO 100 WET TOWEL*/ + 176, + 4, 17, 3, 65, 0, 65, 0, 62, + 72, +/* AUTO 100 IN CELL DARK*/ + 170, + 2, 29, 9, 15, + 56, 70, 76, +/* AUTO 100 INTRO*/ + 175, + 9, 1, 0, 1, 0, 31, + 58, 13, 79, 73, +/* AUTO 0 */ + 202, + 0, 4, 0, 1, + 81, 80, 54, +/* AUTO 0 SET CNTRS*/ + 211, + 0, 10, 0, 2, 0, 30, 0, 3, + 79, 81, 79, 81, +/* AUTO 0 */ + 211, + 0, 6, 0, 5, 0, 15, 0, 7, + 79, 81, 79, 81, +/* AUTO 0 */ + 206, + 0, 22, 0, 1, 0, 1, + 54, 87, 54, +/* AUTO 100 WET TOWEL*/ + 176, + 4, 17, 3, 66, 0, 66, 0, 62, + 72, +/* AUTO 75 DRY TOWEL*/ + 144, 75, + 4, 5, 0, 65, 0, 66, 3, 65, + 72, +/* AUTO 80 BLISS TIMER*/ + 138, 80, + 8, 4, 0, 3, + 81, 77, 73, +/* AUTO 0 */ + 200, + 15, 0, 0, 4, + 60, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* AUTO 100 */ + 170, + 0, 4, 0, 52, + 81, 73, 59, +/* AUTO 0 TOO YOUNG*/ + 196, + 15, 0, + 61, +/* AUTO 0 TOO OLD*/ + 196, + 16, 100, + 61, +/* AUTO 0 WRINKLES*/ + 206, + 16, 60, 0, 52, 15, 100, + 74, 39, 48, +/* AUTO 0 YOUNG*/ + 200, + 15, 20, 16, 0, + 48, +/* AUTO 0 .*/ + 196, + 0, 4, + 81, +/* AUTO 100 DRAGON FOOD*/ + 171, + 2, 58, 9, 3, + 88, 88, 49, 61, +/* AUTO 100 CHAND FALL*/ + 179, + 8, 12, 0, 25, 0, 26, 0, 12, + 19, 73, 72, 60, +/* AUTO 0 ON ME*/ + 197, + 2, 26, + 20, 61, +/* AUTO 50 INVIS CNTR*/ + 138, 50, + 8, 3, 0, 2, + 81, 77, 73, +/* AUTO 0 */ + 200, + 15, 0, 0, 3, + 60, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 LAVA*/ + 169, + 4, 5, 9, 4, + 15, 61, +/* AUTO 100 TOSS BOX*/ + 182, + 8, 19, 0, 48, 0, 7, 0, 47, 0, 23, + 62, 62, 73, +/* AUTO 0 */ + 207, + 0, 49, 0, 22, 0, 19, + 62, 45, 60, 76, +/* AUTO 25 ROPE BURN*/ + 146, 25, + 8, 11, 0, 11, 0, 12, 0, 27, + 60, 58, 55, +/* AUTO 100 HOLD BREATH*/ + 170, + 8, 13, 0, 1, + 81, 77, 73, +/* AUTO 0 ARGH*/ + 196, + 15, 5, + 39, +/* AUTO 0 BREATH*/ + 201, + 15, 0, 0, 13, + 38, 60, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 DROWN*/ + 169, + 4, 17, 9, 13, + 40, 61, +/* AUTO 100 HAVE BOX*/ + 183, + 4, 23, 1, 48, 0, 1, 0, 48, 0, 1, + 87, 53, 87, 76, +/* AUTO 45 THROW CAN*/ + 151, 45, + 8, 14, 0, 14, 0, 68, 0, 50, 0, 50, + 60, 75, 113, 59, +/* AUTO 100 MISSED CAN*/ + 169, + 8, 14, 0, 14, + 60, 112, +/* AUTO 100 OPEN DOORS*/ + 178, + 8, 20, 14, 32, 0, 29, 0, 30, + 72, 57, 73, +/* AUTO 0 */ + 201, + 0, 31, 0, 32, + 72, 76, +/* AUTO 100 RATS LEAVE*/ + 174, + 2, 75, 8, 23, 0, 75, + 2, 121, 59, +/* AUTO 75 DIZZY SPELL*/ + 138, 75, + 8, 9, 0, 7, + 81, 77, 73, +/* AUTO 0 DIZZY DONE*/ + 200, + 15, 0, 0, 9, + 60, +/* AUTO 0 */ + 196, + 0, 7, + 81, +/* AUTO 100 LYCANTHROPE*/ + 166, + 8, 23, + 81, 73, 77, +/* AUTO 0 */ + 200, + 15, 0, 0, 23, + 60, +/* AUTO 0 */ + 192, + 81, +/* AUTO 0 */ +/* AUTO 100 DEAD*/ + 165, + 4, 32, + 65, 63, +}; +const uint8_t actions[] = { +/* DIVE ANY */ + 0, 95, 0, + 128, +/* LOOK ROOM */ + 5, 36, 64, + 4, 10, + 2, 50, +/* LOOK UP */ + 5, 36, 5, + 4, 3, + 2, 110, +/* THROW BRICK */ + 5, 22, 48, + 8, 2, + 1, 17, +/* OPEN CABIN */ + 15, 55, 99, + 9, 22, 0, 41, 0, 22, + 34, 5, 74, 58, +/* AT CAN TOO HIGH*/ + 19, 25, 60, + 8, 2, 0, 2, 0, 50, 9, 9, + 60, 114, 112, 53, +/* LOOK BATTL */ + 13, 36, 83, + 4, 3, 14, 68, 14, 69, + 2, 111, +/* LOOK BATTL */ + 13, 36, 83, + 4, 2, 14, 68, 14, 69, + 2, 111, +/* LOOK CASTL */ + 5, 36, 21, + 4, 3, + 2, 110, +/* LOOK UP */ + 5, 36, 5, + 4, 2, + 2, 110, +/* LOOK CASTL */ + 5, 36, 21, + 4, 2, + 2, 110, +/* GO SHAFT */ + 5, 1, 59, + 2, 67, + 6, 22, +/* AT DOOR FIRE*/ + 13, 25, 58, + 8, 10, 2, 31, 0, 20, + 37, 58, +/* AT DOOR */ + 13, 25, 58, + 8, 10, 2, 29, 0, 20, + 37, 58, +/* SQUEE TOWEL */ + 13, 80, 75, + 3, 62, 0, 65, 0, 62, + 1, 72, +/* DRY ANY */ + 22, 34, 0, + 1, 51, 3, 66, 0, 66, 0, 62, 0, 51, + 1, 72, 59, +/* AT CAN STRONG*/ + 19, 25, 60, + 8, 2, 0, 2, 8, 9, 0, 14, + 60, 37, 73, 58, +/* AUTO 0 THROW*/ + 204, + 4, 3, 0, 50, 0, 2, + 62, +/* AUTO 0 */ + 204, + 4, 2, 0, 50, 0, 3, + 62, +/* AT DRAGO */ + 11, 25, 52, + 8, 2, 2, 58, + 104, 106, 49, 61, +/* AT DRAGO */ + 11, 25, 52, + 8, 10, 2, 58, + 104, 106, 49, 61, +/* GO ROPE */ + 14, 1, 12, + 2, 27, 0, 12, 0, 27, + 1, 58, 59, +/* CAST FIRE */ + 5, 50, 11, + 8, 10, + 1, 17, +/* LOOK AROUN */ + 6, 36, 29, + 4, 21, + 1, 2, 117, +/* GO DOOR */ + 10, 1, 58, + 2, 54, 0, 25, + 1, 54, 76, +/* CAST BLISS FLOAT*/ + 15, 50, 33, + 3, 41, 0, 41, 0, 4, + 37, 59, 73, 58, +/* AUTO 0 UNDERWATER*/ + 202, + 4, 17, 0, 1, + 54, 76, 42, +/* PULL LEVER */ + 15, 32, 100, + 2, 74, 0, 74, 0, 42, + 73, 59, 74, 1, +/* AUTO 0 */ + 211, + 0, 55, 0, 56, 0, 3, 0, 4, + 72, 72, 45, 43, +/* LOOK HOLE */ + 6, 36, 35, + 4, 14, + 2, 123, 102, +/* CAST LYCAN */ + 15, 50, 57, + 3, 73, 0, 73, 0, 23, + 73, 37, 59, 58, +/* AUTO 0 */ + 202, + 0, 0, 0, 5, + 81, 79, 81, +/* AT RAT FIRE*/ + 10, 25, 103, + 8, 10, 2, 75, + 37, 15, 61, +/* LOOK ROPE .*/ + 10, 36, 12, + 2, 25, 8, 11, + 1, 2, 47, +/* CAST YOHO 2ND TIME*/ + 15, 50, 74, + 1, 45, 8, 6, 0, 45, + 37, 80, 76, 59, +/* CAST METHU AGE*/ + 14, 50, 40, + 1, 33, 0, 7, 0, 33, + 37, 58, 59, +/* QUIT ANY */ + 0, 71, 0, + 63, +/* SCORE ANY */ + 0, 67, 0, + 65, +/* INVEN ANY */ + 0, 72, 0, + 66, +/* GET INVEN */ + 0, 10, 41, + 66, +/* LOOK BOTTO */ + 15, 36, 43, + 2, 39, 14, 12, 0, 12, + 1, 74, 34, 5, +/* LOOK CAN .*/ + 6, 36, 60, + 3, 68, + 1, 2, 124, +/* CAST UNRAV */ + 19, 50, 77, + 3, 64, 2, 25, 0, 11, 0, 64, + 1, 37, 58, 59, +/* CAST UNRAV FAILED*/ + 10, 50, 77, + 3, 64, 0, 64, + 6, 59, 32, +/* GET ROPE */ + 14, 10, 12, + 2, 27, 0, 12, 0, 27, + 1, 58, 59, +/* GO FOUNT */ + 15, 1, 8, + 2, 18, 0, 4, 0, 8, + 1, 54, 76, 58, +/* GO COURT */ + 15, 1, 7, + 2, 19, 0, 3, 0, 8, + 1, 54, 76, 60, +/* LOOK MIRRO */ + 11, 36, 10, + 3, 20, 0, 4, + 81, 7, 78, 73, +/* AUTO 0 */ + 197, + 0, 4, + 81, 8, +/* AUTO 0 */ + 196, + 8, 3, + 11, +/* AUTO 0 */ + 196, + 9, 9, + 9, +/* AUTO 0 */ + 196, + 8, 4, + 10, +/* AUTO 0 */ + 196, + 8, 9, + 115, +/* AUTO 0 FERRET*/ + 196, + 8, 23, + 120, +/* AUTO 0 */ + 192, + 12, +/* GO LAVA BURNT*/ + 14, 1, 36, + 2, 21, 9, 4, 0, 5, + 1, 15, 61, +/* DAMN LAVA */ + 5, 46, 36, + 2, 21, + 1, 14, +/* LOOK DOOR */ + 5, 36, 58, + 2, 53, + 2, 29, +/* GO LAVA */ + 14, 1, 36, + 2, 21, 8, 4, 0, 5, + 1, 54, 76, +/* LOOK FOUNT */ + 2, 36, 8, + 1, 2, 16, +/* GO CENTE */ + 10, 1, 9, + 4, 4, 0, 6, + 1, 54, 76, +/* CAST FIRE */ + 15, 50, 11, + 3, 24, 0, 10, 0, 24, + 1, 17, 58, 59, +/* AT ROPE */ + 19, 25, 12, + 2, 25, 8, 10, 0, 11, 0, 10, + 1, 18, 58, 60, +/* AT STAIR */ + 14, 25, 50, + 8, 10, 4, 14, 4, 14, + 37, 15, 61, +/* CAST SEED */ + 23, 50, 26, + 1, 34, 0, 34, 2, 53, 0, 53, 0, 54, + 1, 59, 37, 72, +/* CAST SEED */ + 19, 50, 26, + 1, 34, 2, 31, 0, 20, 0, 34, + 31, 37, 58, 59, +/* LOOK KITCH */ + 6, 36, 54, + 4, 21, + 1, 2, 117, +/* SWIM DOWN DRAIN*/ + 23, 70, 6, + 4, 20, 0, 6, 0, 2, 0, 6, 0, 17, + 81, 79, 81, 54, +/* CAST SEED */ + 19, 50, 26, + 1, 34, 2, 29, 0, 20, 0, 34, + 31, 37, 58, 59, +/* THROW BRICK */ + 15, 22, 48, + 3, 50, 0, 50, 0, 2, + 1, 59, 58, 17, +/* GO DOOR */ + 10, 1, 58, + 2, 30, 0, 13, + 1, 54, 76, +/* GO DOOR */ + 10, 1, 58, + 2, 32, 0, 12, + 1, 54, 76, +/* CAST DIZZY */ + 15, 50, 55, + 3, 70, 0, 70, 0, 9, + 37, 59, 58, 125, +/* LOOK ASHES */ + 14, 36, 76, + 3, 63, 14, 7, 0, 7, + 74, 34, 5, +/* PULL WEST */ + 11, 32, 4, + 4, 10, 0, 31, + 26, 28, 54, 76, +/* GO CHAND */ + 10, 1, 13, + 2, 26, 0, 8, + 1, 54, 76, +/* LOOK CEILI */ + 6, 36, 14, + 4, 7, + 1, 2, 21, +/* LOOK UP */ + 6, 36, 5, + 4, 7, + 1, 2, 21, +/* CHOP TREE */ + 4, 52, 18, + 4, 9, + 23, +/* GO TREE */ + 4, 1, 18, + 4, 9, + 23, +/* PUSH WALL */ + 4, 28, 65, + 4, 10, + 24, +/* PUSH WALL */ + 2, 28, 65, + 1, 3, 25, +/* PUSH EAST */ + 11, 28, 3, + 4, 10, 0, 24, + 26, 28, 54, 76, +/* PUSH SOUTH */ + 11, 28, 2, + 4, 10, 0, 11, + 26, 28, 54, 76, +/* PUSH WEST */ + 6, 28, 4, + 4, 10, + 6, 3, 25, +/* LOOK WALL */ + 6, 36, 65, + 4, 10, + 1, 2, 51, +/* GO DRAIN */ + 10, 1, 42, + 2, 46, 0, 20, + 1, 54, 76, +/* SWIM WEST */ + 7, 70, 4, + 4, 17, + 6, 36, 26, 27, +/* SWIM EAST BY DRAIN*/ + 9, 70, 3, + 4, 17, 0, 6, + 81, 73, +/* AUTO 0 */ + 202, + 19, 2, 0, 20, + 1, 54, 76, +/* AUTO 0 */ + 199, + 4, 17, + 6, 36, 26, 27, +/* AUTO 0 */ + 196, + 0, 6, + 81, +/* PUSH DOWN */ + 11, 28, 6, + 4, 10, 0, 29, + 30, 54, 76, 88, +/* AUTO 0 DRAGONS LAIR*/ + 195, + 88, 88, 88, 88, +/* GO DRAWB */ + 10, 1, 38, + 2, 56, 0, 2, + 1, 54, 76, +/* HYPER ANY */ + 1, 62, 0, + 6, 41, +/* BREAT DEEP */ + 1, 61, 31, + 6, 41, +/* GO SHAFT */ + 15, 1, 59, + 2, 22, 0, 12, 0, 8, + 1, 54, 76, 60, +/* CAST SEED */ + 23, 50, 26, + 2, 3, 1, 34, 0, 34, 0, 3, 0, 4, + 31, 73, 59, 72, +/* AUTO 0 */ + 201, + 0, 55, 0, 56, + 72, 37, +/* GO DRAWB */ + 10, 1, 38, + 2, 4, 0, 2, + 1, 54, 76, +/* LOOK DOOR */ + 6, 36, 58, + 2, 29, + 1, 2, 29, +/* LOOK DOOR */ + 6, 36, 58, + 2, 31, + 1, 2, 29, +/* OPEN DOOR */ + 2, 55, 58, + 6, 36, 35, +/* DRINK POTIO */ + 14, 58, 28, + 3, 35, 0, 35, 0, 3, + 1, 59, 58, +/* DIG ANY */ + 15, 42, 0, + 4, 1, 14, 14, 0, 14, + 1, 74, 34, 5, +/* SAVE GAME */ + 1, 27, 39, + 1, 71, +/* CAST LIGHT */ + 10, 50, 61, + 3, 36, 0, 36, + 59, 73, 1, +/* AUTO 0 */ + 206, + 2, 37, 0, 37, 0, 38, + 72, 37, 108, +/* AUTO 0 */ + 200, + 14, 38, 5, 26, + 32, +/* AUTO 0 */ + 199, + 2, 26, + 108, 19, 20, 61, +/* GO LOFT */ + 19, 1, 16, + 2, 38, 0, 15, 0, 37, 0, 38, + 54, 76, 72, 19, +/* GO BALLR */ + 10, 1, 63, + 2, 37, 0, 7, + 1, 54, 76, +/* GO MOAT */ + 10, 1, 22, + 2, 1, 0, 16, + 1, 54, 76, +/* GET BREAT */ + 23, 10, 30, + 9, 13, 0, 13, 0, 1, 0, 8, 0, 1, + 58, 81, 79, 81, +/* BREAT ANY */ + 10, 61, 0, + 0, 13, 8, 13, + 1, 60, 38, +/* SWIM DOWN FROM SURFACE*/ + 23, 70, 6, + 4, 16, 9, 4, 0, 17, 0, 6, 0, 1, + 54, 81, 79, 73, +/* AUTO 0 */ + 203, + 0, 6, 0, 39, + 81, 59, 1, 76, +/* SWIM DOWN */ + 19, 70, 6, + 4, 17, 14, 39, 0, 6, 0, 1, + 1, 81, 82, 73, +/* AUTO 0 AT BOTTOM*/ + 201, + 16, 4, 0, 39, + 53, 76, +/* AUTO 0 */ + 196, + 0, 6, + 81, +/* CAST FIREF GLOWING*/ + 15, 50, 51, + 1, 57, 0, 57, 0, 9, + 59, 48, 74, 76, +/* SWIM UP FROM BOTTOM*/ + 23, 70, 5, + 4, 17, 2, 39, 0, 39, 0, 6, 0, 6, + 59, 81, 77, 81, +/* SWIM UP */ + 11, 70, 5, + 4, 17, 0, 6, + 1, 81, 77, 73, +/* AUTO 0 AT TOP*/ + 201, + 15, 0, 0, 16, + 54, 76, +/* AUTO 0 */ + 196, + 0, 6, + 81, +/* CAST PERME */ + 5, 50, 32, + 3, 40, + 1, 73, +/* AUTO 0 */ + 207, + 4, 13, 0, 12, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 */ + 211, + 13, 40, 4, 12, 0, 13, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 */ + 207, + 4, 14, 0, 18, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 */ + 211, + 13, 40, 4, 18, 0, 14, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 IN BOX*/ + 207, + 4, 23, 0, 22, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 HAVE BOX*/ + 215, + 13, 40, 3, 48, 0, 1, 0, 23, 0, 40, + 87, 54, 37, 59, +/* AUTO 0 ON BOX*/ + 211, + 13, 40, 4, 22, 0, 23, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 */ + 207, + 4, 9, 0, 19, 0, 40, + 37, 54, 76, 59, +/* AUTO 0 SPELL FAILED*/ + 202, + 13, 40, 0, 40, + 6, 59, 32, +/* JUMP ANY */ + 11, 60, 0, + 4, 15, 9, 4, + 1, 30, 33, 61, +/* JUMP ANY */ + 15, 60, 0, + 4, 15, 8, 4, 0, 7, + 30, 37, 54, 76, +/* LOOK DRAGO */ + 15, 36, 52, + 2, 58, 14, 17, 0, 17, + 74, 1, 34, 5, +/* SWIM ANY */ + 6, 70, 0, + 4, 17, + 6, 36, 35, +/* GO CRATE */ + 19, 1, 46, + 2, 48, 0, 1, 0, 22, 7, 17, + 1, 87, 54, 76, +/* GET OFF CRATE*/ + 10, 10, 45, + 4, 22, 0, 1, + 1, 87, 76, +/* GET DOWN */ + 10, 10, 6, + 4, 22, 0, 1, + 1, 87, 76, +/* GO HOLE */ + 10, 1, 35, + 2, 47, 0, 22, + 1, 54, 76, +/* GO HOLE */ + 10, 1, 35, + 2, 49, 0, 23, + 1, 54, 76, +/* THROW CRATE */ + 13, 22, 46, + 3, 48, 4, 15, 0, 19, + 1, 58, +/* THROW CRATE */ + 13, 22, 46, + 3, 48, 2, 38, 0, 19, + 1, 58, +/* GET DUST */ + 9, 10, 68, + 3, 59, 0, 59, + 1, 74, +/* GET DUST */ + 9, 10, 68, + 4, 24, 0, 59, + 1, 74, +/* LOOK DRAGO */ + 11, 36, 52, + 2, 58, 14, 60, + 2, 104, 27, 102, +/* THROW DUST */ + 10, 22, 68, + 3, 59, 0, 59, + 1, 59, 73, +/* AUTO 0 AT DRAGON*/ + 203, + 2, 58, 0, 60, + 103, 104, 28, 53, +/* GO HOLE */ + 10, 1, 35, + 2, 60, 0, 30, + 1, 54, 76, +/* KNOCK ANY */ + 5, 40, 0, + 4, 10, + 1, 105, +/* SAY ANY */ + 7, 7, 0, + 2, 58, + 104, 106, 49, 61, +/* CAST WICKE CAST*/ + 10, 50, 70, + 3, 61, 0, 61, + 1, 59, 73, +/* AUTO 0 */ + 205, + 3, 28, 0, 28, 0, 20, + 72, 37, +/* AUTO 0 */ + 197, + 14, 20, + 6, 32, +/* LOOK CAN */ + 15, 36, 60, + 3, 69, 14, 13, 0, 13, + 1, 34, 5, 74, +/* USE METAL */ + 22, 43, 90, + 8, 21, 3, 71, 3, 68, 0, 68, 0, 69, + 1, 72, 73, +/* AUTO 0 */ + 196, + 0, 21, + 60, +/* OPEN CAN */ + 5, 55, 60, + 0, 21, + 46, 58, +/* LOOK METAL */ + 6, 36, 90, + 3, 71, + 1, 2, 116, +/* OPEN ANY */ + 0, 55, 0, + 46, +/* BREAT ANY */ + 0, 61, 0, + 119, +/* CAST SPELL */ + 0, 50, 94, + 118, +/* RAISE ANY */ + 0, 74, 0, + 46, +/* JUMP ANY CRATE*/ + 10, 60, 0, + 4, 22, 0, 1, + 1, 87, 76, +/* DIG ANY DIG*/ + 3, 42, 0, + 1, 2, 3, 4, +/* SWIM ANY DRAGGED DOWN*/ + 11, 70, 0, + 4, 16, 9, 4, + 35, 42, 107, 61, +/* JUMP ANY */ + 2, 60, 0, + 3, 4, 25, +/* CAST SEED */ + 17, 50, 26, + 1, 34, 2, 55, 0, 55, 0, 56, + 73, 72, +/* AUTO 0 */ + 206, + 0, 3, 0, 4, 0, 34, + 37, 72, 59, +/* CAST SEED */ + 9, 50, 26, + 1, 34, 0, 34, + 59, 32, +/* SAY ANY */ + 10, 7, 0, + 0, 13, 4, 17, + 1, 129, 60, +/* DRY ANY .*/ + 0, 34, 0, + 46, +/* AT WOOD LIGHT FIRE*/ + 14, 25, 34, + 8, 10, 3, 42, 0, 10, + 60, 73, 37, +/* AUTO 0 */ + 197, + 1, 42, + 15, 61, +/* AUTO 0 */ + 207, + 8, 15, 2, 42, 0, 42, + 59, 18, 57, 76, +/* AUTO 0 */ + 199, + 14, 42, + 88, 88, 88, 88, +/* AUTO 0 */ + 199, + 14, 42, + 88, 56, 70, 76, +/* AUTO 0 */ + 196, + 0, 42, + 59, +/* SWIM ANY */ + 4, 70, 0, + 4, 16, + 118, +/* SWIM ANY */ + 4, 70, 0, + 4, 20, + 118, +/* FEEL ANY */ + 3, 83, 0, + 1, 3, 4, 25, +/* AT TREE */ + 19, 25, 18, + 8, 10, 0, 10, 4, 9, 0, 63, + 1, 60, 53, 37, +/* AT ANY */ + 11, 25, 0, + 8, 10, 0, 10, + 60, 1, 42, 32, +/* THROW ANY */ + 1, 22, 0, + 6, 109, +/* PUSH ANY */ + 2, 28, 0, + 3, 4, 25, +/* PULL ANY */ + 2, 32, 0, + 3, 4, 25, +/* SQUEE ANY */ + 3, 80, 0, + 1, 3, 4, 25, +/* GET SPELL */ + 0, 10, 94, + 118, +/* SAY ANY */ + 6, 7, 0, + 0, 13, + 1, 85, 60, +/* CAST YOHO 1ST TIME*/ + 14, 50, 74, + 1, 45, 9, 6, 0, 6, + 37, 58, 73, +/* AUTO 0 ON BOX*/ + 200, + 4, 22, 0, 45, + 59, +/* AUTO 0 IN BOX*/ + 200, + 4, 23, 0, 45, + 59, +/* AUTO 0 MOVE HIM*/ + 193, + 80, 76, +/* WAKEN MONST */ + 11, 91, 106, + 3, 43, 0, 1, + 1, 127, 54, 76, +/* HELP ANY */ + 9, 90, 0, + 3, 3, 3, 34, + 66, 126, +/* HELP ANY */ + 2, 90, 0, + 6, 36, 12, +/* USE ANY */ + 2, 43, 0, + 6, 3, 25, +/* LOOK ANY */ + 3, 36, 0, + 2, 3, 4, 76, +/* GO MOAT */ + 10, 1, 22, + 4, 2, 0, 16, + 1, 54, 76, +/* GO BATTL */ + 255, 1, 83, + 4, 0, +/* AT ANY BRICKS*/ + 15, 25, 0, + 8, 2, 0, 2, 0, 50, + 60, 53, 3, 25, +/* WALK UP */ + 10, 6, 5, + 4, 14, 0, 11, + 1, 54, 76, +/* WALK DOWN */ + 9, 6, 6, + 4, 14, 3, 75, + 6, 122, +/* WALK DOWN */ + 14, 6, 6, + 4, 14, 5, 75, 0, 13, + 1, 54, 76, +/* GO HOLE */ + 14, 1, 35, + 4, 14, 8, 23, 0, 18, + 1, 54, 76, +/* GO HOLE */ + 14, 1, 35, + 4, 18, 8, 23, 0, 14, + 1, 54, 76, +/* GO STAIR */ + 0, 1, 50, + 118, +/* LIGHT ANY */ + 0, 96, 0, + 46, +/* AUTO 0 */ + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, 32, + /* GO */ + 71, 79, 32, 32, 32, + /* *CROSS */ + 195, 82, 79, 83, 83, + /* *RUN */ + 210, 85, 78, 32, 32, + /* *ENTER */ + 197, 78, 84, 69, 82, + /* *CLIMB */ + 195, 76, 73, 77, 66, + /* WALK */ + 87, 65, 76, 75, 32, + /* SAY */ + 83, 65, 89, 32, 32, + /* *YELL */ + 217, 69, 76, 76, 32, + /* *SCREA */ + 211, 67, 82, 69, 65, + /* GET */ + 71, 69, 84, 32, 32, + /* *TAKE */ + 212, 65, 75, 69, 32, + /* *PICK */ + 208, 73, 67, 75, 32, + /* *CARRY */ + 195, 65, 82, 82, 89, + /* *HOLD */ + 200, 79, 76, 68, 32, + /* *UNTIE */ + 213, 78, 84, 73, 69, + /* *REMOV */ + 210, 69, 77, 79, 86, + /* *PICKU */ + 208, 73, 67, 75, 85, + /* DROP */ + 68, 82, 79, 80, 32, + /* *LEAVE */ + 204, 69, 65, 86, 69, + /* *PUT */ + 208, 85, 84, 32, 32, + /* *RELEA */ + 210, 69, 76, 69, 65, + /* THROW */ + 84, 72, 82, 79, 87, + /* *TOSS */ + 212, 79, 83, 83, 32, + /* *BLOW */ + 194, 76, 79, 87, 32, + /* AT */ + 65, 84, 32, 32, 32, + /* *TOWAR */ + 212, 79, 87, 65, 82, + /* SAVE */ + 83, 65, 86, 69, 32, + /* PUSH */ + 80, 85, 83, 72, 32, + /* *PRESS */ + 208, 82, 69, 83, 83, + /* *HIT */ + 200, 73, 84, 32, 32, + /* *KICK */ + 203, 73, 67, 75, 32, + /* PULL */ + 80, 85, 76, 76, 32, + /* *TUG */ + 212, 85, 71, 32, 32, + /* DRY */ + 68, 82, 89, 32, 32, + /* . */ + 46, 32, 32, 32, 32, + /* LOOK */ + 76, 79, 79, 75, 32, + /* *L */ + 204, 32, 32, 32, 32, + /* *DESCR */ + 196, 69, 83, 67, 82, + /* *EXAMI */ + 197, 88, 65, 77, 73, + /* KNOCK */ + 75, 78, 79, 67, 75, + /* *TAP */ + 212, 65, 80, 32, 32, + /* DIG */ + 68, 73, 71, 32, 32, + /* USE */ + 85, 83, 69, 32, 32, + /* *WITH */ + 215, 73, 84, 72, 32, + /* *USING */ + 213, 83, 73, 78, 71, + /* DAMN */ + 68, 65, 77, 78, 32, + /* *DAM */ + 196, 65, 77, 32, 32, + /* *CURSE */ + 195, 85, 82, 83, 69, + /* . */ + 46, 32, 32, 32, 32, + /* CAST */ + 67, 65, 83, 84, 32, + /* *INVOK */ + 201, 78, 86, 79, 75, + /* CHOP */ + 67, 72, 79, 80, 32, + /* *CUT */ + 195, 85, 84, 32, 32, + /* *SLICE */ + 211, 76, 73, 67, 69, + /* OPEN */ + 79, 80, 69, 78, 32, + /* *UNLOC */ + 213, 78, 76, 79, 67, + /* *CLOSE */ + 195, 76, 79, 83, 69, + /* DRINK */ + 68, 82, 73, 78, 75, + /* *TASTE */ + 212, 65, 83, 84, 69, + /* JUMP */ + 74, 85, 77, 80, 32, + /* BREAT */ + 66, 82, 69, 65, 84, + /* HYPER */ + 72, 89, 80, 69, 82, + /* FASTE */ + 70, 65, 83, 84, 69, + /* *REPLA */ + 210, 69, 80, 76, 65, + /* *TIGHT */ + 212, 73, 71, 72, 84, + /* *SECU */ + 211, 69, 67, 85, 32, + /* SCORE */ + 83, 67, 79, 82, 69, + /* . */ + 46, 32, 32, 32, 32, + /* . */ + 46, 32, 32, 32, 32, + /* SWIM */ + 83, 87, 73, 77, 32, + /* QUIT */ + 81, 85, 73, 84, 32, + /* INVEN */ + 73, 78, 86, 69, 78, + /* *INVE */ + 201, 78, 86, 69, 32, + /* RAISE */ + 82, 65, 73, 83, 69, + /* *LIFT */ + 204, 73, 70, 84, 32, + /* *BREAK */ + 194, 82, 69, 65, 75, + /* *SMASH */ + 211, 77, 65, 83, 72, + /* *UNRAV */ + 213, 78, 82, 65, 86, + /* *MOVE */ + 205, 79, 86, 69, 32, + /* SQUEE */ + 83, 81, 85, 69, 69, + /* *WRING */ + 215, 82, 73, 78, 71, + /* *SQUEZ */ + 211, 81, 85, 69, 90, + /* FEEL */ + 70, 69, 69, 76, 32, + /* *TOUCH */ + 212, 79, 85, 67, 72, + /* *DANCE */ + 196, 65, 78, 67, 69, + /* *WAVE */ + 215, 65, 86, 69, 32, + /* *LISTE */ + 204, 73, 83, 84, 69, + /* *SING */ + 211, 73, 78, 71, 32, + /* *WASH */ + 215, 65, 83, 72, 32, + /* HELP */ + 72, 69, 76, 80, 32, + /* WAKEN */ + 87, 65, 75, 69, 78, + /* *AWAKE */ + 193, 87, 65, 75, 69, + /* *WAKE */ + 215, 65, 75, 69, 32, + /* */ + 32, 32, 32, 32, 32, + /* DIVE */ + 68, 73, 86, 69, 32, + /* LIGHT */ + 76, 73, 71, 72, 84, + /* *BURN */ + 194, 85, 82, 78, 32, + /* *IGNIT */ + 201, 71, 78, 73, 84, + /* *BUILD */ + 194, 85, 73, 76, 68, + /* *MAKE */ + 205, 65, 75, 69, 32, + /* *COOK */ + 195, 79, 79, 75, 32, + /* *WASH */ + 215, 65, 83, 72, 32, + /* *LOWER */ + 204, 79, 87, 69, 82, + /* *KILL */ + 203, 73, 76, 76, 32, + /* *SLAY */ + 211, 76, 65, 89, 32, + /* *CLEAN */ + 195, 76, 69, 65, 78, + /* */ + 32, 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, 32, + /* NORTH */ + 78, 79, 82, 84, 72, + /* SOUTH */ + 83, 79, 85, 84, 72, + /* EAST */ + 69, 65, 83, 84, 32, + /* WEST */ + 87, 69, 83, 84, 32, + /* UP */ + 85, 80, 32, 32, 32, + /* DOWN */ + 68, 79, 87, 78, 32, + /* COURT */ + 67, 79, 85, 82, 84, + /* FOUNT */ + 70, 79, 85, 78, 84, + /* CENTE */ + 67, 69, 78, 84, 69, + /* MIRRO */ + 77, 73, 82, 82, 79, + /* FIRE */ + 70, 73, 82, 69, 32, + /* ROPE */ + 82, 79, 80, 69, 32, + /* CHAND */ + 67, 72, 65, 78, 68, + /* CEILI */ + 67, 69, 73, 76, 73, + /* *ROOF */ + 210, 79, 79, 70, 32, + /* LOFT */ + 76, 79, 70, 84, 32, + /* FORES */ + 70, 79, 82, 69, 83, + /* TREE */ + 84, 82, 69, 69, 32, + /* *TREES */ + 212, 82, 69, 69, 83, + /* GLASS */ + 71, 76, 65, 83, 83, + /* CASTL */ + 67, 65, 83, 84, 76, + /* MOAT */ + 77, 79, 65, 84, 32, + /* *WATER */ + 215, 65, 84, 69, 82, + /* *DROPL */ + 196, 82, 79, 80, 76, + /* *POOL */ + 208, 79, 79, 76, 32, + /* SEED */ + 83, 69, 69, 68, 32, + /* STAR */ + 83, 84, 65, 82, 32, + /* POTIO */ + 80, 79, 84, 73, 79, + /* AROUN */ + 65, 82, 79, 85, 78, + /* BREAT */ + 66, 82, 69, 65, 84, + /* DEEP */ + 68, 69, 69, 80, 32, + /* PERME */ + 80, 69, 82, 77, 69, + /* BLISS */ + 66, 76, 73, 83, 83, + /* WOOD */ + 87, 79, 79, 68, 32, + /* HOLE */ + 72, 79, 76, 69, 32, + /* LAVA */ + 76, 65, 86, 65, 32, + /* *STREA */ + 211, 84, 82, 69, 65, + /* DRAWB */ + 68, 82, 65, 87, 66, + /* GAME */ + 71, 65, 77, 69, 32, + /* METHU */ + 77, 69, 84, 72, 85, + /* INVEN */ + 73, 78, 86, 69, 78, + /* DRAIN */ + 68, 82, 65, 73, 78, + /* BOTTO */ + 66, 79, 84, 84, 79, + /* HOLE */ + 72, 79, 76, 69, 32, + /* OFF */ + 79, 70, 70, 32, 32, + /* CRATE */ + 67, 82, 65, 84, 69, + /* *BOX */ + 194, 79, 88, 32, 32, + /* BRICK */ + 66, 82, 73, 67, 75, + /* WRINK */ + 87, 82, 73, 78, 75, + /* STAIR */ + 83, 84, 65, 73, 82, + /* FIREF */ + 70, 73, 82, 69, 70, + /* DRAGO */ + 68, 82, 65, 71, 79, + /* LAIR */ + 76, 65, 73, 82, 32, + /* KITCH */ + 75, 73, 84, 67, 72, + /* DIZZY */ + 68, 73, 90, 90, 89, + /* *DEAN */ + 196, 69, 65, 78, 32, + /* LYCAN */ + 76, 89, 67, 65, 78, + /* DOOR */ + 68, 79, 79, 82, 32, + /* SHAFT */ + 83, 72, 65, 70, 84, + /* CAN */ + 67, 65, 78, 32, 32, + /* LIGHT */ + 76, 73, 71, 72, 84, + /* *SQUAR */ + 211, 81, 85, 65, 82, + /* BALLR */ + 66, 65, 76, 76, 82, + /* ROOM */ + 82, 79, 79, 77, 32, + /* WALL */ + 87, 65, 76, 76, 32, + /* *WALLS */ + 215, 65, 76, 76, 83, + /* *FLOOR */ + 198, 76, 79, 79, 82, + /* DUST */ + 68, 85, 83, 84, 32, + /* WORKS */ + 87, 79, 82, 75, 83, + /* WICKE */ + 87, 73, 67, 75, 69, + /* *QUEEN */ + 209, 85, 69, 69, 78, + /* AWAY */ + 65, 87, 65, 89, 32, + /* CRACK */ + 67, 82, 65, 67, 75, + /* YOHO */ + 89, 79, 72, 79, 32, + /* TOWEL */ + 84, 79, 87, 69, 76, + /* ASHES */ + 65, 83, 72, 69, 83, + /* UNRAV */ + 85, 78, 82, 65, 86, + /* SELF */ + 83, 69, 76, 70, 32, + /* *ME */ + 205, 69, 32, 32, 32, + /* *MYSEL */ + 205, 89, 83, 69, 76, + /* *YOU */ + 217, 79, 85, 32, 32, + /* SESAM */ + 83, 69, 83, 65, 77, + /* BATTL */ + 66, 65, 84, 84, 76, + /* ICON */ + 73, 67, 79, 78, 32, + /* NICHE */ + 78, 73, 67, 72, 69, + /* LOCK */ + 76, 79, 67, 75, 32, + /* CELL */ + 67, 69, 76, 76, 32, + /* *DUNGE */ + 196, 85, 78, 71, 69, + /* OUTLE */ + 79, 85, 84, 76, 69, + /* METAL */ + 77, 69, 84, 65, 76, + /* *CANOP */ + 195, 65, 78, 79, 80, + /* *OPENE */ + 207, 80, 69, 78, 69, + /* COUNT */ + 67, 79, 85, 78, 84, + /* SPELL */ + 83, 80, 69, 76, 76, + /* STOVE */ + 83, 84, 79, 86, 69, + /* *RANGE */ + 210, 65, 78, 71, 69, + /* *OVEN */ + 207, 86, 69, 78, 32, + /* GROTT */ + 71, 82, 79, 84, 84, + /* CABIN */ + 67, 65, 66, 73, 78, + /* LEVER */ + 76, 69, 86, 69, 82, + /* HANDS */ + 72, 65, 78, 68, 83, + /* *PAW */ + 208, 65, 87, 32, 32, + /* RAT */ + 82, 65, 84, 32, 32, + /* *RATS */ + 210, 65, 84, 83, 32, + /* SINK */ + 83, 73, 78, 75, 32, + /* MONST */ + 77, 79, 78, 83, 84, + /* EDGE */ + 69, 68, 71, 69, 32, + /* *EDGES */ + 197, 68, 71, 69, 83, + /* */ + 32, 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* STAR */ + 83, 84, 65, 82, 32, + 0, + /* STAR */ + 83, 84, 65, 82, 32, + 5, + /* STAR */ + 83, 84, 65, 82, 32, + 6, + /* STAR */ + 83, 84, 65, 82, 32, + 7, + /* STAR */ + 83, 84, 65, 82, 32, + 8, + /* STAR */ + 83, 84, 65, 82, 32, + 10, + /* STAR */ + 83, 84, 65, 82, 32, + 11, + /* STAR */ + 83, 84, 65, 82, 32, + 12, + /* STAR */ + 83, 84, 65, 82, 32, + 13, + /* STAR */ + 83, 84, 65, 82, 32, + 14, + /* STAR */ + 83, 84, 65, 82, 32, + 15, + /* STAR */ + 83, 84, 65, 82, 32, + 16, + /* STAR */ + 83, 84, 65, 82, 32, + 17, + /* MIRRO */ + 77, 73, 82, 82, 79, + 20, + /* FIRE */ + 70, 73, 82, 69, 32, + 24, + /* GLASS */ + 71, 76, 65, 83, 83, + 28, + /* METHU */ + 77, 69, 84, 72, 85, + 33, + /* SEED */ + 83, 69, 69, 68, 32, + 34, + /* POTIO */ + 80, 79, 84, 73, 79, + 35, + /* LIGHT */ + 76, 73, 71, 72, 84, + 36, + /* PERME */ + 80, 69, 82, 77, 69, + 40, + /* BLISS */ + 66, 76, 73, 83, 83, + 41, + /* WOOD */ + 87, 79, 79, 68, 32, + 42, + /* YOHO */ + 89, 79, 72, 79, 32, + 45, + /* CRATE */ + 67, 82, 65, 84, 69, + 48, + /* BRICK */ + 66, 82, 73, 67, 75, + 50, + /* FIREF */ + 70, 73, 82, 69, 70, + 57, + /* DUST */ + 68, 85, 83, 84, 32, + 59, + /* WICKE */ + 87, 73, 67, 75, 69, + 61, + /* TOWEL */ + 84, 79, 87, 69, 76, + 62, + /* ASHES */ + 65, 83, 72, 69, 83, + 63, + /* UNRAV */ + 85, 78, 82, 65, 86, + 64, + /* TOWEL */ + 84, 79, 87, 69, 76, + 65, + /* TOWEL */ + 84, 79, 87, 69, 76, + 66, + /* CAN */ + 67, 65, 78, 32, 32, + 68, + /* CAN */ + 67, 65, 78, 32, 32, + 69, + /* DIZZY */ + 68, 73, 90, 90, 89, + 70, + /* METAL */ + 77, 69, 84, 65, 76, + 71, + /* LYCAN */ + 76, 89, 67, 65, 78, + 73, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv14a.c b/Applications/games/adv14a.c new file mode 100644 index 00000000..5378b7cc --- /dev/null +++ b/Applications/games/adv14a.c @@ -0,0 +1,3479 @@ +#define NUM_OBJ 71 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 1; +const uint8_t lightfill = 1; +const uint8_t startcarried = 0; +const uint8_t maxcar = 10; +const uint8_t treasure = 13; +const uint8_t treasures = 13; +const uint8_t lastloc = 24; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +0 }; +const uint8_t loctxt_1[] = { +98, 111, 116, 116, 111, 109, 32, 98, 117, 110, 107, 0 }; +const uint8_t loctxt_2[] = { +115, 104, 105, 112, 39, 115, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 100, 111, 99, 107, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 111, 110, 32, 100, 101, 99, 107, 0 }; +const uint8_t loctxt_5[] = { +98, 101, 97, 99, 104, 32, 98, 121, 32, 97, 32, 115, 109, 97, 108, 108, 32, 104, 105, 108, 108, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 111, 110, 32, 108, 101, 100, 103, 101, 32, 56, 32, 102, 101, 101, 116, 32, 98, 101, 108, 111, 119, 32, 104, 105, 108, 108, 32, 115, 117, 109, 109, 105, 116, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 115, 109, 97, 108, 108, 32, 104, 105, 108, 108, 0 }; +const uint8_t loctxt_8[] = { +99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_9[] = { +116, 111, 111, 108, 32, 115, 104, 101, 100, 0 }; +const uint8_t loctxt_10[] = { +42, 83, 111, 114, 114, 121, 44, 32, 116, 111, 32, 101, 120, 112, 108, 111, 114, 101, 32, 80, 105, 114, 97, 116, 101, 39, 115, 32, 73, 115, 108, 101, 32, 121, 111, 117, 39, 108, 108, 32, 110, 101, 101, 100, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 35, 50, 0 }; +const uint8_t loctxt_11[] = { +115, 101, 97, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 117, 110, 100, 101, 114, 115, 101, 97, 0 }; +const uint8_t loctxt_13[] = { +115, 109, 117, 103, 103, 108, 101, 114, 115, 32, 104, 111, 108, 100, 32, 105, 110, 115, 105, 100, 101, 32, 115, 104, 105, 112, 0 }; +const uint8_t loctxt_14[] = { +104, 97, 108, 108, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 114, 111, 99, 107, 121, 32, 98, 101, 97, 99, 104, 32, 98, 121, 32, 115, 101, 97, 0 }; +const uint8_t loctxt_16[] = { +116, 111, 112, 32, 98, 117, 110, 107, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 101, 110, 103, 105, 110, 101, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 101, 110, 103, 105, 110, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_19[] = { +42, 73, 39, 109, 32, 111, 110, 32, 99, 97, 116, 119, 97, 108, 107, 32, 111, 110, 32, 111, 117, 116, 115, 105, 100, 101, 32, 111, 102, 32, 115, 104, 105, 112, 32, 98, 121, 32, 112, 111, 114, 116, 104, 111, 108, 101, 0 }; +const uint8_t loctxt_20[] = { +110, 97, 114, 114, 111, 119, 32, 99, 114, 97, 119, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_21[] = { +115, 104, 105, 112, 39, 115, 32, 104, 111, 108, 100, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 111, 110, 32, 98, 101, 97, 109, 32, 117, 110, 100, 101, 114, 32, 100, 111, 99, 107, 0 }; +const uint8_t loctxt_23[] = { +115, 117, 110, 107, 101, 110, 32, 115, 104, 105, 112, 0 }; +const uint8_t loctxt_24[] = { +78, 101, 118, 101, 114, 32, 78, 101, 118, 101, 114, 32, 76, 97, 110, 100, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_2, { 0, 0, 0, 0, 4, 18 } }, + { loctxt_3, { 5, 0, 0, 0, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 0, 0, 2 } }, + { loctxt_5, { 0, 3, 15, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 0, 5 } }, + { loctxt_7, { 0, 0, 0, 0, 0, 10 } }, + { loctxt_8, { 0, 0, 0, 14, 0, 0 } }, + { loctxt_9, { 8, 0, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 0, 7, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 0, 0, 8, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 5, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 2 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 18 } }, + { loctxt_18, { 0, 0, 0, 0, 2, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 21, 13, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 20, 0, 0 } }, + { loctxt_22, { 0, 0, 0, 0, 0, 11 } }, + { loctxt_23, { 0, 0, 0, 0, 12, 0 } }, + { loctxt_24, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 7, + 2, + 0, + 5, + 0, + 8, + 9, + 7, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 2, + 16, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 13, + 21, + 4, + 4, + 0, + 12, + 0, + 16, + 11, + 12, + 0, + 0, + 21, + 3, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 13, + 0, + 0, + 0, + 19, + 0, + 2, + 0, + 0, + 0, + 0, + 23, + 22, + 0, + 0, + 0, + 0, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +78, 97, 114, 114, 111, 119, 32, 99, 114, 97, 99, 107, 32, 105, 110, 32, 114, 111, 99, 107, 0 }; +const uint8_t objtxt_1[] = { +71, 108, 97, 115, 115, 101, 115, 0 }; +const uint8_t objtxt_2[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_3[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_4[] = { +73, 115, 108, 101, 32, 111, 102, 102, 32, 105, 110, 32, 100, 105, 115, 116, 97, 110, 99, 101, 0 }; +const uint8_t objtxt_5[] = { +84, 111, 111, 108, 115, 104, 101, 100, 0 }; +const uint8_t objtxt_6[] = { +72, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_7[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 80, 105, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_8[] = { +66, 111, 120, 0 }; +const uint8_t objtxt_9[] = { +46, 0 }; +const uint8_t objtxt_10[] = { +42, 82, 97, 114, 101, 32, 83, 116, 97, 109, 112, 115, 42, 0 }; +const uint8_t objtxt_11[] = { +42, 68, 111, 117, 98, 108, 111, 111, 110, 115, 42, 0 }; +const uint8_t objtxt_12[] = { +80, 97, 105, 110, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_13[] = { +80, 105, 99, 116, 117, 114, 101, 32, 70, 114, 97, 109, 101, 0 }; +const uint8_t objtxt_14[] = { +80, 105, 99, 116, 117, 114, 101, 0 }; +const uint8_t objtxt_15[] = { +77, 97, 112, 0 }; +const uint8_t objtxt_16[] = { +66, 117, 110, 107, 32, 98, 101, 100, 0 }; +const uint8_t objtxt_17[] = { +70, 97, 99, 101, 32, 109, 97, 115, 107, 0 }; +const uint8_t objtxt_18[] = { +119, 104, 105, 99, 104, 32, 73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t objtxt_19[] = { +87, 105, 114, 101, 32, 114, 105, 109, 0 }; +const uint8_t objtxt_20[] = { +76, 101, 110, 115, 101, 115, 0 }; +const uint8_t objtxt_21[] = { +82, 101, 100, 32, 97, 108, 103, 97, 101, 0 }; +const uint8_t objtxt_22[] = { +71, 108, 117, 101, 0 }; +const uint8_t objtxt_23[] = { +42, 80, 105, 101, 99, 101, 32, 111, 102, 32, 65, 109, 98, 101, 114, 42, 0 }; +const uint8_t objtxt_24[] = { +66, 111, 111, 107, 108, 101, 116, 0 }; +const uint8_t objtxt_25[] = { +83, 101, 97, 0 }; +const uint8_t objtxt_26[] = { +68, 111, 99, 107, 32, 116, 111, 32, 116, 104, 101, 32, 69, 97, 115, 116, 0 }; +const uint8_t objtxt_27[] = { +85, 110, 100, 101, 114, 115, 105, 100, 101, 32, 111, 102, 32, 68, 111, 99, 107, 0 }; +const uint8_t objtxt_28[] = { +66, 111, 97, 116, 32, 116, 111, 32, 116, 104, 101, 32, 87, 69, 83, 84, 0 }; +const uint8_t objtxt_29[] = { +73, 110, 115, 105, 100, 101, 32, 111, 102, 32, 98, 111, 97, 116, 0 }; +const uint8_t objtxt_30[] = { +80, 111, 111, 108, 32, 111, 102, 32, 119, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_31[] = { +65, 108, 97, 114, 109, 32, 99, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_32[] = { +68, 111, 99, 107, 0 }; +const uint8_t objtxt_33[] = { +83, 101, 97, 0 }; +const uint8_t objtxt_34[] = { +80, 117, 109, 105, 99, 101, 32, 114, 111, 99, 107, 0 }; +const uint8_t objtxt_35[] = { +83, 105, 108, 116, 0 }; +const uint8_t objtxt_36[] = { +82, 111, 99, 107, 121, 32, 98, 101, 97, 99, 104, 0 }; +const uint8_t objtxt_37[] = { +42, 68, 105, 97, 109, 111, 110, 100, 32, 119, 97, 116, 99, 104, 42, 0 }; +const uint8_t objtxt_38[] = { +83, 116, 114, 97, 110, 103, 101, 32, 99, 117, 114, 114, 101, 110, 116, 0 }; +const uint8_t objtxt_39[] = { +83, 116, 114, 97, 110, 103, 101, 32, 99, 117, 114, 114, 101, 110, 116, 0 }; +const uint8_t objtxt_40[] = { +70, 108, 111, 116, 115, 97, 109, 32, 38, 32, 74, 101, 116, 115, 97, 109, 0 }; +const uint8_t objtxt_41[] = { +82, 117, 109, 0 }; +const uint8_t objtxt_42[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_43[] = { +66, 111, 97, 116, 0 }; +const uint8_t objtxt_44[] = { +79, 121, 115, 116, 101, 114, 0 }; +const uint8_t objtxt_45[] = { +80, 111, 114, 116, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_46[] = { +70, 97, 110, 32, 98, 108, 97, 100, 101, 0 }; +const uint8_t objtxt_47[] = { +72, 101, 108, 109, 0 }; +const uint8_t objtxt_48[] = { +79, 112, 101, 110, 32, 112, 111, 114, 116, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_49[] = { +83, 99, 114, 101, 119, 100, 114, 105, 118, 101, 114, 0 }; +const uint8_t objtxt_50[] = { +82, 117, 105, 110, 101, 100, 32, 119, 97, 116, 101, 114, 115, 111, 97, 107, 101, 100, 32, 112, 97, 105, 110, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_51[] = { +42, 82, 101, 109, 98, 114, 97, 110, 100, 116, 32, 80, 97, 105, 110, 116, 105, 110, 103, 42, 0 }; +const uint8_t objtxt_52[] = { +80, 105, 114, 97, 116, 101, 32, 97, 116, 32, 104, 101, 108, 109, 0 }; +const uint8_t objtxt_53[] = { +86, 101, 114, 121, 32, 110, 97, 114, 114, 111, 119, 32, 99, 114, 97, 119, 108, 119, 97, 121, 0 }; +const uint8_t objtxt_54[] = { +87, 97, 115, 104, 101, 100, 32, 111, 117, 116, 32, 115, 105, 103, 110, 0 }; +const uint8_t objtxt_55[] = { +42, 71, 111, 108, 100, 32, 69, 97, 114, 114, 105, 110, 103, 42, 0 }; +const uint8_t objtxt_56[] = { +42, 82, 97, 114, 101, 32, 66, 111, 111, 107, 42, 0 }; +const uint8_t objtxt_57[] = { +79, 105, 108, 115, 107, 105, 110, 32, 114, 97, 105, 110, 99, 111, 97, 116, 0 }; +const uint8_t objtxt_58[] = { +87, 97, 116, 101, 114, 112, 114, 111, 111, 102, 32, 112, 97, 105, 110, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_59[] = { +67, 101, 105, 108, 105, 110, 103, 32, 102, 97, 110, 0 }; +const uint8_t objtxt_60[] = { +42, 68, 105, 97, 109, 111, 110, 100, 32, 66, 114, 111, 111, 99, 104, 42, 0 }; +const uint8_t objtxt_61[] = { +83, 109, 97, 108, 108, 32, 98, 117, 116, 116, 111, 110, 32, 105, 110, 32, 99, 101, 105, 108, 105, 110, 103, 0 }; +const uint8_t objtxt_62[] = { +87, 97, 116, 101, 114, 115, 111, 97, 107, 101, 100, 32, 98, 111, 111, 107, 0 }; +const uint8_t objtxt_63[] = { +83, 117, 110, 107, 101, 110, 32, 83, 104, 105, 112, 0 }; +const uint8_t objtxt_64[] = { +42, 74, 101, 119, 101, 108, 101, 100, 32, 99, 104, 101, 115, 116, 42, 0 }; +const uint8_t objtxt_65[] = { +42, 83, 105, 108, 118, 101, 114, 32, 68, 111, 108, 108, 97, 114, 42, 0 }; +const uint8_t objtxt_66[] = { +42, 80, 101, 97, 114, 108, 42, 0 }; +const uint8_t objtxt_67[] = { +83, 110, 97, 105, 108, 0 }; +const uint8_t objtxt_68[] = { +68, 101, 97, 100, 32, 115, 110, 97, 105, 108, 0 }; +const uint8_t objtxt_69[] = { +42, 68, 105, 97, 109, 111, 110, 100, 32, 80, 105, 110, 42, 0 }; +const uint8_t objtxt_70[] = { +42, 68, 105, 97, 109, 111, 110, 100, 32, 82, 105, 110, 103, 42, 0 }; +const uint8_t objtxt_71[] = { +83, 109, 97, 115, 104, 101, 100, 32, 79, 121, 115, 116, 101, 114, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_2[] = { +65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 49, 52, 32, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 46, 0 }; +const uint8_t msgtxt_3[] = { +83, 111, 114, 114, 121, 44, 0 }; +const uint8_t msgtxt_4[] = { +69, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 105, 115, 0 }; +const uint8_t msgtxt_5[] = { +110, 111, 116, 32, 101, 120, 97, 99, 116, 108, 121, 32, 100, 97, 114, 107, 44, 32, 98, 117, 116, 32, 105, 116, 39, 115, 32, 116, 111, 111, 32, 70, 85, 90, 90, 89, 32, 116, 111, 32, 115, 101, 101, 33, 0 }; +const uint8_t msgtxt_6[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 66, 97, 99, 107, 115, 105, 100, 101, 32, 111, 102, 32, 80, 105, 114, 97, 116, 101, 39, 115, 32, 73, 115, 108, 101, 46, 0 }; +const uint8_t msgtxt_7[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_8[] = { +73, 32, 109, 97, 100, 101, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_9[] = { +73, 32, 102, 97, 108, 108, 46, 0 }; +const uint8_t msgtxt_10[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_11[] = { +97, 32, 102, 114, 97, 109, 101, 100, 32, 112, 97, 105, 110, 116, 105, 110, 103, 32, 111, 102, 32, 66, 108, 97, 99, 107, 98, 101, 97, 114, 100, 46, 0 }; +const uint8_t msgtxt_12[] = { +109, 97, 112, 32, 111, 110, 32, 98, 97, 99, 107, 0 }; +const uint8_t msgtxt_13[] = { +119, 114, 105, 116, 105, 110, 103, 0 }; +const uint8_t msgtxt_14[] = { +83, 97, 105, 108, 105, 110, 103, 32, 114, 111, 117, 116, 101, 32, 116, 111, 32, 84, 82, 69, 65, 83, 85, 82, 69, 33, 0 }; +const uint8_t msgtxt_15[] = { +65, 114, 103, 104, 33, 0 }; +const uint8_t msgtxt_16[] = { +73, 32, 100, 114, 111, 119, 110, 101, 100, 46, 0 }; +const uint8_t msgtxt_17[] = { +73, 32, 98, 114, 101, 97, 116, 104, 101, 100, 46, 0 }; +const uint8_t msgtxt_18[] = { +108, 101, 110, 115, 101, 115, 32, 38, 32, 119, 105, 114, 101, 32, 114, 105, 109, 46, 0 }; +const uint8_t msgtxt_19[] = { +105, 116, 39, 115, 32, 34, 71, 108, 111, 105, 111, 112, 101, 108, 116, 105, 115, 32, 70, 117, 114, 99, 97, 116, 97, 34, 32, 111, 114, 32, 70, 117, 110, 111, 114, 105, 46, 0 }; +const uint8_t msgtxt_20[] = { +104, 111, 119, 32, 116, 111, 32, 109, 97, 107, 101, 32, 103, 108, 117, 101, 32, 102, 114, 111, 109, 32, 70, 117, 110, 111, 114, 105, 46, 0 }; +const uint8_t msgtxt_21[] = { +73, 32, 102, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_22[] = { +38, 32, 73, 32, 103, 111, 116, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_23[] = { +105, 110, 32, 116, 104, 101, 32, 119, 97, 121, 46, 0 }; +const uint8_t msgtxt_24[] = { +71, 108, 97, 115, 115, 101, 115, 32, 115, 108, 105, 112, 32, 111, 102, 102, 46, 0 }; +const uint8_t msgtxt_25[] = { +73, 110, 32, 50, 32, 119, 111, 114, 100, 115, 32, 116, 101, 108, 108, 32, 109, 101, 32, 116, 111, 32, 111, 114, 32, 105, 110, 32, 119, 104, 97, 116, 46, 0 }; +const uint8_t msgtxt_26[] = { +73, 32, 99, 97, 110, 39, 116, 44, 0 }; +const uint8_t msgtxt_27[] = { +72, 85, 72, 63, 0 }; +const uint8_t msgtxt_28[] = { +98, 111, 97, 116, 39, 115, 32, 98, 111, 116, 116, 111, 109, 46, 0 }; +const uint8_t msgtxt_29[] = { +104, 97, 112, 112, 101, 110, 115, 46, 0 }; +const uint8_t msgtxt_30[] = { +110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_31[] = { +115, 112, 101, 99, 105, 97, 108, 46, 0 }; +const uint8_t msgtxt_32[] = { +73, 32, 104, 101, 97, 114, 0 }; +const uint8_t msgtxt_33[] = { +97, 110, 32, 97, 108, 97, 114, 109, 32, 99, 108, 111, 99, 107, 32, 114, 105, 110, 103, 105, 110, 103, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_34[] = { +105, 116, 39, 115, 32, 99, 111, 118, 101, 114, 101, 100, 32, 105, 110, 32, 97, 108, 103, 97, 101, 0 }; +const uint8_t msgtxt_35[] = { +77, 111, 118, 101, 32, 110, 117, 109, 98, 101, 114, 58, 0 }; +const uint8_t msgtxt_36[] = { +76, 101, 97, 118, 101, 32, 42, 84, 82, 69, 65, 83, 85, 82, 69, 83, 42, 32, 104, 101, 114, 101, 46, 32, 83, 67, 79, 82, 69, 46, 0 }; +const uint8_t msgtxt_37[] = { +112, 105, 108, 105, 110, 103, 115, 46, 0 }; +const uint8_t msgtxt_38[] = { +77, 121, 32, 109, 97, 115, 107, 39, 115, 32, 102, 111, 103, 103, 101, 100, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_39[] = { +73, 32, 115, 116, 105, 114, 114, 101, 100, 32, 105, 116, 32, 117, 112, 46, 0 }; +const uint8_t msgtxt_40[] = { +73, 32, 111, 112, 101, 110, 101, 100, 32, 117, 112, 32, 97, 0 }; +const uint8_t msgtxt_41[] = { +73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 105, 116, 32, 105, 115, 46, 0 }; +const uint8_t msgtxt_42[] = { +73, 32, 121, 97, 119, 110, 32, 38, 32, 115, 116, 114, 101, 116, 99, 104, 33, 0 }; +const uint8_t msgtxt_43[] = { +77, 97, 116, 116, 114, 101, 115, 115, 32, 105, 115, 32, 115, 111, 102, 116, 46, 0 }; +const uint8_t msgtxt_44[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_45[] = { +105, 116, 32, 102, 111, 108, 108, 111, 119, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_46[] = { +73, 32, 97, 109, 46, 0 }; +const uint8_t msgtxt_47[] = { +103, 108, 97, 115, 115, 101, 115, 0 }; +const uint8_t msgtxt_48[] = { +83, 119, 105, 109, 32, 100, 111, 119, 110, 63, 0 }; +const uint8_t msgtxt_49[] = { +77, 121, 32, 109, 97, 115, 107, 39, 115, 32, 102, 117, 108, 108, 32, 111, 102, 32, 119, 97, 116, 101, 114, 46, 0 }; +const uint8_t msgtxt_50[] = { +98, 121, 32, 101, 100, 103, 101, 115, 32, 111, 116, 104, 101, 114, 32, 112, 105, 99, 116, 117, 114, 101, 32, 105, 115, 32, 118, 105, 115, 105, 98, 108, 101, 32, 98, 101, 110, 101, 97, 116, 104, 33, 32, 73, 32, 99, 108, 101, 97, 110, 101, 100, 32, 116, 111, 112, 32, 111, 110, 101, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_51[] = { +78, 111, 32, 109, 97, 112, 33, 0 }; +const uint8_t msgtxt_52[] = { +78, 111, 32, 99, 114, 101, 119, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_53[] = { +80, 105, 114, 97, 116, 101, 32, 100, 114, 105, 110, 107, 115, 32, 114, 117, 109, 32, 38, 32, 104, 101, 97, 100, 115, 32, 116, 111, 32, 119, 111, 114, 107, 46, 0 }; +const uint8_t msgtxt_54[] = { +80, 105, 114, 97, 116, 101, 32, 108, 111, 111, 107, 115, 32, 97, 114, 111, 117, 110, 100, 32, 101, 120, 112, 101, 99, 116, 97, 110, 116, 108, 121, 32, 38, 32, 115, 97, 121, 115, 32, 34, 77, 97, 116, 101, 121, 44, 32, 121, 111, 117, 32, 98, 101, 32, 102, 111, 114, 103, 101, 116, 102, 117, 108, 32, 102, 111, 114, 32, 115, 117, 114, 101, 33, 34, 32, 38, 32, 116, 104, 101, 110, 32, 104, 101, 32, 115, 117, 108, 107, 115, 32, 111, 102, 102, 32, 97, 110, 103, 114, 105, 108, 121, 33, 0 }; +const uint8_t msgtxt_55[] = { +80, 105, 114, 97, 116, 101, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 46, 0 }; +const uint8_t msgtxt_56[] = { +82, 111, 119, 63, 0 }; +const uint8_t msgtxt_57[] = { +116, 111, 111, 32, 104, 101, 97, 118, 121, 46, 0 }; +const uint8_t msgtxt_58[] = { +84, 114, 121, 32, 73, 78, 86, 69, 78, 84, 79, 82, 89, 32, 111, 114, 32, 76, 79, 79, 75, 0 }; +const uint8_t msgtxt_59[] = { +116, 104, 101, 32, 108, 105, 116, 116, 108, 101, 32, 115, 99, 114, 101, 119, 115, 33, 0 }; +const uint8_t msgtxt_60[] = { +116, 104, 101, 114, 101, 39, 115, 32, 110, 111, 32, 109, 97, 116, 116, 114, 101, 115, 115, 32, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_61[] = { +119, 111, 110, 39, 116, 32, 102, 105, 116, 46, 0 }; +const uint8_t msgtxt_62[] = { +73, 39, 118, 101, 32, 115, 116, 111, 114, 101, 100, 32, 48, 32, 116, 114, 101, 97, 115, 117, 114, 101, 115, 46, 0 }; +const uint8_t msgtxt_63[] = { +70, 111, 114, 32, 109, 121, 32, 77, 111, 109, 33, 0 }; +const uint8_t msgtxt_64[] = { +105, 116, 39, 115, 32, 111, 110, 32, 116, 104, 101, 32, 115, 104, 105, 112, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 46, 0 }; +const uint8_t msgtxt_65[] = { +105, 116, 39, 115, 32, 111, 110, 32, 79, 112, 104, 116, 104, 97, 108, 109, 111, 108, 111, 103, 121, 46, 32, 83, 113, 117, 105, 110, 116, 105, 110, 103, 32, 99, 97, 110, 32, 104, 101, 108, 112, 32, 119, 105, 116, 104, 32, 77, 121, 111, 112, 105, 97, 46, 0 }; +const uint8_t msgtxt_66[] = { +73, 116, 39, 115, 32, 111, 100, 100, 33, 0 }; +const uint8_t msgtxt_67[] = { +71, 111, 111, 100, 32, 105, 100, 101, 97, 33, 32, 66, 117, 116, 32, 46, 46, 46, 0 }; +const uint8_t msgtxt_68[] = { +87, 104, 121, 32, 98, 111, 116, 104, 101, 114, 63, 0 }; +const uint8_t msgtxt_69[] = { +73, 32, 108, 111, 115, 116, 0 }; +const uint8_t msgtxt_70[] = { +97, 32, 115, 104, 105, 112, 32, 119, 105, 116, 104, 32, 102, 108, 111, 111, 100, 108, 105, 103, 104, 116, 115, 32, 108, 105, 116, 0 }; +const uint8_t msgtxt_71[] = { +116, 104, 101, 32, 102, 97, 110, 39, 115, 32, 116, 117, 114, 110, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_72[] = { +108, 97, 114, 103, 101, 32, 98, 108, 97, 100, 101, 32, 102, 97, 110, 32, 104, 97, 115, 32, 115, 116, 111, 112, 112, 101, 100, 46, 0 }; +const uint8_t msgtxt_73[] = { +98, 97, 116, 116, 101, 114, 121, 39, 115, 32, 100, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_74[] = { +98, 114, 105, 103, 104, 116, 108, 121, 46, 0 }; +const uint8_t msgtxt_75[] = { +100, 105, 109, 108, 121, 46, 0 }; +const uint8_t msgtxt_76[] = { +110, 111, 116, 32, 97, 116, 32, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_77[] = { +67, 108, 105, 99, 107, 33, 0 }; +const uint8_t msgtxt_78[] = { +97, 109, 112, 115, 32, 108, 101, 102, 116, 46, 0 }; +const uint8_t msgtxt_79[] = { +80, 105, 114, 97, 116, 101, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_80[] = { +105, 116, 39, 115, 32, 85, 114, 111, 115, 97, 108, 112, 105, 110, 120, 32, 67, 105, 110, 101, 114, 97, 46, 0 }; +const uint8_t msgtxt_81[] = { +79, 121, 115, 116, 101, 114, 32, 68, 114, 105, 108, 108, 32, 100, 111, 101, 115, 32, 116, 104, 101, 32, 116, 114, 105, 99, 107, 33, 0 }; +const uint8_t msgtxt_82[] = { +76, 105, 100, 32, 98, 114, 111, 107, 101, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_83[] = { +73, 39, 109, 32, 110, 111, 32, 115, 97, 105, 108, 111, 114, 33, 0 }; +const uint8_t msgtxt_84[] = { +102, 108, 111, 111, 100, 108, 105, 103, 104, 116, 115, 32, 108, 105, 116, 0 }; +const uint8_t msgtxt_85[] = { +76, 111, 110, 103, 32, 116, 114, 105, 112, 44, 32, 110, 105, 103, 104, 116, 32, 102, 101, 108, 108, 33, 0 }; +const uint8_t msgtxt_86[] = { +79, 117, 116, 32, 111, 102, 32, 103, 97, 115, 33, 0 }; +const uint8_t msgtxt_87[] = { +38, 32, 108, 111, 115, 116, 32, 97, 116, 32, 115, 101, 97, 33, 0 }; +const uint8_t msgtxt_88[] = { +76, 105, 116, 101, 114, 115, 32, 108, 101, 102, 116, 46, 0 }; +const uint8_t msgtxt_89[] = { +108, 97, 114, 103, 101, 32, 111, 112, 101, 110, 105, 110, 103, 46, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 181, + 8, 3, 8, 29, 9, 16, 0, 3, 0, 31, + 60, 58, +/* AUTO 100 */ + 177, + 8, 31, 9, 29, 0, 3, 0, 31, + 58, 60, +/* AUTO 100 */ + 168, + 8, 29, 16, 0, + 77, +/* AUTO 100 */ + 176, + 8, 4, 1, 10, 0, 10, 0, 14, + 62, +/* AUTO 100 */ + 168, + 9, 2, 9, 3, + 57, +/* AUTO 8 */ + 149, 8, + 9, 21, 1, 18, 9, 22, 0, 22, 0, 18, + 58, 60, +/* AUTO 100 */ + 176, + 1, 67, 9, 5, 0, 67, 0, 68, + 72, +/* AUTO 100 */ + 174, + 0, 1, 0, 1, 0, 1, + 81, 82, 81, +/* AUTO 100 */ + 174, + 9, 1, 0, 40, 0, 3, + 79, 81, 73, +/* AUTO 0 */ + 195, + 56, 70, 64, 2, +/* AUTO 0 */ + 207, + 0, 1, 0, 2, 0, 18, + 58, 58, 58, 113, +/* AUTO 0 */ + 211, + 0, 1, 0, 0, 0, 1, 0, 20, + 81, 79, 81, 79, +/* AUTO 100 */ + 172, + 4, 13, 2, 42, 0, 25, + 58, +/* AUTO 100 */ + 172, + 8, 5, 1, 12, 0, 24, + 58, +/* AUTO 100 */ + 172, + 8, 5, 1, 14, 0, 24, + 58, +/* AUTO 100 */ + 172, + 8, 5, 1, 51, 0, 24, + 58, +/* AUTO 100 */ + 180, + 8, 24, 13, 51, 14, 50, 0, 50, 0, 51, + 72, +/* AUTO 100 */ + 181, + 3, 17, 6, 18, 8, 4, 0, 22, 0, 23, + 60, 58, +/* AUTO 100 */ + 168, + 1, 31, 0, 19, + 58, +/* AUTO 100 */ + 172, + 4, 13, 5, 42, 0, 25, + 60, +/* AUTO 100 */ + 173, + 9, 13, 13, 63, 0, 63, + 59, 76, +/* AUTO 100 */ + 174, + 8, 6, 0, 2, 0, 1, + 81, 83, 73, +/* AUTO 0 */ + 196, + 15, 3, + 15, +/* AUTO 0 */ + 210, + 15, 0, 9, 4, 0, 6, 0, 17, + 17, 60, 60, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 */ + 183, + 8, 4, 1, 2, 0, 2, 0, 2, 0, 18, + 55, 58, 60, 73, +/* AUTO 0 */ + 193, + 70, 24, +/* AUTO 100 */ + 183, + 9, 4, 0, 10, 0, 11, 0, 12, 0, 13, + 60, 60, 60, 60, +/* AUTO 100 */ + 173, + 9, 4, 0, 14, 0, 20, + 60, 60, +/* AUTO 100 */ + 176, + 8, 5, 1, 42, 0, 42, 0, 54, + 72, +/* AUTO 100 */ + 181, + 8, 13, 8, 4, 14, 32, 4, 12, 0, 63, + 53, 76, +/* AUTO 100 */ + 183, + 8, 23, 1, 18, 0, 2, 0, 22, 0, 18, + 49, 58, 60, 60, +/* AUTO 100 */ + 174, + 8, 22, 1, 18, 0, 2, + 38, 58, 56, +/* AUTO 100 */ + 176, + 8, 5, 1, 56, 0, 62, 0, 56, + 72, +/* AUTO 15 */ + 136, 15, + 8, 2, 4, 1, + 42, +/* AUTO 100 */ + 169, + 8, 4, 9, 6, + 16, 61, +/* AUTO 100 */ + 182, + 6, 1, 1, 2, 0, 2, 0, 2, 0, 18, + 55, 58, 60, +/* AUTO 100 */ + 182, + 6, 17, 1, 18, 0, 18, 0, 2, 0, 18, + 55, 58, 60, +/* AUTO 100 */ + 175, + 9, 18, 8, 3, 0, 18, + 56, 58, 70, 64, +/* AUTO 100 */ + 169, + 9, 19, 9, 7, + 32, 33, +/* AUTO 100 */ + 165, + 8, 2, + 4, 5, +/* AUTO 100 */ + 178, + 8, 18, 9, 2, 0, 18, 9, 3, + 57, 60, 76, +/* AUTO 100 */ + 174, + 9, 18, 8, 2, 0, 18, + 56, 58, 76, +/* AUTO 25 */ + 145, 25, + 8, 4, 8, 20, 0, 20, 0, 13, + 60, 58, +/* AUTO 100 */ + 173, + 8, 29, 15, 0, 0, 29, + 60, 79, +/* AUTO 100 */ + 168, + 15, 6, 0, 27, + 58, +/* AUTO 100 */ + 172, + 16, 6, 14, 46, 0, 27, + 60, +/* AUTO 100 */ + 164, + 4, 24, + 63, +/* AUTO 100 */ + 175, + 8, 28, 0, 20, 0, 3, + 79, 81, 77, 73, +/* AUTO 0 */ + 201, + 15, 0, 0, 28, + 60, 79, +/* AUTO 0 */ + 196, + 0, 3, + 81, +}; +const uint8_t actions[] = { +/* LOOK IT */ + 14, 27, 71, + 4, 2, 8, 2, 3, 1, + 1, 21, 47, +/* LOOK ANY */ + 5, 27, 0, + 8, 2, + 3, 26, +/* STAR ENGI */ + 11, 87, 64, + 4, 18, 15, 0, + 3, 26, 7, 123, +/* STAR ENGI */ + 9, 87, 64, + 4, 18, 0, 3, + 73, 81, +/* AUTO 0 */ + 199, + 15, 0, + 3, 30, 29, 136, +/* AUTO 0 */ + 201, + 16, 0, 0, 28, + 1, 58, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* LOOK CHES */ + 10, 27, 100, + 13, 56, 3, 64, + 1, 7, 132, +/* SAIL SHIP */ + 10, 73, 11, + 9, 28, 2, 52, + 129, 44, 106, +/* GO PORT */ + 15, 1, 43, + 13, 48, 10, 0, 6, 2, + 3, 26, 10, 111, +/* LOOK PILI */ + 19, 27, 70, + 8, 4, 8, 11, 14, 67, 0, 67, + 7, 10, 22, 74, +/* LOOK PIRA */ + 5, 27, 15, + 2, 52, + 3, 105, +/* LOOK PAIN */ + 23, 27, 24, + 9, 2, 13, 15, 3, 14, 0, 14, 0, 51, + 1, 7, 50, 72, +/* GET UP */ + 4, 10, 5, + 7, 1, + 46, +/* GO PORT */ + 14, 1, 43, + 4, 19, 11, 0, 0, 2, + 1, 54, 76, +/* GO PORT */ + 14, 1, 43, + 2, 48, 11, 0, 0, 19, + 1, 54, 76, +/* OPEN PORT */ + 13, 57, 43, + 0, 48, 0, 45, 2, 45, + 1, 72, +/* DIVE ANY */ + 4, 52, 0, + 8, 5, + 48, +/* CHAR ANY */ + 0, 92, 0, + 44, +/* FEEL ANY */ + 19, 24, 0, + 8, 2, 4, 2, 2, 1, 0, 1, + 21, 10, 22, 74, +/* RUB EYES */ + 11, 46, 61, + 6, 2, 6, 18, + 1, 21, 30, 23, +/* LOOK BATT */ + 7, 27, 90, + 9, 7, + 1, 7, 78, 128, +/* USE HAMM */ + 21, 59, 34, + 3, 6, 3, 44, 8, 30, 0, 44, 0, 71, + 1, 72, +/* EMPT MASK */ + 17, 77, 32, + 3, 17, 6, 18, 8, 23, 0, 23, + 1, 60, +/* LOOK EAST */ + 10, 27, 3, + 8, 4, 8, 10, + 7, 37, 23, +/* INVE ANY */ + 4, 41, 0, + 9, 2, + 66, +/* GET INVE */ + 4, 10, 51, + 9, 2, + 66, +/* GO ENGI */ + 10, 1, 64, + 4, 18, 0, 17, + 1, 54, 76, +/* REMO MASK */ + 15, 34, 32, + 1, 18, 0, 18, 0, 2, + 1, 59, 58, 56, +/* REMO GLAS */ + 15, 34, 7, + 1, 2, 0, 2, 0, 2, + 1, 59, 58, 56, +/* GO CLOC */ + 0, 1, 57, + 41, +/* CLEA GLAS */ + 4, 61, 7, + 3, 2, + 1, +/* FEEL ANY */ + 6, 24, 0, + 4, 16, + 1, 7, 110, +/* LOOK CURR */ + 1, 27, 52, + 1, 45, +/* GO SHIP */ + 14, 1, 11, + 2, 43, 0, 4, 0, 7, + 54, 76, 60, +/* SCOR ANY */ + 4, 71, 0, + 8, 25, + 65, +/* HELP ANY */ + 1, 72, 0, + 3, 26, +/* OPEN EYES */ + 0, 57, 61, + 1, +/* FEEL SILT */ + 19, 24, 62, + 2, 35, 8, 14, 14, 11, 0, 11, + 21, 10, 22, 74, +/* DIG ANY */ + 23, 43, 0, + 3, 46, 4, 5, 14, 41, 13, 7, 0, 41, + 21, 10, 22, 74, +/* WAKE PIRA */ + 10, 44, 15, + 2, 7, 0, 7, + 1, 59, 73, +/* AUTO 0 */ + 196, + 5, 41, + 104, +/* AUTO 0 */ + 210, + 2, 41, 0, 41, 0, 52, 0, 47, + 59, 72, 103, +/* GET BREA */ + 15, 10, 30, + 9, 6, 0, 6, 0, 2, + 1, 58, 73, 81, +/* AUTO 0 */ + 205, + 8, 17, 0, 8, 0, 2, + 79, 81, +/* AUTO 0 */ + 205, + 9, 17, 0, 3, 0, 2, + 79, 81, +/* BREA DEEP */ + 10, 45, 47, + 0, 17, 0, 6, + 1, 58, 60, +/* HYPE ANY */ + 10, 47, 0, + 0, 17, 0, 6, + 1, 58, 60, +/* BREA ANY */ + 11, 45, 0, + 0, 6, 0, 17, + 1, 60, 60, 17, +/* YAWN ANY */ + 2, 79, 0, + 1, 30, 29, +/* WEAR GLAS */ + 23, 36, 7, + 3, 1, 6, 18, 0, 1, 0, 2, 0, 2, + 1, 74, 74, 60, +/* READ SIGN */ + 6, 86, 31, + 3, 3, + 1, 7, 6, +/* JUMP TOP */ + 11, 39, 66, + 4, 6, 0, 7, + 1, 8, 54, 76, +/* JUMP UP */ + 11, 39, 5, + 4, 6, 0, 7, + 1, 8, 54, 76, +/* JUMP ANY */ + 6, 39, 0, + 4, 6, + 1, 9, 61, +/* JUMP LEDG */ + 11, 39, 9, + 4, 7, 0, 6, + 1, 54, 9, 76, +/* JUMP ANY */ + 6, 39, 0, + 4, 7, + 1, 9, 61, +/* JUMP ANY */ + 2, 39, 0, + 3, 30, 29, +/* GO CRAC */ + 19, 1, 13, + 4, 7, 0, 8, 0, 3, 0, 16, + 56, 54, 58, 58, +/* GO CRAC */ + 19, 1, 13, + 4, 8, 0, 7, 0, 3, 0, 16, + 54, 60, 60, 76, +/* GO SHED */ + 9, 1, 22, + 4, 8, 0, 9, + 1, 54, +/* STOP CLOC */ + 5, 75, 57, + 12, 31, + 3, 41, +/* LOOK SILT */ + 19, 27, 62, + 3, 18, 2, 35, 0, 22, 0, 2, + 7, 58, 58, 39, +/* CLEA MASK */ + 22, 61, 32, + 8, 5, 3, 17, 6, 18, 0, 22, 0, 21, + 1, 60, 60, +/* LOOK PIRA */ + 19, 27, 15, + 3, 7, 14, 8, 14, 10, 0, 8, + 7, 10, 22, 74, +/* LOOK PIRA */ + 15, 27, 15, + 3, 7, 14, 55, 0, 55, + 7, 10, 22, 74, +/* OPEN BOX */ + 19, 57, 21, + 3, 8, 3, 6, 0, 10, 14, 10, + 1, 7, 10, 53, +/* REMO FRAM */ + 22, 34, 17, + 3, 12, 0, 12, 0, 13, 0, 14, 3, 49, + 1, 72, 53, +/* REMO WIRE */ + 23, 34, 103, + 3, 1, 3, 49, 0, 1, 0, 20, 0, 19, + 72, 74, 119, 109, +/* LOOK PAIN */ + 11, 27, 24, + 3, 14, 0, 15, + 7, 12, 22, 74, +/* LOOK MAP */ + 6, 27, 76, + 3, 15, + 1, 7, 13, +/* SPIT MASK */ + 22, 78, 32, + 9, 4, 3, 17, 6, 18, 0, 21, 0, 22, + 1, 58, 60, +/* READ MAP */ + 4, 86, 76, + 3, 15, + 14, +/* SWIM OPEN */ + 5, 48, 44, + 9, 0, + 3, 26, +/* LOOK PAIN */ + 6, 27, 24, + 3, 12, + 1, 7, 11, +/* GO HILL */ + 10, 1, 10, + 4, 5, 0, 6, + 1, 54, 76, +/* GO BUNK */ + 10, 1, 28, + 4, 2, 0, 1, + 1, 54, 76, +/* LOOK SIGN */ + 2, 27, 31, + 1, 7, 13, +/* LOOK GLAS */ + 6, 27, 7, + 3, 1, + 1, 7, 18, +/* REMO LENS */ + 23, 34, 8, + 3, 1, 3, 49, 0, 1, 0, 20, 0, 19, + 72, 74, 119, 109, +/* MAKE GLUE */ + 14, 50, 36, + 3, 21, 0, 21, 0, 22, + 1, 72, 8, +/* LOOK ALGA */ + 15, 27, 50, + 3, 21, 14, 23, 0, 23, + 21, 10, 74, 22, +/* LOOK ALGA */ + 6, 27, 50, + 3, 21, + 1, 7, 19, +/* READ BOOK */ + 6, 86, 38, + 1, 24, + 1, 7, 20, +/* WEAR MASK */ + 7, 36, 32, + 1, 2, + 3, 26, 10, 23, +/* WEAR MASK */ + 15, 36, 32, + 3, 17, 0, 17, 0, 18, + 1, 74, 74, 73, +/* AUTO 0 */ + 204, + 8, 8, 0, 2, 9, 23, + 60, +/* GLUE LENS */ + 13, 32, 8, + 3, 22, 3, 20, 0, 9, + 25, 58, +/* TO MASK */ + 21, 53, 32, + 3, 22, 3, 20, 8, 9, 3, 17, 6, 18, + 1, 73, +/* AUTO 0 */ + 206, + 0, 20, 0, 8, 0, 9, + 55, 58, 60, +/* TO ANY */ + 10, 53, 0, + 8, 9, 0, 9, + 3, 26, 60, +/* LOOK GAS */ + 15, 27, 101, + 9, 7, 0, 3, 0, 3, + 81, 78, 81, 138, +/* SWIM DOWN */ + 10, 48, 6, + 8, 5, 0, 4, + 1, 73, 58, +/* AUTO 0 */ + 210, + 1, 46, 0, 46, 0, 11, 0, 27, + 53, 119, 10, +/* AUTO 0 */ + 211, + 2, 29, 0, 12, 0, 12, 0, 29, + 54, 58, 55, 76, +/* AUTO 0 */ + 211, + 2, 26, 0, 12, 0, 10, 0, 26, + 54, 58, 55, 76, +/* AUTO 0 */ + 210, + 2, 28, 0, 12, 0, 13, 0, 28, + 54, 58, 55, +/* AUTO 0 */ + 211, + 2, 36, 0, 12, 0, 14, 0, 36, + 54, 58, 55, 76, +/* AUTO 0 */ + 211, + 2, 40, 0, 12, 0, 20, 0, 40, + 54, 58, 55, 76, +/* AUTO 0 */ + 211, + 2, 27, 0, 12, 0, 11, 0, 27, + 54, 58, 55, 76, +/* LOOK FAN */ + 10, 27, 81, + 2, 59, 9, 27, + 1, 7, 121, +/* REMO BLAD */ + 22, 34, 84, + 14, 46, 8, 27, 2, 59, 3, 49, 0, 46, + 1, 22, 74, +/* GO DOCK */ + 19, 1, 45, + 2, 26, 0, 3, 0, 5, 0, 26, + 1, 54, 60, 59, +/* GO SHIP */ + 23, 1, 11, + 2, 29, 0, 29, 0, 13, 0, 5, 0, 7, + 59, 54, 60, 60, +/* GO SHIP */ + 23, 1, 11, + 2, 28, 0, 28, 0, 4, 0, 5, 0, 7, + 59, 54, 60, 60, +/* SWIM UP */ + 23, 48, 5, + 8, 4, 8, 20, 0, 4, 0, 11, 0, 40, + 60, 54, 53, 76, +/* SWIM UP */ + 23, 48, 5, + 8, 4, 8, 11, 0, 4, 0, 11, 0, 27, + 60, 54, 53, 76, +/* SWIM UP */ + 23, 48, 5, + 8, 4, 8, 10, 0, 4, 0, 11, 0, 26, + 60, 54, 53, 76, +/* SWIM UP */ + 23, 48, 5, + 8, 4, 8, 13, 0, 4, 0, 11, 0, 28, + 60, 54, 53, 76, +/* SWIM UP */ + 11, 48, 5, + 8, 4, 8, 12, + 3, 26, 10, 23, +/* SWIM UP */ + 23, 48, 5, + 8, 4, 8, 14, 0, 4, 0, 11, 0, 36, + 60, 54, 53, 76, +/* SWIM OPEN */ + 23, 48, 44, + 8, 4, 8, 12, 0, 4, 0, 11, 0, 29, + 60, 54, 53, 76, +/* GO SEA */ + 19, 1, 39, + 4, 3, 0, 5, 0, 11, 0, 26, + 58, 54, 53, 76, +/* GO SEA */ + 23, 1, 39, + 4, 13, 0, 5, 0, 11, 0, 29, 0, 7, + 58, 54, 53, 58, +/* SWIM WEST */ + 19, 48, 4, + 8, 4, 8, 13, 0, 13, 0, 12, + 1, 60, 58, 76, +/* SWIM EAST */ + 19, 48, 3, + 8, 4, 8, 10, 0, 10, 0, 11, + 1, 60, 58, 76, +/* SWIM WEST */ + 19, 48, 4, + 8, 4, 8, 11, 0, 11, 0, 10, + 1, 60, 58, 76, +/* SWIM EAST */ + 19, 48, 3, + 8, 4, 8, 12, 0, 12, 0, 13, + 1, 60, 58, 76, +/* SWIM EAST */ + 11, 48, 3, + 8, 4, 8, 11, + 3, 26, 10, 23, +/* LOOK PORT */ + 18, 27, 43, + 4, 2, 15, 6, 8, 29, 16, 0, + 7, 134, 125, +/* LOOK PORT */ + 14, 27, 43, + 4, 2, 16, 6, 8, 29, + 7, 134, 124, +/* SWIM ANY */ + 10, 48, 0, + 8, 4, 0, 20, + 1, 58, 76, +/* LOOK ROCK */ + 23, 27, 60, + 3, 34, 14, 21, 14, 22, 0, 21, 9, 8, + 7, 34, 22, 74, +/* GO SEA */ + 23, 1, 39, + 4, 4, 0, 5, 0, 11, 0, 28, 0, 7, + 58, 54, 53, 58, +/* GO SEA */ + 19, 1, 39, + 4, 15, 0, 5, 0, 11, 0, 36, + 58, 54, 53, 76, +/* MOVE BUNK */ + 15, 64, 28, + 14, 70, 0, 70, 2, 16, + 21, 10, 22, 74, +/* GO LADD */ + 10, 1, 63, + 4, 2, 0, 16, + 1, 54, 76, +/* GO TOP */ + 10, 1, 66, + 4, 2, 0, 16, + 1, 54, 76, +/* LOOK WATC */ + 15, 27, 65, + 3, 37, 0, 1, 0, 1, + 35, 81, 78, 81, +/* LOOK UP */ + 14, 27, 5, + 8, 4, 8, 12, 9, 0, + 1, 7, 28, +/* GO BEAC */ + 19, 1, 49, + 2, 36, 0, 36, 0, 5, 0, 15, + 59, 60, 54, 76, +/* GO CURR */ + 4, 1, 52, + 2, 39, + 46, +/* READ SIGN */ + 6, 86, 31, + 3, 42, + 1, 7, 36, +/* GET ROCK */ + 13, 10, 60, + 4, 15, 14, 34, 0, 34, + 74, 1, +/* GET ROCK */ + 9, 10, 60, + 3, 34, 0, 34, + 74, 1, +/* MOVE MATT */ + 15, 64, 83, + 14, 24, 4, 1, 0, 24, + 21, 10, 22, 74, +/* LOOK SHIP */ + 15, 27, 11, + 8, 4, 8, 12, 8, 0, + 7, 28, 7, 139, +/* SAY ANY */ + 3, 49, 0, + 1, 85, 30, 29, +/* LOOK ENGI */ + 15, 27, 64, + 4, 17, 14, 49, 0, 49, + 21, 10, 22, 74, +/* GO DOCK */ + 15, 1, 45, + 2, 32, 0, 3, 0, 7, + 1, 54, 58, 76, +/* SWIM ANY */ + 4, 48, 0, + 8, 5, + 1, +/* LIST ANY */ + 9, 16, 0, + 9, 7, 9, 19, + 32, 114, +/* GO CURR */ + 4, 1, 52, + 2, 38, + 46, +/* DIG ANY */ + 5, 43, 0, + 3, 46, + 21, 30, +/* SAIL SHIP */ + 6, 73, 11, + 6, 15, + 3, 26, 51, +/* QUIT ANY */ + 0, 9, 0, + 63, +/* SWIM ANY */ + 1, 48, 0, + 30, 29, +/* LOOK EAST */ + 10, 27, 3, + 8, 4, 8, 11, + 1, 7, 37, +/* GO SHIP */ + 10, 1, 11, + 2, 63, 0, 23, + 1, 54, 76, +/* SAVE GAME */ + 1, 55, 53, + 1, 71, +/* LOOK SHIP */ + 13, 27, 11, + 8, 4, 8, 12, 9, 0, + 1, 116, +/* FEEL SILT */ + 19, 24, 62, + 2, 35, 8, 12, 14, 44, 0, 44, + 21, 10, 22, 74, +/* SAIL SHIP */ + 7, 73, 11, + 5, 52, + 3, 26, 102, 133, +/* SLEE ANY */ + 1, 69, 0, + 3, 26, +/* FEEL ANY */ + 5, 24, 0, + 4, 1, + 1, 43, +/* FIND ANY */ + 1, 33, 0, + 3, 41, +/* LOOK SNAI */ + 2, 27, 95, + 1, 7, 130, +/* LIST ANY */ + 2, 16, 0, + 32, 30, 31, +/* GO TOP */ + 0, 1, 66, + 44, +/* RUB ANY */ + 1, 46, 0, + 30, 29, +/* OPEN OYST */ + 9, 57, 93, + 3, 44, 0, 30, + 44, 58, +/* GET MATT */ + 2, 10, 83, + 3, 26, 107, +/* LOOK IT */ + 2, 27, 71, + 3, 26, 108, +/* GO CRAW */ + 14, 1, 16, + 2, 53, 11, 0, 0, 20, + 1, 54, 76, +/* GO CRAW */ + 11, 1, 16, + 2, 53, 10, 0, + 3, 26, 10, 111, +/* SCOR ANY */ + 5, 71, 0, + 9, 25, + 1, 112, +/* WAKE UP */ + 0, 44, 5, + 46, +/* GET UP */ + 10, 10, 5, + 4, 1, 0, 2, + 1, 54, 76, +/* READ BOOK */ + 14, 86, 38, + 3, 56, 9, 3, 9, 2, + 1, 7, 115, +/* GO SEA */ + 23, 1, 39, + 4, 19, 0, 5, 0, 11, 0, 28, 0, 7, + 58, 54, 53, 58, +/* SQUI ANY */ + 23, 80, 0, + 8, 2, 9, 3, 9, 4, 6, 18, 0, 2, + 60, 57, 76, 73, +/* AUTO 0 */ + 203, + 0, 18, 0, 2, + 60, 88, 58, 70, +/* OPEN CHES */ + 15, 57, 100, + 14, 56, 3, 64, 0, 56, + 7, 10, 74, 73, +/* AUTO 0 */ + 194, + 22, 7, 132, +/* DROP GLUE */ + 1, 18, 36, + 3, 26, +/* FOLD GLAS */ + 6, 8, 7, + 3, 1, + 117, 3, 26, +/* SQUI ANY */ + 5, 80, 0, + 8, 4, + 30, 29, +/* GO HILL */ + 5, 1, 10, + 4, 7, + 3, 46, +/* GO LEDG */ + 0, 1, 9, + 44, +/* DRIN RUM */ + 9, 7, 56, + 3, 41, 0, 41, + 1, 59, +/* ROLL PAIN */ + 11, 81, 24, + 3, 51, 0, 26, + 1, 117, 25, 58, +/* TO OILS */ + 22, 53, 79, + 3, 51, 3, 57, 8, 26, 0, 58, 0, 51, + 1, 72, 73, +/* AUTO 0 */ + 201, + 0, 57, 0, 26, + 59, 60, +/* UNRO PAIN */ + 18, 83, 24, + 3, 58, 0, 51, 0, 58, 0, 57, + 1, 72, 74, +/* ROLL ANY */ + 1, 81, 0, + 117, 118, +/* GO FAN */ + 11, 1, 81, + 2, 59, 9, 27, + 3, 26, 117, 121, +/* LOOK FAN */ + 10, 27, 81, + 2, 59, 8, 27, + 7, 122, 73, +/* AUTO 0 */ + 203, + 14, 60, 0, 60, + 21, 10, 22, 74, +/* SAIL SHIP */ + 23, 73, 11, + 4, 2, 13, 32, 0, 32, 0, 4, 0, 3, + 56, 72, 58, 73, +/* AUTO 0 */ + 203, + 0, 3, 0, 15, + 81, 83, 1, 135, +/* AUTO 0 */ + 199, + 15, 0, + 3, 136, 137, 61, +/* AUTO 0 */ + 199, + 0, 3, + 81, 88, 88, 88, +/* REMO BLAD */ + 22, 34, 84, + 14, 46, 8, 27, 2, 59, 3, 49, 0, 46, + 1, 22, 74, +/* LOOK UP */ + 15, 27, 5, + 8, 4, 8, 12, 8, 0, + 7, 28, 7, 139, +/* GO HELM */ + 5, 1, 69, + 4, 2, + 3, 133, +/* STOP ENGI */ + 13, 75, 64, + 4, 18, 8, 28, 0, 28, + 1, 60, +/* LOOK SHIP */ + 6, 27, 11, + 8, 7, + 7, 120, 73, +/* AUTO 0 */ + 204, + 15, 6, 16, 0, 8, 29, + 125, +/* AUTO 0 */ + 200, + 16, 6, 8, 29, + 124, +/* AUTO 0 */ + 196, + 9, 29, + 126, +/* LOOK CEIL */ + 15, 27, 86, + 4, 2, 14, 61, 0, 61, + 53, 7, 10, 76, +/* MOVE BUTT */ + 14, 64, 85, + 2, 61, 8, 29, 0, 29, + 1, 60, 127, +/* MOVE BUTT */ + 14, 64, 85, + 2, 61, 9, 29, 0, 29, + 1, 58, 127, +/* WAIT ANY */ + 19, 89, 0, + 0, 4, 0, 1, 0, 4, 0, 1, + 83, 81, 82, 81, +/* FEEL SHIP */ + 15, 24, 11, + 8, 4, 8, 12, 9, 0, + 7, 40, 67, 139, +/* MOVE ANY */ + 1, 64, 0, + 30, 29, +/* TO ANY */ + 11, 53, 0, + 0, 9, 0, 26, + 60, 60, 3, 26, +/* SAIL SHIP */ + 23, 73, 11, + 4, 2, 14, 32, 0, 32, 0, 4, 0, 3, + 73, 72, 60, 57, +/* AUTO 0 */ + 207, + 0, 3, 0, 15, 0, 31, + 81, 83, 1, 60, +/* AUTO 0 */ + 199, + 15, 0, + 3, 136, 137, 61, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* USE SNAI */ + 23, 59, 95, + 8, 30, 3, 44, 3, 67, 14, 66, 0, 66, + 1, 74, 131, 22, +/* LOOK DOCK */ + 15, 27, 45, + 4, 22, 14, 69, 0, 69, + 7, 10, 22, 74, +/* LOOK UP */ + 15, 27, 5, + 4, 22, 14, 69, 0, 69, + 7, 10, 22, 74, +/* FEEL SILT */ + 19, 24, 62, + 2, 35, 0, 22, 0, 2, 0, 18, + 39, 58, 58, 60, +/* GO DOCK */ + 10, 1, 45, + 2, 27, 0, 22, + 1, 54, 76, +/* STOP ANY */ + 0, 75, 0, + 44, +/* FEEL ANY */ + 1, 24, 0, + 30, 29, +/* OPEN ANY */ + 0, 57, 0, + 44, +/* SQUI ANY */ + 0, 80, 0, + 1, +/* LOOK ANY */ + 3, 27, 0, + 7, 30, 31, 76, +/* USE ANY */ + 1, 59, 0, + 3, 26, +/* GO PORT */ + 15, 1, 43, + 1, 2, 0, 1, 0, 2, + 24, 53, 73, 59, +/* AUTO 0 */ + 197, + 0, 2, + 58, 56, +/* AUTO 0 */ + 199, + 10, 0, + 3, 26, 10, 111, +/* AUTO 0 */ + 215, + 11, 0, 4, 19, 0, 2, 0, 48, 0, 45, + 1, 54, 72, 76, +/* AUTO 0 */ + 206, + 11, 0, 2, 48, 0, 19, + 1, 54, 76, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *FOLL */ + 198, 79, 76, 76, + /* *ENTE */ + 197, 78, 84, 69, + /* *CLIM */ + 195, 76, 73, 77, + /* *CRAW */ + 195, 82, 65, 87, + /* DRIN */ + 68, 82, 73, 78, + /* FOLD */ + 70, 79, 76, 68, + /* QUIT */ + 81, 85, 73, 84, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* *PICK */ + 208, 73, 67, 75, + /* *HOLD */ + 200, 79, 76, 68, + /* *STAN */ + 211, 84, 65, 78, + /* LIST */ + 76, 73, 83, 84, + /* *HEAR */ + 200, 69, 65, 82, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *PUT */ + 208, 85, 84, 32, + /* *RELE */ + 210, 69, 76, 69, + /* *GIVE */ + 199, 73, 86, 69, + /* *THRO */ + 212, 72, 82, 79, + /* FEEL */ + 70, 69, 69, 76, + /* *TOUC */ + 212, 79, 85, 67, + /* *PROB */ + 208, 82, 79, 66, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *L */ + 204, 32, 32, 32, + /* *DESC */ + 196, 69, 83, 67, + /* . */ + 46, 32, 32, 32, + /* GLUE */ + 71, 76, 85, 69, + /* FIND */ + 70, 73, 78, 68, + /* REMO */ + 82, 69, 77, 79, + /* *UNSC */ + 213, 78, 83, 67, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* *PUTO */ + 208, 85, 84, 79, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* INVE */ + 73, 78, 86, 69, + /* *I */ + 201, 32, 32, 32, + /* DIG */ + 68, 73, 71, 32, + /* WAKE */ + 87, 65, 75, 69, + /* BREA */ + 66, 82, 69, 65, + /* RUB */ + 82, 85, 66, 32, + /* HYPE */ + 72, 89, 80, 69, + /* SWIM */ + 83, 87, 73, 77, + /* SAY */ + 83, 65, 89, 32, + /* MAKE */ + 77, 65, 75, 69, + /* *MIX */ + 205, 73, 88, 32, + /* DIVE */ + 68, 73, 86, 69, + /* TO */ + 84, 79, 32, 32, + /* *IN */ + 201, 78, 32, 32, + /* SAVE */ + 83, 65, 86, 69, + /* WAKE */ + 87, 65, 75, 69, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* USE */ + 85, 83, 69, 32, + /* *WITH */ + 215, 73, 84, 72, + /* CLEA */ + 67, 76, 69, 65, + /* *WASH */ + 215, 65, 83, 72, + /* *RINS */ + 210, 73, 78, 83, + /* MOVE */ + 77, 79, 86, 69, + /* *PUSH */ + 208, 85, 83, 72, + /* *PULL */ + 208, 85, 76, 76, + /* *LIFT */ + 204, 73, 70, 84, + /* *PRES */ + 208, 82, 69, 83, + /* SLEE */ + 83, 76, 69, 69, + /* *EAT */ + 197, 65, 84, 32, + /* SCOR */ + 83, 67, 79, 82, + /* HELP */ + 72, 69, 76, 80, + /* SAIL */ + 83, 65, 73, 76, + /* *DRIV */ + 196, 82, 73, 86, + /* STOP */ + 83, 84, 79, 80, + /* *SHUT */ + 211, 72, 85, 84, + /* EMPT */ + 69, 77, 80, 84, + /* SPIT */ + 83, 80, 73, 84, + /* YAWN */ + 89, 65, 87, 78, + /* SQUI */ + 83, 81, 85, 73, + /* ROLL */ + 82, 79, 76, 76, + /* *WRAP */ + 215, 82, 65, 80, + /* UNRO */ + 85, 78, 82, 79, + /* *UNWR */ + 213, 78, 87, 82, + /* */ + 32, 32, 32, 32, + /* READ */ + 82, 69, 65, 68, + /* STAR */ + 83, 84, 65, 82, + /* *CRAN */ + 195, 82, 65, 78, + /* WAIT */ + 87, 65, 73, 84, + /* *PAUS */ + 208, 65, 85, 83, + /* */ + 32, 32, 32, 32, + /* CHAR */ + 67, 72, 65, 82, + /* *RECH */ + 210, 69, 67, 72, + /* *KILL */ + 203, 73, 76, 76, + /* *LIGH */ + 204, 73, 71, 72, + /* *BURN */ + 194, 85, 82, 78, + /* *TEAR */ + 212, 69, 65, 82, + /* *RIP */ + 210, 73, 80, 32, + /* *STAB */ + 211, 84, 65, 66, + /* *SHOR */ + 211, 72, 79, 82, + /* *FIX */ + 198, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* . */ + 46, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* GLAS */ + 71, 76, 65, 83, + /* LENS */ + 76, 69, 78, 83, + /* LEDG */ + 76, 69, 68, 71, + /* HILL */ + 72, 73, 76, 76, + /* SHIP */ + 83, 72, 73, 80, + /* *BOAT */ + 194, 79, 65, 84, + /* CRAC */ + 67, 82, 65, 67, + /* *CREV */ + 195, 82, 69, 86, + /* PIRA */ + 80, 73, 82, 65, + /* CRAW */ + 67, 82, 65, 87, + /* FRAM */ + 70, 82, 65, 77, + /* AROU */ + 65, 82, 79, 85, + /* DOUB */ + 68, 79, 85, 66, + /* STAM */ + 83, 84, 65, 77, + /* BOX */ + 66, 79, 88, 32, + /* SHED */ + 83, 72, 69, 68, + /* *TOOL */ + 212, 79, 79, 76, + /* PAIN */ + 80, 65, 73, 78, + /* *PICT */ + 208, 73, 67, 84, + /* *REMB */ + 210, 69, 77, 66, + /* *BLAC */ + 194, 76, 65, 67, + /* BUNK */ + 66, 85, 78, 75, + /* *BED */ + 194, 69, 68, 32, + /* BREA */ + 66, 82, 69, 65, + /* SIGN */ + 83, 73, 71, 78, + /* MASK */ + 77, 65, 83, 75, + /* *FACE */ + 198, 65, 67, 69, + /* HAMM */ + 72, 65, 77, 77, + /* DECK */ + 68, 69, 67, 75, + /* GLUE */ + 71, 76, 85, 69, + /* AMBE */ + 65, 77, 66, 69, + /* BOOK */ + 66, 79, 79, 75, + /* SEA */ + 83, 69, 65, 32, + /* *OCEA */ + 207, 67, 69, 65, + /* *WATE */ + 215, 65, 84, 69, + /* *POOL */ + 208, 79, 79, 76, + /* PORT */ + 80, 79, 82, 84, + /* OPEN */ + 79, 80, 69, 78, + /* DOCK */ + 68, 79, 67, 75, + /* *BEAM */ + 194, 69, 65, 77, + /* DEEP */ + 68, 69, 69, 80, + /* CABI */ + 67, 65, 66, 73, + /* BEAC */ + 66, 69, 65, 67, + /* ALGA */ + 65, 76, 71, 65, + /* INVE */ + 73, 78, 86, 69, + /* CURR */ + 67, 85, 82, 82, + /* GAME */ + 71, 65, 77, 69, + /* DOOR */ + 68, 79, 79, 82, + /* SHOV */ + 83, 72, 79, 86, + /* RUM */ + 82, 85, 77, 32, + /* CLOC */ + 67, 76, 79, 67, + /* *ALAR */ + 193, 76, 65, 82, + /* TORC */ + 84, 79, 82, 67, + /* ROCK */ + 82, 79, 67, 75, + /* EYES */ + 69, 89, 69, 83, + /* SILT */ + 83, 73, 76, 84, + /* LADD */ + 76, 65, 68, 68, + /* ENGI */ + 69, 78, 71, 73, + /* WATC */ + 87, 65, 84, 67, + /* TOP */ + 84, 79, 80, 32, + /* *TOPB */ + 212, 79, 80, 66, + /* *SUMM */ + 211, 85, 77, 77, + /* HELM */ + 72, 69, 76, 77, + /* PILI */ + 80, 73, 76, 73, + /* IT */ + 73, 84, 32, 32, + /* *OBJE */ + 207, 66, 74, 69, + /* *HAND */ + 200, 65, 78, 68, + /* YOHO */ + 89, 79, 72, 79, + /* SCRE */ + 83, 67, 82, 69, + /* MAP */ + 77, 65, 80, 32, + /* BACK */ + 66, 65, 67, 75, + /* EARR */ + 69, 65, 82, 82, + /* OILS */ + 79, 73, 76, 83, + /* *RAIN */ + 210, 65, 73, 78, + /* FAN */ + 70, 65, 78, 32, + /* BROO */ + 66, 82, 79, 79, + /* MATT */ + 77, 65, 84, 84, + /* BLAD */ + 66, 76, 65, 68, + /* BUTT */ + 66, 85, 84, 84, + /* CEIL */ + 67, 69, 73, 76, + /* *CIEL */ + 195, 73, 69, 76, + /* LIGH */ + 76, 73, 71, 72, + /* *FLOO */ + 198, 76, 79, 79, + /* BATT */ + 66, 65, 84, 84, + /* DOLL */ + 68, 79, 76, 76, + /* ISLE */ + 73, 83, 76, 69, + /* OYST */ + 79, 89, 83, 84, + /* PEAR */ + 80, 69, 65, 82, + /* SNAI */ + 83, 78, 65, 73, + /* FLOT */ + 70, 76, 79, 84, + /* *JETS */ + 202, 69, 84, 83, + /* PIN */ + 80, 73, 78, 32, + /* RING */ + 82, 73, 78, 71, + /* CHES */ + 67, 72, 69, 83, + /* GAS */ + 71, 65, 83, 32, + /* *FUEL */ + 198, 85, 69, 76, + /* WIRE */ + 87, 73, 82, 69, + /* *RIM */ + 210, 73, 77, 32, + 0, +}; +const uint8_t automap[] = { + /* GLAS */ + 71, 76, 65, 83, + 1, + /* SIGN */ + 83, 73, 71, 78, + 3, + /* HAMM */ + 72, 65, 77, 77, + 6, + /* BOX */ + 66, 79, 88, 32, + 8, + /* STAM */ + 83, 84, 65, 77, + 10, + /* DOUB */ + 68, 79, 85, 66, + 11, + /* PAIN */ + 80, 65, 73, 78, + 12, + /* FRAM */ + 70, 82, 65, 77, + 13, + /* PAIN */ + 80, 65, 73, 78, + 14, + /* MAP */ + 77, 65, 80, 32, + 15, + /* MASK */ + 77, 65, 83, 75, + 17, + /* WIRE */ + 87, 73, 82, 69, + 19, + /* LENS */ + 76, 69, 78, 83, + 20, + /* ALGA */ + 65, 76, 71, 65, + 21, + /* GLUE */ + 71, 76, 85, 69, + 22, + /* AMBE */ + 65, 77, 66, 69, + 23, + /* BOOK */ + 66, 79, 79, 75, + 24, + /* CLOC */ + 67, 76, 79, 67, + 31, + /* ROCK */ + 82, 79, 67, 75, + 34, + /* WATC */ + 87, 65, 84, 67, + 37, + /* RUM */ + 82, 85, 77, 32, + 41, + /* SIGN */ + 83, 73, 71, 78, + 42, + /* OYST */ + 79, 89, 83, 84, + 44, + /* BLAD */ + 66, 76, 65, 68, + 46, + /* SCRE */ + 83, 67, 82, 69, + 49, + /* PAIN */ + 80, 65, 73, 78, + 50, + /* PAIN */ + 80, 65, 73, 78, + 51, + /* SIGN */ + 83, 73, 71, 78, + 54, + /* EARR */ + 69, 65, 82, 82, + 55, + /* BOOK */ + 66, 79, 79, 75, + 56, + /* OILS */ + 79, 73, 76, 83, + 57, + /* PAIN */ + 80, 65, 73, 78, + 58, + /* BROO */ + 66, 82, 79, 79, + 60, + /* BOOK */ + 66, 79, 79, 75, + 62, + /* CHES */ + 67, 72, 69, 83, + 64, + /* DOLL */ + 68, 79, 76, 76, + 65, + /* PEAR */ + 80, 69, 65, 82, + 66, + /* SNAI */ + 83, 78, 65, 73, + 67, + /* SNAI */ + 83, 78, 65, 73, + 68, + /* PIN */ + 80, 73, 78, 32, + 69, + /* RING */ + 82, 73, 78, 71, + 70, + /* OYST */ + 79, 89, 83, 84, + 71, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/adv14b.c b/Applications/games/adv14b.c new file mode 100644 index 00000000..b16f1d3d --- /dev/null +++ b/Applications/games/adv14b.c @@ -0,0 +1,3285 @@ +#define NUM_OBJ 60 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 35; +const uint8_t lightfill = 35; +const uint8_t startcarried = 0; +const uint8_t maxcar = 5; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 35; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +83, 116, 111, 114, 101, 114, 111, 111, 109, 44, 32, 99, 97, 110, 39, 116, 32, 103, 101, 116, 32, 104, 101, 114, 101, 0 }; +const uint8_t loctxt_1[] = { +89, 111, 121, 111, 100, 121, 110, 101, 32, 111, 102, 102, 105, 99, 101, 0 }; +const uint8_t loctxt_2[] = { +66, 97, 115, 101, 109, 101, 110, 116, 32, 76, 97, 98, 111, 114, 97, 116, 111, 114, 121, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 99, 111, 114, 110, 101, 114, 32, 111, 102, 32, 77, 97, 105, 110, 32, 38, 32, 72, 105, 99, 107, 111, 114, 121, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 99, 111, 114, 110, 101, 114, 32, 111, 102, 32, 77, 97, 105, 110, 32, 38, 32, 77, 111, 117, 110, 116, 97, 105, 110, 32, 86, 105, 101, 119, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 104, 105, 103, 104, 119, 97, 121, 32, 97, 99, 99, 101, 115, 115, 32, 114, 97, 109, 112, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 111, 110, 32, 72, 105, 99, 107, 111, 114, 121, 32, 65, 118, 101, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 111, 110, 32, 72, 105, 99, 107, 111, 114, 121, 32, 65, 118, 101, 0 }; +const uint8_t loctxt_8[] = { +71, 97, 115, 32, 83, 116, 97, 116, 105, 111, 110, 0 }; +const uint8_t loctxt_9[] = { +67, 97, 115, 104, 105, 101, 114, 115, 32, 66, 111, 111, 116, 104, 0 }; +const uint8_t loctxt_10[] = { +67, 117, 108, 45, 100, 101, 45, 115, 97, 99, 32, 97, 116, 32, 69, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 72, 105, 99, 107, 111, 114, 121, 0 }; +const uint8_t loctxt_11[] = { +102, 105, 101, 108, 100, 32, 111, 102, 32, 116, 97, 108, 108, 32, 103, 114, 97, 115, 115, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 102, 114, 101, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_13[] = { +115, 104, 101, 100, 32, 102, 117, 108, 108, 32, 111, 102, 32, 114, 97, 100, 105, 111, 32, 101, 113, 117, 105, 112, 109, 101, 110, 116, 0 }; +const uint8_t loctxt_14[] = { +77, 105, 110, 101, 32, 83, 104, 97, 102, 116, 0 }; +const uint8_t loctxt_15[] = { +67, 117, 108, 45, 100, 101, 45, 115, 97, 99, 32, 97, 116, 32, 87, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 72, 105, 99, 107, 111, 114, 121, 0 }; +const uint8_t loctxt_16[] = { +108, 105, 118, 105, 110, 103, 32, 114, 111, 111, 109, 32, 111, 102, 32, 97, 32, 108, 97, 114, 103, 101, 32, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_17[] = { +104, 97, 114, 100, 119, 97, 114, 101, 32, 115, 116, 111, 114, 101, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 112, 97, 114, 107, 105, 110, 103, 32, 108, 111, 116, 0 }; +const uint8_t loctxt_19[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 112, 97, 114, 107, 105, 110, 103, 32, 108, 111, 116, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 98, 101, 97, 99, 104, 0 }; +const uint8_t loctxt_21[] = { +99, 111, 108, 100, 32, 115, 104, 97, 108, 108, 111, 119, 32, 108, 97, 107, 101, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 102, 111, 111, 116, 32, 111, 102, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_23[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 109, 111, 117, 110, 116, 97, 105, 110, 32, 108, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_24[] = { +99, 97, 118, 101, 114, 110, 32, 105, 110, 115, 105, 100, 101, 32, 116, 104, 101, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_25[] = { +108, 105, 102, 101, 103, 117, 97, 114, 100, 32, 115, 104, 97, 99, 107, 0 }; +const uint8_t loctxt_26[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 103, 97, 114, 97, 103, 101, 32, 111, 102, 32, 97, 32, 108, 97, 114, 103, 101, 32, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_27[] = { +0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 98, 101, 104, 105, 110, 100, 32, 116, 104, 101, 32, 109, 111, 117, 110, 116, 97, 105, 110, 32, 111, 110, 32, 77, 111, 117, 110, 116, 97, 105, 110, 32, 86, 105, 101, 119, 0 }; +const uint8_t loctxt_29[] = { +99, 111, 99, 107, 112, 105, 116, 32, 111, 102, 32, 116, 104, 101, 32, 106, 101, 116, 32, 99, 97, 114, 0 }; +const uint8_t loctxt_30[] = { +0 }; +const uint8_t loctxt_31[] = { +32, 32, 32, 32, 0 }; +const uint8_t loctxt_32[] = { +0 }; +const uint8_t loctxt_33[] = { +0 }; +const uint8_t loctxt_34[] = { +0 }; +const uint8_t loctxt_35[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 104, 101, 114, 101, 97, 102, 116, 101, 114, 46, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_2, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_3, { 4, 5, 6, 7, 0, 0 } }, + { loctxt_4, { 18, 3, 28, 28, 0, 0 } }, + { loctxt_5, { 3, 12, 11, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 10, 3, 0, 0 } }, + { loctxt_7, { 0, 0, 3, 15, 0, 0 } }, + { loctxt_8, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_9, { 8, 0, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 6, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 5, 0, 0 } }, + { loctxt_12, { 0, 0, 12, 12, 0, 0 } }, + { loctxt_13, { 7, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 0, 24, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 7, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 15, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 4, 0, 0, 0 } }, + { loctxt_18, { 22, 4, 0, 19, 0, 0 } }, + { loctxt_19, { 20, 0, 18, 0, 0, 0 } }, + { loctxt_20, { 21, 19, 0, 0, 0, 0 } }, + { loctxt_21, { 0, 20, 22, 0, 0, 0 } }, + { loctxt_22, { 0, 18, 0, 21, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 0, 0, 22 } }, + { loctxt_24, { 14, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 20, 0, 0, 0 } }, + { loctxt_26, { 0, 10, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 4, 4, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_35, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 2, + 3, + 3, + 4, + 23, + 7, + 10, + 26, + 24, + 0, + 15, + 8, + 8, + 8, + 9, + 9, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 17, + 0, + 17, + 17, + 19, + 0, + 20, + 25, + 0, + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29, + 13, + 0, + 0, + 34, + 2, + 20, + 0, + 50, + 17, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +83, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_1[] = { +89, 111, 121, 111, 100, 121, 110, 101, 32, 98, 117, 105, 108, 100, 105, 110, 103, 0 }; +const uint8_t objtxt_2[] = { +71, 97, 115, 32, 83, 116, 97, 116, 105, 111, 110, 0 }; +const uint8_t objtxt_3[] = { +72, 97, 114, 100, 119, 97, 114, 101, 32, 115, 116, 111, 114, 101, 0 }; +const uint8_t objtxt_4[] = { +81, 117, 97, 114, 116, 122, 0 }; +const uint8_t objtxt_5[] = { +83, 104, 101, 100, 32, 119, 105, 116, 104, 32, 97, 110, 116, 101, 110, 110, 97, 0 }; +const uint8_t objtxt_6[] = { +76, 97, 114, 103, 101, 32, 104, 111, 117, 115, 101, 0 }; +const uint8_t objtxt_7[] = { +83, 109, 97, 108, 108, 32, 116, 111, 111, 108, 98, 111, 120, 0 }; +const uint8_t objtxt_8[] = { +77, 105, 110, 101, 32, 115, 104, 97, 102, 116, 0 }; +const uint8_t objtxt_9[] = { +70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 32, 40, 111, 110, 41, 0 }; +const uint8_t objtxt_10[] = { +76, 97, 114, 103, 101, 32, 104, 111, 117, 115, 101, 0 }; +const uint8_t objtxt_11[] = { +71, 97, 115, 32, 80, 117, 109, 112, 115, 0 }; +const uint8_t objtxt_12[] = { +67, 97, 115, 104, 105, 101, 114, 115, 32, 66, 111, 111, 116, 104, 0 }; +const uint8_t objtxt_13[] = { +70, 105, 108, 108, 101, 114, 32, 112, 105, 112, 101, 32, 116, 111, 32, 117, 110, 100, 101, 114, 103, 114, 111, 117, 110, 100, 32, 103, 97, 115, 32, 116, 97, 110, 107, 0 }; +const uint8_t objtxt_14[] = { +67, 111, 110, 116, 114, 111, 108, 32, 67, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_15[] = { +84, 114, 97, 115, 104, 32, 80, 105, 108, 101, 0 }; +const uint8_t objtxt_16[] = { +83, 116, 97, 105, 114, 99, 97, 115, 101, 32, 103, 111, 105, 110, 103, 32, 100, 111, 119, 110, 0 }; +const uint8_t objtxt_17[] = { +84, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_18[] = { +70, 108, 111, 111, 114, 32, 115, 97, 102, 101, 0 }; +const uint8_t objtxt_19[] = { +79, 108, 100, 32, 99, 97, 114, 32, 98, 97, 116, 116, 101, 114, 121, 0 }; +const uint8_t objtxt_20[] = { +79, 112, 101, 110, 32, 116, 111, 111, 108, 98, 111, 120, 0 }; +const uint8_t objtxt_21[] = { +75, 101, 121, 0 }; +const uint8_t objtxt_22[] = { +82, 111, 108, 108, 32, 111, 102, 32, 100, 117, 99, 116, 32, 116, 97, 112, 101, 0 }; +const uint8_t objtxt_23[] = { +67, 108, 105, 109, 98, 101, 114, 115, 32, 80, 105, 99, 107, 0 }; +const uint8_t objtxt_24[] = { +85, 110, 108, 111, 99, 107, 101, 100, 32, 102, 105, 108, 108, 101, 114, 32, 112, 105, 112, 101, 0 }; +const uint8_t objtxt_25[] = { +72, 121, 100, 114, 111, 109, 101, 116, 101, 114, 0 }; +const uint8_t objtxt_26[] = { +77, 97, 110, 117, 97, 108, 32, 104, 97, 110, 100, 32, 112, 117, 109, 112, 0 }; +const uint8_t objtxt_27[] = { +74, 101, 116, 32, 67, 97, 114, 0 }; +const uint8_t objtxt_28[] = { +75, 101, 121, 0 }; +const uint8_t objtxt_29[] = { +76, 105, 102, 101, 103, 117, 97, 114, 100, 32, 115, 104, 97, 99, 107, 0 }; +const uint8_t objtxt_30[] = { +83, 109, 97, 108, 108, 32, 72, 97, 109, 32, 114, 97, 100, 105, 111, 0 }; +const uint8_t objtxt_31[] = { +70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 32, 40, 111, 102, 102, 41, 0 }; +const uint8_t objtxt_32[] = { +66, 111, 109, 98, 32, 104, 111, 117, 115, 105, 110, 103, 0 }; +const uint8_t objtxt_33[] = { +69, 110, 118, 101, 108, 111, 112, 101, 0 }; +const uint8_t objtxt_34[] = { +108, 97, 114, 103, 101, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_35[] = { +65, 110, 111, 116, 104, 101, 114, 32, 108, 97, 114, 103, 101, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_36[] = { +50, 48, 32, 102, 116, 32, 111, 102, 32, 112, 104, 111, 110, 101, 32, 108, 105, 110, 101, 0 }; +const uint8_t objtxt_37[] = { +80, 104, 111, 110, 101, 32, 108, 105, 110, 101, 32, 100, 97, 110, 103, 108, 105, 110, 103, 32, 102, 114, 111, 109, 32, 97, 98, 111, 118, 101, 0 }; +const uint8_t objtxt_38[] = { +81, 117, 97, 114, 116, 122, 0 }; +const uint8_t objtxt_39[] = { +83, 104, 101, 101, 116, 32, 111, 102, 32, 112, 97, 112, 101, 114, 0 }; +const uint8_t objtxt_40[] = { +70, 117, 101, 108, 32, 104, 111, 115, 101, 0 }; +const uint8_t objtxt_41[] = { +70, 111, 114, 109, 117, 108, 97, 0 }; +const uint8_t objtxt_42[] = { +68, 97, 115, 104, 98, 111, 97, 114, 100, 0 }; +const uint8_t objtxt_43[] = { +65, 110, 116, 101, 110, 110, 97, 32, 108, 101, 97, 100, 0 }; +const uint8_t objtxt_44[] = { +66, 97, 116, 116, 101, 114, 121, 32, 97, 116, 116, 97, 99, 104, 101, 100, 32, 116, 111, 32, 114, 97, 100, 105, 111, 0 }; +const uint8_t objtxt_45[] = { +69, 109, 112, 116, 121, 32, 99, 104, 101, 109, 105, 99, 97, 108, 32, 74, 117, 103, 0 }; +const uint8_t objtxt_46[] = { +74, 117, 103, 32, 111, 102, 32, 103, 97, 115, 111, 108, 105, 110, 101, 0 }; +const uint8_t objtxt_47[] = { +77, 105, 120, 105, 110, 103, 32, 118, 97, 116, 0 }; +const uint8_t objtxt_48[] = { +83, 97, 110, 100, 0 }; +const uint8_t objtxt_49[] = { +74, 97, 114, 32, 111, 102, 32, 103, 108, 111, 119, 105, 110, 103, 32, 70, 108, 117, 105, 100, 0 }; +const uint8_t objtxt_50[] = { +74, 117, 103, 32, 111, 102, 32, 106, 101, 116, 32, 102, 117, 101, 108, 0 }; +const uint8_t objtxt_51[] = { +74, 117, 109, 112, 101, 114, 32, 67, 97, 98, 108, 101, 115, 0 }; +const uint8_t objtxt_52[] = { +72, 101, 97, 118, 121, 32, 115, 116, 111, 110, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_53[] = { +32, 0 }; +const uint8_t objtxt_54[] = { +0 }; +const uint8_t objtxt_55[] = { +0 }; +const uint8_t objtxt_56[] = { +0 }; +const uint8_t objtxt_57[] = { +0 }; +const uint8_t objtxt_58[] = { +0 }; +const uint8_t objtxt_59[] = { +0 }; +const uint8_t objtxt_60[] = { +0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, +}; +const uint8_t msgtxt_0[] = { +32, 32, 32, 32, 32, 32, 0 }; +const uint8_t msgtxt_1[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_2[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_3[] = { +110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_4[] = { +100, 97, 114, 107, 110, 101, 115, 115, 0 }; +const uint8_t msgtxt_5[] = { +105, 116, 39, 115, 32, 112, 97, 100, 108, 111, 99, 107, 101, 100, 46, 0 }; +const uint8_t msgtxt_6[] = { +116, 104, 101, 105, 114, 32, 116, 117, 114, 110, 101, 100, 32, 111, 102, 102, 46, 0 }; +const uint8_t msgtxt_7[] = { +97, 32, 115, 119, 105, 116, 99, 104, 32, 116, 111, 32, 116, 104, 101, 32, 103, 97, 115, 32, 112, 117, 109, 112, 115, 46, 0 }; +const uint8_t msgtxt_8[] = { +115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_9[] = { +73, 32, 103, 111, 116, 0 }; +const uint8_t msgtxt_10[] = { +105, 116, 39, 115, 32, 97, 32, 107, 101, 121, 32, 115, 97, 102, 101, 46, 0 }; +const uint8_t msgtxt_11[] = { +116, 104, 101, 114, 101, 39, 115, 32, 110, 111, 0 }; +const uint8_t msgtxt_12[] = { +119, 97, 116, 101, 114, 32, 105, 110, 32, 116, 104, 101, 32, 98, 97, 116, 116, 101, 114, 121, 46, 0 }; +const uint8_t msgtxt_13[] = { +73, 32, 99, 97, 110, 39, 116, 44, 0 }; +const uint8_t msgtxt_14[] = { +66, 97, 116, 116, 101, 114, 121, 32, 116, 101, 115, 116, 115, 58, 0 }; +const uint8_t msgtxt_15[] = { +87, 101, 97, 107, 0 }; +const uint8_t msgtxt_16[] = { +68, 101, 97, 100, 0 }; +const uint8_t msgtxt_17[] = { +109, 111, 118, 101, 115, 0 }; +const uint8_t msgtxt_18[] = { +116, 104, 101, 32, 104, 111, 115, 101, 32, 105, 115, 0 }; +const uint8_t msgtxt_19[] = { +65, 110, 32, 97, 116, 111, 109, 105, 99, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 32, 101, 114, 117, 112, 116, 115, 46, 0 }; +const uint8_t msgtxt_20[] = { +104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_21[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_22[] = { +83, 116, 105, 99, 107, 101, 114, 32, 115, 97, 121, 115, 58, 32, 83, 97, 109, 39, 115, 32, 83, 101, 114, 118, 105, 99, 101, 32, 83, 116, 97, 116, 105, 111, 110, 46, 0 }; +const uint8_t msgtxt_23[] = { +116, 104, 101, 32, 107, 101, 121, 32, 100, 111, 101, 115, 110, 39, 116, 32, 102, 105, 116, 46, 0 }; +const uint8_t msgtxt_24[] = { +84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 32, 98, 97, 116, 116, 101, 114, 121, 0 }; +const uint8_t msgtxt_25[] = { +98, 97, 116, 116, 101, 114, 121, 115, 32, 97, 114, 101, 32, 100, 101, 97, 100, 0 }; +const uint8_t msgtxt_26[] = { +66, 111, 109, 98, 32, 97, 99, 107, 110, 111, 119, 108, 101, 100, 103, 101, 115, 32, 99, 111, 100, 101, 0 }; +const uint8_t msgtxt_27[] = { +84, 104, 101, 32, 101, 97, 114, 116, 104, 32, 105, 115, 32, 115, 97, 102, 101, 32, 97, 103, 97, 105, 110, 46, 0 }; +const uint8_t msgtxt_28[] = { +109, 97, 114, 107, 101, 100, 32, 39, 82, 70, 73, 32, 83, 104, 105, 101, 108, 100, 39, 32, 105, 115, 0 }; +const uint8_t msgtxt_29[] = { +97, 32, 115, 119, 105, 116, 99, 104, 0 }; +const uint8_t msgtxt_30[] = { +108, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_31[] = { +111, 102, 102, 0 }; +const uint8_t msgtxt_32[] = { +111, 110, 0 }; +const uint8_t msgtxt_33[] = { +78, 111, 116, 32, 116, 111, 32, 116, 104, 97, 116, 46, 0 }; +const uint8_t msgtxt_34[] = { +97, 110, 100, 32, 97, 110, 32, 101, 110, 118, 101, 108, 111, 112, 101, 0 }; +const uint8_t msgtxt_35[] = { +119, 111, 114, 107, 0 }; +const uint8_t msgtxt_36[] = { +83, 99, 111, 116, 116, 32, 119, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 46, 0 }; +const uint8_t msgtxt_37[] = { +97, 32, 108, 101, 100, 103, 101, 32, 97, 98, 111, 117, 116, 32, 49, 53, 39, 32, 117, 112, 32, 119, 105, 116, 104, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 101, 97, 107, 46, 0 }; +const uint8_t msgtxt_38[] = { +97, 110, 32, 117, 110, 100, 101, 114, 103, 114, 111, 117, 110, 100, 32, 112, 104, 111, 110, 101, 32, 108, 105, 110, 101, 46, 0 }; +const uint8_t msgtxt_39[] = { +116, 104, 101, 32, 108, 105, 110, 101, 32, 105, 115, 32, 115, 101, 118, 101, 114, 101, 100, 46, 0 }; +const uint8_t msgtxt_40[] = { +78, 111, 116, 32, 119, 105, 116, 104, 32, 116, 104, 101, 115, 101, 32, 104, 97, 110, 100, 115, 46, 0 }; +const uint8_t msgtxt_41[] = { +119, 104, 105, 108, 101, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 97, 110, 121, 116, 104, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_42[] = { +105, 116, 39, 115, 32, 115, 116, 105, 108, 108, 32, 97, 116, 116, 97, 99, 104, 101, 100, 46, 0 }; +const uint8_t msgtxt_43[] = { +84, 111, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_44[] = { +73, 116, 39, 115, 32, 105, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 114, 111, 99, 107, 0 }; +const uint8_t msgtxt_45[] = { +68, 105, 115, 97, 114, 109, 32, 67, 111, 100, 101, 58, 32, 49, 61, 87, 97, 114, 102, 105, 110, 32, 50, 61, 89, 111, 121, 111, 100, 121, 110, 101, 0 }; +const uint8_t msgtxt_46[] = { +84, 104, 101, 32, 99, 111, 99, 107, 112, 105, 116, 32, 105, 115, 0 }; +const uint8_t msgtxt_47[] = { +111, 112, 101, 110, 0 }; +const uint8_t msgtxt_48[] = { +99, 108, 111, 115, 101, 100, 0 }; +const uint8_t msgtxt_49[] = { +97, 32, 102, 117, 101, 108, 32, 116, 97, 110, 107, 32, 97, 110, 100, 32, 97, 32, 106, 101, 116, 32, 101, 110, 103, 105, 110, 101, 0 }; +const uint8_t msgtxt_50[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_51[] = { +115, 116, 97, 114, 116, 101, 114, 32, 98, 117, 116, 116, 111, 110, 32, 38, 32, 103, 108, 111, 118, 101, 32, 99, 111, 109, 112, 97, 114, 116, 109, 101, 110, 116, 46, 0 }; +const uint8_t msgtxt_52[] = { +70, 117, 101, 108, 32, 103, 97, 117, 103, 101, 32, 114, 101, 97, 100, 115, 0 }; +const uint8_t msgtxt_53[] = { +102, 117, 108, 108, 0 }; +const uint8_t msgtxt_54[] = { +101, 109, 112, 116, 121, 0 }; +const uint8_t msgtxt_55[] = { +70, 117, 101, 108, 32, 105, 115, 32, 109, 97, 100, 101, 32, 102, 114, 111, 109, 0 }; +const uint8_t msgtxt_56[] = { +103, 97, 115, 111, 108, 105, 110, 101, 44, 32, 115, 97, 110, 100, 44, 32, 113, 117, 97, 114, 116, 122, 44, 32, 99, 97, 116, 97, 108, 121, 115, 116, 46, 0 }; +const uint8_t msgtxt_57[] = { +97, 32, 116, 114, 97, 110, 115, 109, 105, 116, 32, 115, 119, 105, 116, 99, 104, 0 }; +const uint8_t msgtxt_58[] = { +73, 32, 104, 101, 97, 114, 32, 116, 104, 101, 32, 98, 111, 109, 98, 32, 119, 105, 108, 108, 32, 101, 120, 112, 108, 111, 100, 101, 32, 105, 110, 0 }; +const uint8_t msgtxt_59[] = { +84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 32, 97, 110, 116, 101, 110, 110, 97, 0 }; +const uint8_t msgtxt_60[] = { +73, 110, 32, 50, 32, 119, 111, 114, 100, 115, 44, 32, 99, 111, 110, 110, 101, 99, 116, 32, 116, 111, 32, 119, 104, 97, 116, 63, 44, 32, 105, 46, 101, 46, 32, 67, 79, 78, 78, 69, 67, 84, 32, 80, 73, 80, 69, 0 }; +const uint8_t msgtxt_61[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 119, 111, 114, 107, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_62[] = { +84, 111, 32, 116, 114, 97, 110, 115, 109, 105, 116, 32, 115, 97, 121, 32, 34, 84, 82, 65, 78, 83, 77, 73, 84, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 34, 0 }; +const uint8_t msgtxt_63[] = { +54, 0 }; +const uint8_t msgtxt_64[] = { +49, 48, 0 }; +const uint8_t msgtxt_65[] = { +102, 116, 32, 108, 111, 110, 103, 0 }; +const uint8_t msgtxt_66[] = { +105, 116, 32, 119, 111, 110, 39, 116, 32, 115, 116, 97, 121, 0 }; +const uint8_t msgtxt_67[] = { +116, 97, 112, 101, 32, 104, 111, 108, 100, 115, 32, 105, 116, 0 }; +const uint8_t msgtxt_68[] = { +97, 116, 116, 97, 99, 104, 101, 100, 32, 116, 111, 32, 112, 117, 109, 112, 46, 0 }; +const uint8_t msgtxt_69[] = { +73, 116, 32, 100, 111, 101, 115, 110, 39, 116, 0 }; +const uint8_t msgtxt_70[] = { +114, 101, 97, 99, 104, 32, 116, 104, 101, 32, 103, 97, 115, 111, 108, 105, 110, 101, 46, 0 }; +const uint8_t msgtxt_71[] = { +73, 116, 32, 100, 111, 101, 115, 0 }; +const uint8_t msgtxt_72[] = { +73, 32, 108, 111, 115, 101, 32, 105, 116, 32, 105, 110, 32, 116, 104, 101, 32, 116, 97, 110, 107, 46, 0 }; +const uint8_t msgtxt_73[] = { +99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 98, 121, 32, 97, 32, 104, 111, 115, 101, 46, 0 }; +const uint8_t msgtxt_74[] = { +67, 97, 114, 32, 99, 97, 116, 99, 104, 101, 115, 32, 102, 105, 114, 101, 32, 97, 110, 100, 32, 98, 108, 111, 119, 115, 32, 117, 112, 46, 0 }; +const uint8_t msgtxt_75[] = { +73, 39, 109, 32, 102, 114, 105, 101, 100, 32, 66, 97, 110, 122, 97, 105, 46, 0 }; +const uint8_t msgtxt_76[] = { +69, 110, 103, 105, 110, 101, 32, 105, 115, 32, 105, 100, 108, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_77[] = { +112, 111, 119, 101, 114, 32, 116, 101, 114, 109, 105, 110, 97, 108, 115, 44, 0 }; +const uint8_t msgtxt_78[] = { +73, 32, 100, 114, 105, 118, 101, 32, 116, 111, 32, 77, 97, 105, 110, 32, 83, 116, 32, 102, 111, 114, 32, 97, 116, 116, 101, 109, 112, 116, 32, 116, 111, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t msgtxt_79[] = { +73, 32, 103, 111, 32, 116, 104, 114, 117, 32, 100, 111, 111, 114, 46, 32, 83, 108, 97, 109, 33, 33, 33, 0 }; +const uint8_t msgtxt_80[] = { +99, 111, 110, 116, 97, 105, 110, 101, 114, 0 }; +const uint8_t msgtxt_81[] = { +73, 32, 100, 114, 105, 118, 101, 32, 105, 110, 116, 111, 32, 109, 111, 117, 110, 116, 97, 105, 110, 46, 0 }; +const uint8_t msgtxt_82[] = { +117, 110, 100, 101, 114, 32, 115, 116, 97, 105, 114, 115, 44, 32, 73, 32, 103, 101, 116, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_83[] = { +34, 66, 117, 99, 107, 97, 114, 111, 111, 32, 66, 97, 110, 122, 97, 105, 34, 0 }; +const uint8_t msgtxt_84[] = { +65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 98, 121, 32, 83, 99, 111, 116, 116, 32, 65, 100, 97, 109, 115, 32, 38, 32, 80, 104, 105, 108, 108, 105, 112, 32, 67, 97, 115, 101, 0 }; +const uint8_t msgtxt_85[] = { +73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 46, 46, 46, 121, 101, 116, 0 }; +const uint8_t msgtxt_86[] = { +114, 101, 115, 105, 100, 117, 101, 32, 105, 110, 115, 105, 100, 101, 32, 105, 116, 46, 0 }; +const uint8_t msgtxt_87[] = { +105, 116, 39, 115, 32, 99, 108, 101, 97, 110, 46, 0 }; +const uint8_t msgtxt_88[] = { +78, 111, 32, 102, 111, 114, 109, 117, 108, 97, 33, 0 }; +const uint8_t msgtxt_89[] = { +105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 46, 0 }; +const uint8_t msgtxt_90[] = { +0 }; +const uint8_t msgtxt_91[] = { +0 }; +const uint8_t msgtxt_92[] = { +0 }; +const uint8_t msgtxt_93[] = { +0 }; +const uint8_t msgtxt_94[] = { +0 }; +const uint8_t msgtxt_95[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 183, + 7, 2, 7, 24, 8, 15, 9, 6, 7, 14, + 67, 0, 0, 73, +/* AUTO 0 */ + 203, + 8, 0, 0, 27, + 60, 68, 57, 64, +/* AUTO 100 */ + 178, + 8, 16, 9, 28, 0, 31, 0, 28, + 52, 58, 64, +/* AUTO 100 */ + 178, + 4, 24, 6, 9, 9, 27, 0, 27, + 56, 58, 64, +/* AUTO 100 */ + 168, + 1, 30, 0, 14, + 60, +/* AUTO 100 */ + 183, + 2, 43, 2, 44, 8, 30, 8, 14, 0, 1, + 108, 81, 78, 73, +/* AUTO 0 */ + 197, + 0, 1, + 81, 17, +/* AUTO 100 */ + 172, + 2, 30, 1, 44, 0, 44, + 53, +/* AUTO 100 */ + 172, + 2, 44, 1, 30, 0, 44, + 74, +/* AUTO 100 */ + 179, + 9, 2, 64, 238, 0, 4, 0, 1, + 79, 58, 81, 73, +/* AUTO 0 */ + 198, + 0, 2, + 58, 133, 134, +/* AUTO 100 */ + 164, + 0, 1, + 81, +/* AUTO 100 */ + 171, + 19, 0, 0, 35, + 54, 64, 19, 125, +/* AUTO 100 */ + 164, + 0, 1, + 81, +/* AUTO 100 */ + 170, + 0, 1, 0, 1, + 81, 77, 81, +/* AUTO 100 */ + 172, + 7, 8, 1, 26, 0, 12, + 60, +/* AUTO 100 */ + 164, + 4, 35, + 63, +/* AUTO 100 */ + 173, + 1, 51, 0, 9, 0, 10, + 60, 60, +/* AUTO 100 */ + 168, + 1, 27, 0, 10, + 60, +/* AUTO 100 */ + 180, + 8, 9, 8, 10, 8, 11, 8, 31, 0, 30, + 58, +/* AUTO 100 */ + 169, + 4, 14, 9, 9, + 56, 64, +/* AUTO 100 */ + 182, + 9, 3, 4, 12, 0, 3, 0, 2, 0, 1, + 58, 79, 81, +/* AUTO 100 */ + 170, + 4, 28, 0, 6, + 60, 57, 64, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +}; +const uint8_t actions[] = { +/* PUMP ANY */ + 7, 50, 0, + 6, 45, + 13, 11, 104, 130, +/* STAR PUMP */ + 255, 49, 18, + 4, 0, +/* FIND ANY */ + 255, 51, 0, + 4, 0, +/* PUSH COCK */ + 9, 66, 59, + 4, 14, 0, 28, + 129, 54, +/* UNCO HOSE */ + 23, 52, 57, + 1, 26, 8, 13, 0, 13, 0, 12, 0, 40, + 60, 60, 74, 1, +/* PUMP GAS */ + 23, 50, 71, + 8, 12, 2, 24, 1, 45, 0, 46, 0, 45, + 1, 72, 67, 73, +/* AUTO 0 */ + 201, + 8, 0, 0, 20, + 68, 58, +/* PUT HOSE */ + 18, 43, 57, + 2, 24, 1, 26, 8, 13, 0, 12, + 121, 120, 58, +/* PUT HOSE */ + 14, 43, 57, + 2, 24, 1, 40, 0, 40, + 1, 122, 59, +/* PUT HOSE */ + 13, 43, 57, + 2, 24, 1, 26, 9, 13, + 119, 120, +/* CONN HOSE */ + 23, 38, 57, + 1, 40, 1, 26, 1, 22, 0, 13, 0, 40, + 58, 117, 118, 59, +/* CONN HOSE */ + 13, 38, 57, + 1, 40, 1, 26, 6, 22, + 116, 118, +/* CONN PUMP */ + 4, 38, 18, + 1, 26, + 110, +/* LOOK PUMP */ + 11, 5, 18, + 3, 26, 8, 13, + 2, 18, 114, 115, +/* LOOK PUMP */ + 11, 5, 18, + 3, 26, 9, 13, + 2, 18, 113, 115, +/* TRAN WARF */ + 19, 41, 70, + 4, 13, 8, 14, 8, 29, 8, 30, + 67, 0, 0, 73, +/* AUTO 0 */ + 203, + 8, 0, 9, 1, + 3, 8, 20, 73, +/* AUTO 0 */ + 203, + 8, 0, 9, 1, + 68, 0, 0, 73, +/* AUTO 0 */ + 202, + 8, 0, 0, 17, + 26, 68, 58, +/* TRAN YOYO */ + 23, 41, 10, + 4, 13, 8, 14, 8, 17, 8, 29, 8, 30, + 1, 26, 27, 63, +/* GO STAT */ + 9, 1, 7, + 2, 2, 0, 8, + 54, 1, +/* GO BOOT */ + 9, 1, 8, + 2, 12, 0, 9, + 54, 1, +/* GO YOYO */ + 9, 1, 10, + 2, 1, 0, 1, + 54, 1, +/* LOOK STAI */ + 5, 5, 12, + 2, 16, + 2, 4, +/* GO STAI */ + 11, 1, 12, + 2, 16, 0, 2, + 54, 1, 56, 64, +/* LOOK PIPE */ + 5, 5, 13, + 2, 13, + 2, 5, +/* GO HOUS */ + 9, 1, 15, + 2, 10, 0, 16, + 54, 1, +/* GO HOUS */ + 9, 1, 15, + 2, 6, 0, 26, + 54, 1, +/* GO HARD */ + 9, 1, 16, + 2, 3, 0, 17, + 54, 1, +/* LOOK PUMP */ + 5, 5, 18, + 2, 11, + 2, 6, +/* LOOK CONS */ + 5, 5, 19, + 2, 14, + 2, 7, +/* PUSH SWIT */ + 5, 66, 21, + 2, 14, + 3, 20, +/* PUSH TABL */ + 13, 66, 25, + 2, 17, 0, 18, 0, 1, + 62, 1, +/* THRO SWIT */ + 5, 64, 21, + 2, 14, + 3, 20, +/* SLID TABL */ + 13, 73, 25, + 2, 17, 0, 18, 0, 1, + 62, 1, +/* LOOK PILE */ + 19, 5, 23, + 2, 15, 17, 19, 0, 19, 0, 9, + 62, 1, 2, 21, +/* OPEN TOOL */ + 23, 19, 29, + 3, 7, 17, 22, 0, 7, 0, 20, 0, 21, + 72, 74, 0, 73, +/* AUTO 0 */ + 203, + 0, 22, 0, 31, + 74, 74, 9, 21, +/* LOOK DOWN */ + 5, 5, 6, + 4, 1, + 2, 4, +/* OPEN PIPE */ + 17, 19, 13, + 2, 13, 1, 21, 0, 24, 0, 13, + 72, 1, +/* LOOK SAFE */ + 5, 5, 35, + 2, 18, + 2, 10, +/* GET BATT */ + 18, 10, 26, + 2, 44, 0, 44, 0, 29, 0, 19, + 59, 60, 74, +/* GET BATT */ + 8, 10, 26, + 2, 19, 0, 19, + 52, +/* DROP BATT */ + 18, 18, 26, + 1, 44, 0, 44, 0, 19, 0, 14, + 59, 53, 60, +/* DROP BATT */ + 8, 18, 26, + 1, 19, 0, 19, + 53, +/* GO SHAC */ + 9, 1, 42, + 4, 20, 0, 25, + 1, 54, +/* FUEL BATT */ + 13, 46, 26, + 3, 19, 4, 21, 0, 31, + 58, 1, +/* LOOK BATT */ + 10, 5, 26, + 3, 19, 9, 31, + 2, 11, 12, +/* LOOK BATT */ + 9, 5, 26, + 3, 19, 8, 31, + 2, 12, +/* LOOK TOOL */ + 4, 5, 29, + 3, 7, + 22, +/* CHEC BATT */ + 13, 23, 26, + 3, 19, 1, 25, 8, 30, + 14, 15, +/* CHEC BATT */ + 13, 23, 26, + 3, 19, 1, 25, 9, 30, + 14, 16, +/* CHEC BATT */ + 13, 23, 26, + 3, 22, 1, 25, 8, 30, + 14, 15, +/* CHEC BATT */ + 13, 23, 26, + 3, 44, 1, 25, 9, 30, + 14, 16, +/* LOOK GLOV */ + 15, 5, 62, + 4, 29, 9, 18, 0, 41, + 9, 21, 74, 73, +/* AUTO 0 */ + 201, + 0, 18, 0, 49, + 58, 74, +/* LIGH ON */ + 9, 25, 44, + 8, 16, 3, 31, + 13, 25, +/* LIGH ON */ + 14, 25, 44, + 3, 31, 0, 9, 0, 31, + 72, 64, 1, +/* LIGH OFF */ + 14, 25, 45, + 3, 9, 0, 9, 0, 31, + 72, 64, 1, +/* LOOK BOMB */ + 15, 5, 48, + 4, 24, 1, 9, 9, 1, + 2, 30, 28, 73, +/* AUTO 0 */ + 194, + 32, 2, 29, +/* AUTO 0 */ + 196, + 17, 33, + 34, +/* PUSH SWIT */ + 15, 66, 21, + 4, 24, 1, 9, 0, 1, + 58, 2, 21, 20, +/* LOOK BOMB */ + 15, 5, 48, + 4, 24, 1, 9, 8, 1, + 30, 28, 31, 73, +/* AUTO 0 */ + 196, + 17, 33, + 34, +/* GET ENVE */ + 17, 10, 34, + 4, 24, 17, 33, 1, 9, 0, 33, + 1, 52, +/* AUTO 0 */ +/* OPEN ENVE */ + 14, 19, 34, + 1, 33, 6, 28, 0, 28, + 9, 21, 74, +/* LOOK MOUN */ + 5, 5, 52, + 4, 22, + 2, 37, +/* DIG ANY */ + 19, 84, 0, + 4, 11, 1, 23, 9, 26, 0, 26, + 58, 1, 0, 73, +/* AUTO 0 */ + 200, + 0, 34, 0, 11, + 62, +/* DIG ANY */ + 21, 84, 0, + 8, 26, 1, 23, 4, 11, 0, 35, 0, 11, + 62, 1, +/* LOOK HOLE */ + 9, 5, 54, + 2, 34, 17, 36, + 2, 38, +/* CUT LINE */ + 22, 27, 55, + 2, 34, 1, 23, 9, 25, 0, 25, 17, 36, + 2, 39, 58, +/* CUT LINE */ + 22, 27, 55, + 2, 35, 8, 25, 1, 23, 0, 24, 17, 36, + 58, 2, 39, +/* PUSH LINE */ + 19, 66, 55, + 2, 35, 8, 24, 17, 36, 0, 36, + 52, 1, 9, 21, +/* GET LINE */ + 17, 10, 55, + 2, 35, 8, 24, 17, 36, 0, 36, + 52, 1, +/* THRO LINE */ + 17, 64, 55, + 1, 36, 4, 22, 0, 36, 0, 37, + 59, 53, +/* CLIM LINE */ + 9, 34, 55, + 2, 37, 10, 0, + 13, 41, +/* CLIM LINE */ + 13, 34, 55, + 2, 37, 11, 0, 0, 23, + 54, 1, +/* TIE LINE */ + 4, 36, 55, + 2, 37, + 43, +/* TO PICK */ + 18, 37, 51, + 2, 37, 3, 23, 0, 23, 0, 23, + 1, 58, 59, +/* AUTO 0 */ +/* GET QUAR */ + 13, 10, 53, + 4, 23, 6, 23, 2, 4, + 13, 44, +/* GET QUAR */ + 22, 10, 53, + 1, 23, 4, 23, 2, 4, 0, 4, 0, 38, + 1, 59, 52, +/* OPEN SAFE */ + 15, 19, 35, + 1, 28, 2, 18, 0, 39, + 52, 1, 9, 21, +/* LOOK PAPE */ + 5, 5, 50, + 1, 39, + 2, 45, +/* LOOK CAR */ + 7, 5, 39, + 2, 27, + 2, 46, 47, 73, +/* AUTO 0 */ + 194, + 2, 127, 49, +/* AUTO 0 */ + 196, + 9, 21, + 123, +/* AUTO 0 */ + 196, + 8, 11, + 126, +/* GET HOSE */ + 22, 10, 57, + 2, 27, 9, 21, 9, 11, 0, 40, 0, 21, + 52, 58, 1, +/* GET HOSE */ + 9, 10, 57, + 2, 40, 0, 40, + 52, 1, +/* REPL HOSE */ + 18, 32, 57, + 1, 40, 2, 27, 0, 21, 0, 40, + 1, 60, 59, +/* GO COCK */ + 9, 1, 59, + 2, 27, 0, 29, + 54, 1, +/* CLOS COCK */ + 13, 35, 59, + 4, 29, 9, 22, 0, 22, + 1, 58, +/* LOOK DASH */ + 7, 5, 64, + 4, 29, + 2, 51, 46, 73, +/* AUTO 0 */ + 197, + 9, 22, + 47, 102, +/* AUTO 0 */ + 197, + 8, 22, + 48, 102, +/* AUTO 0 */ + 196, + 8, 19, + 103, +/* AUTO 0 */ + 196, + 8, 8, + 103, +/* AUTO 0 */ + 200, + 9, 19, 9, 8, + 104, +/* OPEN GLOV */ + 15, 19, 62, + 4, 29, 9, 18, 0, 41, + 9, 21, 74, 73, +/* AUTO 0 */ + 201, + 0, 18, 0, 49, + 58, 74, +/* LOOK FORM */ + 5, 5, 65, + 1, 41, + 105, 106, +/* LOOK RADI */ + 7, 5, 43, + 3, 30, + 2, 107, 0, 73, +/* AUTO 0 */ + 199, + 9, 29, + 24, 0, 0, 73, +/* AUTO 0 */ + 199, + 9, 14, + 109, 0, 0, 73, +/* AUTO 0 */ + 211, + 8, 14, 8, 29, 8, 30, 8, 31, + 67, 0, 0, 73, +/* AUTO 0 */ + 199, + 9, 0, + 111, 0, 0, 73, +/* AUTO 0 */ + 192, + 68, +/* CONN RADI */ + 4, 38, 43, + 3, 30, + 110, +/* CONN ANTE */ + 22, 38, 66, + 4, 13, 9, 14, 3, 30, 0, 14, 0, 30, + 58, 53, 1, +/* CONN CABL */ + 4, 38, 75, + 3, 51, + 43, +/* CONN BATT */ + 19, 38, 26, + 3, 30, 3, 19, 9, 29, 0, 29, + 58, 1, 0, 73, +/* AUTO 0 */ + 200, + 0, 19, 0, 44, + 72, +/* PUSH SWIT */ + 16, 66, 21, + 4, 13, 2, 44, 8, 14, 8, 30, + 112, +/* MAKE FUEL */ + 23, 55, 74, + 4, 2, 3, 9, 3, 38, 3, 49, 3, 46, + 0, 0, 0, 73, +/* AUTO 0 */ + 215, + 3, 48, 3, 41, 0, 38, 0, 49, 0, 48, + 59, 59, 59, 67, +/* AUTO 0 */ + 196, + 9, 0, + 135, +/* AUTO 0 */ + 211, + 8, 0, 0, 46, 0, 34, 0, 50, + 62, 52, 1, 68, +/* FUEL CAR */ + 22, 46, 39, + 2, 27, 1, 50, 0, 50, 0, 45, 0, 19, + 72, 58, 1, +/* PUSH BUTT */ + 10, 66, 79, + 4, 29, 8, 8, + 124, 125, 63, +/* PUSH BUTT */ + 10, 66, 79, + 4, 29, 9, 19, + 3, 8, 20, +/* PUSH BUTT */ + 10, 66, 79, + 4, 29, 8, 21, + 124, 125, 63, +/* PUSH BUTT */ + 10, 66, 79, + 4, 29, 8, 20, + 124, 125, 63, +/* PUSH BUTT */ + 14, 66, 79, + 4, 29, 9, 22, 0, 11, + 1, 126, 58, +/* PUSH BUTT */ + 18, 66, 79, + 4, 29, 8, 4, 0, 4, 0, 5, + 60, 58, 128, +/* PUSH BUTT */ + 23, 66, 79, + 4, 29, 8, 5, 0, 5, 0, 6, 0, 19, + 60, 58, 60, 73, +/* AUTO 0 */ + 194, + 131, 56, 64, +/* GET HOSE */ + 10, 10, 57, + 2, 27, 8, 11, + 124, 125, 63, +/* OPEN COCK */ + 18, 19, 59, + 4, 29, 8, 22, 0, 22, 0, 11, + 60, 60, 1, +/* WASH HOSE */ + 13, 59, 57, + 1, 40, 4, 21, 0, 20, + 60, 1, +/* GET UP */ + 6, 10, 5, + 8, 22, + 13, 46, 48, +/* GET UP */ + 22, 10, 5, + 4, 29, 8, 4, 0, 19, 0, 27, 0, 19, + 54, 62, 1, +/* GET UP */ + 22, 10, 5, + 4, 29, 8, 5, 0, 3, 0, 27, 0, 3, + 54, 62, 1, +/* GET UP */ + 22, 10, 5, + 4, 29, 8, 6, 0, 24, 0, 27, 0, 24, + 54, 62, 1, +/* OPEN COCK */ + 9, 19, 59, + 4, 14, 0, 28, + 129, 54, +/* TO TERM */ + 18, 37, 72, + 2, 27, 3, 51, 0, 9, 0, 51, + 1, 58, 53, +/* TO BATT */ + 23, 37, 26, + 2, 27, 3, 51, 0, 10, 0, 51, 0, 19, + 58, 53, 53, 1, +/* LOOK VAT */ + 7, 5, 80, + 4, 2, + 1, 2, 3, 8, +/* FUEL JUG */ + 4, 46, 73, + 1, 45, + 50, +/* FUEL CAR */ + 22, 46, 39, + 2, 27, 1, 46, 0, 8, 0, 46, 0, 45, + 58, 72, 1, +/* CLIM MOUN */ + 4, 34, 52, + 4, 22, + 50, +/* SAY ANY */ + 1, 80, 0, + 1, 85, +/* GO CAR */ + 9, 1, 39, + 2, 27, 0, 29, + 54, 1, +/* OPEN GLOV */ + 6, 19, 62, + 4, 29, + 3, 8, 20, +/* GET OUT */ + 6, 10, 89, + 8, 22, + 13, 46, 48, +/* GET OUT */ + 22, 10, 89, + 4, 29, 8, 4, 0, 19, 0, 27, 0, 19, + 54, 62, 1, +/* GET OUT */ + 22, 10, 89, + 4, 29, 8, 5, 0, 3, 0, 27, 0, 3, + 54, 62, 1, +/* GET OUT */ + 22, 10, 89, + 4, 29, 8, 6, 0, 24, 0, 27, 0, 24, + 54, 62, 1, +/* GO SHED */ + 8, 1, 58, + 4, 7, 0, 13, + 54, +/* GET LINE */ + 17, 10, 55, + 4, 23, 9, 23, 0, 36, 0, 37, + 52, 59, +/* PUSH LINE */ + 17, 66, 55, + 4, 23, 9, 23, 0, 36, 0, 37, + 52, 59, +/* GET LINE */ + 19, 10, 55, + 4, 23, 8, 23, 0, 37, 0, 36, + 55, 74, 67, 73, +/* AUTO 0 */ + 206, + 8, 0, 0, 23, 0, 23, + 68, 74, 60, +/* PUSH LINE */ + 23, 66, 55, + 4, 23, 8, 23, 0, 37, 0, 36, 0, 23, + 55, 74, 74, 73, +/* AUTO 0 */ + 199, + 0, 23, + 60, 1, 9, 21, +/* CLOS TOOL */ + 12, 35, 29, + 3, 20, 0, 20, 0, 7, + 72, +/* OPEN TOOL */ + 12, 19, 29, + 3, 7, 0, 7, 0, 20, + 72, +/* LOOK STAI */ + 23, 5, 12, + 4, 2, 6, 45, 14, 45, 3, 9, 0, 45, + 74, 2, 21, 132, +/* GO STAI */ + 8, 1, 12, + 4, 2, 0, 1, + 54, +/* LIGH FLAS */ + 9, 25, 46, + 8, 16, 3, 31, + 13, 25, +/* LIGH FLAS */ + 14, 25, 46, + 3, 31, 0, 9, 0, 31, + 72, 64, 1, +/* UNLI FLAS */ + 14, 15, 46, + 3, 9, 0, 9, 0, 31, + 72, 64, 1, +/* GET QUAR */ + 12, 10, 53, + 2, 38, 7, 23, 0, 38, + 52, +/* GET ENVE */ + 8, 10, 34, + 2, 33, 0, 33, + 52, +/* GO COCK */ + 8, 1, 59, + 4, 14, 0, 28, + 54, +/* SLEE ANY */ + 7, 21, 0, + 0, 35, + 54, 64, 19, 125, +/* LOOK ME */ + 2, 5, 93, + 1, 2, 133, +/* LOOK HOSE */ + 9, 5, 57, + 1, 40, 8, 20, + 2, 136, +/* LOOK HOSE */ + 9, 5, 57, + 1, 40, 9, 20, + 2, 137, +/* MAKE FUEL */ + 8, 55, 74, + 6, 41, 4, 2, + 138, +/* MAKE FUEL */ + 9, 55, 74, + 4, 2, 1, 9, + 21, 139, +/* PUT HOSE */ + 18, 43, 57, + 1, 40, 2, 27, 0, 21, 0, 40, + 1, 60, 59, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* CHAR BATT */ + 4, 42, 26, + 1, 19, + 50, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* GET LINE */ + 8, 10, 55, + 2, 36, 0, 36, + 52, +/* PUSH SWIT */ + 6, 66, 21, + 1, 30, + 1, 3, 20, +/* TRAN ANY */ + 255, 41, 0, + 4, 0, +/* PUSH CAR */ + 4, 66, 39, + 2, 27, + 40, +/* USE ANY */ + 1, 71, 0, + 119, 35, +/* SWIM ANY */ + 4, 57, 0, + 4, 21, + 1, +/* TO ANY */ + 0, 37, 0, + 33, +/* PUSH LINE */ + 9, 66, 55, + 2, 34, 9, 24, + 13, 42, +/* GET LINE */ + 9, 10, 55, + 2, 34, 9, 24, + 13, 42, +/* CUT LINE */ + 8, 27, 55, + 6, 23, 2, 34, + 40, +/* DIG ANY */ + 4, 84, 0, + 6, 23, + 40, +/* OPEN PIPE */ + 9, 19, 13, + 1, 28, 6, 21, + 13, 23, +/* LOOK ANY */ + 10, 5, 0, + 8, 15, 6, 9, + 13, 11, 30, +/* OPEN SAFE */ + 9, 19, 35, + 1, 21, 6, 28, + 13, 23, +/* LOOK ANY */ + 3, 5, 0, + 1, 2, 3, 8, +/* GET INVE */ + 0, 10, 27, + 66, +/* INVE ANY */ + 0, 62, 0, + 66, +/* QUIT ANY */ + 0, 22, 0, + 63, +/* SAVE GAME */ + 0, 17, 28, + 71, +/* HELP ANY */ + 0, 31, 0, + 36, +/* DIG ANY */ + 7, 84, 0, + 4, 20, + 1, 3, 8, 20, +/* AUTO 0 */ + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *RUN */ + 210, 85, 78, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *L */ + 204, 32, 32, 32, + /* *DESC */ + 196, 69, 83, 67, + /* *READ */ + 210, 69, 65, 68, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* *PICK */ + 208, 73, 67, 75, + /* *REMO */ + 210, 69, 77, 79, + /* UNLI */ + 85, 78, 76, 73, + /* */ + 32, 32, 32, 32, + /* SAVE */ + 83, 65, 86, 69, + /* DROP */ + 68, 82, 79, 80, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* SLEE */ + 83, 76, 69, 69, + /* QUIT */ + 81, 85, 73, 84, + /* CHEC */ + 67, 72, 69, 67, + /* *TEST */ + 212, 69, 83, 84, + /* LIGH */ + 76, 73, 71, 72, + /* *FLAS */ + 198, 76, 65, 83, + /* CUT */ + 67, 85, 84, 32, + /* *SLIC */ + 211, 76, 73, 67, + /* *HIT */ + 200, 73, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* HELP */ + 72, 69, 76, 80, + /* REPL */ + 82, 69, 80, 76, + /* *RECO */ + 210, 69, 67, 79, + /* CLIM */ + 67, 76, 73, 77, + /* CLOS */ + 67, 76, 79, 83, + /* TIE */ + 84, 73, 69, 32, + /* TO */ + 84, 79, 32, 32, + /* CONN */ + 67, 79, 78, 78, + /* *TAPE */ + 212, 65, 80, 69, + /* *ATTA */ + 193, 84, 84, 65, + /* TRAN */ + 84, 82, 65, 78, + /* CHAR */ + 67, 72, 65, 82, + /* PUT */ + 80, 85, 84, 32, + /* *INSE */ + 201, 78, 83, 69, + /* */ + 32, 32, 32, 32, + /* FUEL */ + 70, 85, 69, 76, + /* *REFU */ + 210, 69, 70, 85, + /* *FILL */ + 198, 73, 76, 76, + /* STAR */ + 83, 84, 65, 82, + /* PUMP */ + 80, 85, 77, 80, + /* FIND */ + 70, 73, 78, 68, + /* UNCO */ + 85, 78, 67, 79, + /* *DISC */ + 196, 73, 83, 67, + /* */ + 32, 32, 32, 32, + /* MAKE */ + 77, 65, 75, 69, + /* *MIX */ + 205, 73, 88, 32, + /* SWIM */ + 83, 87, 73, 77, + /* *WADE */ + 215, 65, 68, 69, + /* WASH */ + 87, 65, 83, 72, + /* *RINS */ + 210, 73, 78, 83, + /* *CLEA */ + 195, 76, 69, 65, + /* INVE */ + 73, 78, 86, 69, + /* CLIM */ + 67, 76, 73, 77, + /* THRO */ + 84, 72, 82, 79, + /* *CAST */ + 195, 65, 83, 84, + /* PUSH */ + 80, 85, 83, 72, + /* *PULL */ + 208, 85, 76, 76, + /* *PRES */ + 208, 82, 69, 83, + /* *FLIP */ + 198, 76, 73, 80, + /* *LIFT */ + 204, 73, 70, 84, + /* USE */ + 85, 83, 69, 32, + /* *WITH */ + 215, 73, 84, 72, + /* SLID */ + 83, 76, 73, 68, + /* *MOVE */ + 205, 79, 86, 69, + /* LAUG */ + 76, 65, 85, 71, + /* SING */ + 83, 73, 78, 71, + /* SMEL */ + 83, 77, 69, 76, + /* LIST */ + 76, 73, 83, 84, + /* SHAK */ + 83, 72, 65, 75, + /* SAY */ + 83, 65, 89, 32, + /* *YELL */ + 217, 69, 76, 76, + /* *SCRE */ + 211, 67, 82, 69, + /* *TALK */ + 212, 65, 76, 75, + /* DIG */ + 68, 73, 71, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* STAT */ + 83, 84, 65, 84, + /* BOOT */ + 66, 79, 79, 84, + /* *CASH */ + 195, 65, 83, 72, + /* YOYO */ + 89, 79, 89, 79, + /* *BUIL */ + 194, 85, 73, 76, + /* STAI */ + 83, 84, 65, 73, + /* PIPE */ + 80, 73, 80, 69, + /* *PADL */ + 208, 65, 68, 76, + /* HOUS */ + 72, 79, 85, 83, + /* HARD */ + 72, 65, 82, 68, + /* *STOR */ + 211, 84, 79, 82, + /* PUMP */ + 80, 85, 77, 80, + /* CONS */ + 67, 79, 78, 83, + /* STRE */ + 83, 84, 82, 69, + /* SWIT */ + 83, 87, 73, 84, + /* CORN */ + 67, 79, 82, 78, + /* PILE */ + 80, 73, 76, 69, + /* *TRAS */ + 212, 82, 65, 83, + /* TABL */ + 84, 65, 66, 76, + /* BATT */ + 66, 65, 84, 84, + /* INVE */ + 73, 78, 86, 69, + /* GAME */ + 71, 65, 77, 69, + /* TOOL */ + 84, 79, 79, 76, + /* *BOX */ + 194, 79, 88, 32, + /* KEY */ + 75, 69, 89, 32, + /* DUCT */ + 68, 85, 67, 84, + /* *TAPE */ + 212, 65, 80, 69, + /* ENVE */ + 69, 78, 86, 69, + /* SAFE */ + 83, 65, 70, 69, + /* HYDR */ + 72, 89, 68, 82, + /* ROOM */ + 82, 79, 79, 77, + /* PUMP */ + 80, 85, 77, 80, + /* CAR */ + 67, 65, 82, 32, + /* *JET */ + 202, 69, 84, 32, + /* *TANK */ + 212, 65, 78, 75, + /* SHAC */ + 83, 72, 65, 67, + /* RADI */ + 82, 65, 68, 73, + /* ON */ + 79, 78, 32, 32, + /* OFF */ + 79, 70, 70, 32, + /* FLAS */ + 70, 76, 65, 83, + /* *LIGH */ + 204, 73, 71, 72, + /* BOMB */ + 66, 79, 77, 66, + /* *CANI */ + 195, 65, 78, 73, + /* PAPE */ + 80, 65, 80, 69, + /* PICK */ + 80, 73, 67, 75, + /* MOUN */ + 77, 79, 85, 78, + /* QUAR */ + 81, 85, 65, 82, + /* HOLE */ + 72, 79, 76, 69, + /* LINE */ + 76, 73, 78, 69, + /* *PHON */ + 208, 72, 79, 78, + /* HOSE */ + 72, 79, 83, 69, + /* SHED */ + 83, 72, 69, 68, + /* COCK */ + 67, 79, 67, 75, + /* *WIND */ + 215, 73, 78, 68, + /* *DOOR */ + 196, 79, 79, 82, + /* GLOV */ + 71, 76, 79, 86, + /* *COMP */ + 195, 79, 77, 80, + /* DASH */ + 68, 65, 83, 72, + /* FORM */ + 70, 79, 82, 77, + /* ANTE */ + 65, 78, 84, 69, + /* *LEAD */ + 204, 69, 65, 68, + /* TUNE */ + 84, 85, 78, 69, + /* *DIAL */ + 196, 73, 65, 76, + /* WARF */ + 87, 65, 82, 70, + /* GAS */ + 71, 65, 83, 32, + /* TERM */ + 84, 69, 82, 77, + /* JUG */ + 74, 85, 71, 32, + /* FUEL */ + 70, 85, 69, 76, + /* CABL */ + 67, 65, 66, 76, + /* SAND */ + 83, 65, 78, 68, + /* JAR */ + 74, 65, 82, 32, + /* *FLUI */ + 198, 76, 85, 73, + /* BUTT */ + 66, 85, 84, 84, + /* VAT */ + 86, 65, 84, 32, + /* MINE */ + 77, 73, 78, 69, + /* *SHAF */ + 211, 72, 65, 70, + /* */ + 32, 32, 32, 32, + /* *STON */ + 211, 84, 79, 78, + /* OFFI */ + 79, 70, 70, 73, + /* TANK */ + 84, 65, 78, 75, + /* FEET */ + 70, 69, 69, 84, + /* HAND */ + 72, 65, 78, 68, + /* OUT */ + 79, 85, 84, 32, + /* BASE */ + 66, 65, 83, 69, + /* LABO */ + 76, 65, 66, 79, + /* ENGI */ + 69, 78, 71, 73, + /* ME */ + 77, 69, 32, 32, + /* *MYSE */ + 205, 89, 83, 69, + /* GRAS */ + 71, 82, 65, 83, + /* FIEL */ + 70, 73, 69, 76, + /* HIGH */ + 72, 73, 71, 72, + /* LOT */ + 76, 79, 84, 32, + /* LEDG */ + 76, 69, 68, 71, + /* LAKE */ + 76, 65, 75, 69, + /* BEAC */ + 66, 69, 65, 67, + /* CODE */ + 67, 79, 68, 69, + /* *MESS */ + 205, 69, 83, 83, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* TOOL */ + 84, 79, 79, 76, + 7, + /* FLAS */ + 70, 76, 65, 83, + 9, + /* BATT */ + 66, 65, 84, 84, + 19, + /* TOOL */ + 84, 79, 79, 76, + 20, + /* KEY */ + 75, 69, 89, 32, + 21, + /* DUCT */ + 68, 85, 67, 84, + 22, + /* PICK */ + 80, 73, 67, 75, + 23, + /* HYDR */ + 72, 89, 68, 82, + 25, + /* PUMP */ + 80, 85, 77, 80, + 26, + /* KEY */ + 75, 69, 89, 32, + 28, + /* RADI */ + 82, 65, 68, 73, + 30, + /* FLAS */ + 70, 76, 65, 83, + 31, + /* ENVE */ + 69, 78, 86, 69, + 33, + /* LINE */ + 76, 73, 78, 69, + 36, + /* QUAR */ + 81, 85, 65, 82, + 38, + /* PAPE */ + 80, 65, 80, 69, + 39, + /* HOSE */ + 72, 79, 83, 69, + 40, + /* FORM */ + 70, 79, 82, 77, + 41, + /* BATT */ + 66, 65, 84, 84, + 44, + /* JUG */ + 74, 85, 71, 32, + 45, + /* JUG */ + 74, 85, 71, 32, + 46, + /* SAND */ + 83, 65, 78, 68, + 48, + /* JAR */ + 74, 65, 82, 32, + 49, + /* JUG */ + 74, 85, 71, 32, + 50, + /* CABL */ + 67, 65, 66, 76, + 51, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst01.c b/Applications/games/myst01.c new file mode 100644 index 00000000..7593178e --- /dev/null +++ b/Applications/games/myst01.c @@ -0,0 +1,2856 @@ +#define NUM_OBJ 48 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 200; +const uint8_t lightfill = 200; +const uint8_t startcarried = 1; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 31; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +40, 67, 41, 32, 49, 57, 56, 50, 32, 66, 46, 72, 46, 0 }; +const uint8_t loctxt_1[] = { +100, 101, 110, 115, 101, 32, 83, 80, 79, 79, 75, 89, 32, 70, 111, 114, 101, 115, 116, 0 }; +const uint8_t loctxt_2[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 83, 116, 114, 101, 97, 109, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 84, 114, 101, 101, 0 }; +const uint8_t loctxt_4[] = { +116, 97, 110, 103, 108, 101, 32, 111, 102, 32, 80, 82, 73, 67, 75, 76, 89, 32, 66, 114, 105, 97, 114, 115, 0 }; +const uint8_t loctxt_5[] = { +99, 108, 101, 97, 114, 105, 110, 103, 32, 98, 121, 32, 97, 32, 67, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 70, 111, 114, 101, 115, 116, 32, 114, 111, 97, 100, 0 }; +const uint8_t loctxt_8[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 70, 111, 114, 101, 115, 116, 32, 114, 111, 97, 100, 0 }; +const uint8_t loctxt_9[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 80, 111, 110, 100, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 67, 97, 115, 116, 108, 101, 32, 77, 111, 97, 116, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 80, 111, 114, 116, 99, 117, 108, 108, 105, 115, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 97, 116, 111, 112, 32, 116, 104, 101, 32, 66, 97, 116, 116, 108, 101, 109, 101, 110, 116, 115, 0 }; +const uint8_t loctxt_13[] = { +67, 111, 117, 114, 116, 121, 97, 114, 100, 46, 32, 73, 32, 115, 101, 101, 32, 97, 110, 32, 65, 114, 99, 104, 119, 97, 121, 0 }; +const uint8_t loctxt_14[] = { +83, 116, 114, 97, 119, 32, 115, 116, 114, 101, 119, 110, 32, 115, 104, 101, 100, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 72, 117, 103, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t loctxt_16[] = { +100, 101, 114, 101, 108, 105, 99, 116, 32, 83, 116, 97, 98, 108, 101, 0 }; +const uint8_t loctxt_17[] = { +114, 111, 111, 109, 32, 98, 101, 102, 111, 114, 101, 32, 97, 110, 32, 111, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t loctxt_18[] = { +84, 111, 114, 116, 117, 114, 101, 32, 67, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_19[] = { +67, 97, 98, 105, 110, 32, 119, 105, 116, 104, 32, 104, 111, 108, 101, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t loctxt_20[] = { +67, 97, 118, 101, 0 }; +const uint8_t loctxt_21[] = { +67, 97, 118, 101, 0 }; +const uint8_t loctxt_22[] = { +67, 97, 118, 101, 32, 98, 101, 102, 111, 114, 101, 32, 97, 32, 112, 97, 100, 108, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t loctxt_23[] = { +83, 116, 111, 114, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_24[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 118, 97, 115, 116, 32, 76, 97, 107, 101, 0 }; +const uint8_t loctxt_25[] = { +42, 73, 39, 109, 32, 115, 97, 105, 108, 105, 110, 103, 32, 116, 104, 101, 32, 76, 97, 107, 101, 0 }; +const uint8_t loctxt_26[] = { +77, 97, 105, 100, 39, 115, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_27[] = { +83, 111, 114, 99, 101, 114, 101, 114, 39, 115, 32, 119, 111, 114, 107, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_28[] = { +98, 97, 114, 101, 32, 115, 108, 105, 109, 121, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_29[] = { +99, 111, 108, 100, 32, 114, 111, 111, 109, 32, 102, 117, 108, 108, 32, 111, 102, 32, 83, 116, 97, 116, 117, 101, 115, 0 }; +const uint8_t loctxt_30[] = { +84, 114, 101, 101, 0 }; +const uint8_t loctxt_31[] = { +77, 69, 83, 83, 33, 33, 32, 32, 73, 39, 109, 32, 68, 69, 65, 68, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 2, 4, 0, 0, 0, 0 } }, + { loctxt_2, { 6, 1, 0, 3, 0, 0 } }, + { loctxt_3, { 5, 0, 2, 0, 0, 0 } }, + { loctxt_4, { 1, 0, 0, 0, 0, 0 } }, + { loctxt_5, { 0, 3, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 2, 0, 0, 0, 0 } }, + { loctxt_7, { 8, 6, 0, 0, 0, 0 } }, + { loctxt_8, { 9, 7, 0, 0, 0, 0 } }, + { loctxt_9, { 10, 8, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 9, 0, 0, 0, 0 } }, + { loctxt_11, { 0, 10, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 11, 0, 0, 0, 13 } }, + { loctxt_13, { 0, 0, 0, 0, 12, 0 } }, + { loctxt_14, { 0, 0, 15, 0, 0, 0 } }, + { loctxt_15, { 0, 13, 16, 14, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 15, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 0, 14, 0 } }, + { loctxt_18, { 26, 27, 0, 17, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 5, 0, 20 } }, + { loctxt_20, { 24, 22, 0, 0, 19, 0 } }, + { loctxt_21, { 20, 0, 0, 0, 0, 0 } }, + { loctxt_22, { 21, 0, 0, 0, 0, 0 } }, + { loctxt_23, { 22, 0, 0, 0, 0, 0 } }, + { loctxt_24, { 0, 20, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_26, { 0, 18, 0, 0, 0, 0 } }, + { loctxt_27, { 18, 0, 28, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 27, 0, 0 } }, + { loctxt_29, { 0, 15, 0, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 3 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 1, + 19, + 18, + 0, + 0, + 24, + 16, + 23, + 0, + 0, + 0, + 29, + 13, + 7, + 16, + 0, + 27, + 26, + 1, + 0, + 0, + 255, + 0, + 0, + 14, + 6, + 21, + 29, + 28, + 19, + 22, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +83, 104, 105, 110, 121, 32, 83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_1[] = { +79, 108, 100, 32, 67, 108, 111, 97, 107, 0 }; +const uint8_t objtxt_2[] = { +66, 97, 114, 114, 101, 108, 0 }; +const uint8_t objtxt_3[] = { +72, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_4[] = { +83, 97, 108, 116, 0 }; +const uint8_t objtxt_5[] = { +75, 101, 121, 0 }; +const uint8_t objtxt_6[] = { +72, 117, 103, 101, 32, 121, 101, 108, 108, 111, 119, 32, 67, 114, 97, 98, 0 }; +const uint8_t objtxt_7[] = { +72, 117, 110, 116, 105, 110, 103, 32, 72, 111, 114, 110, 0 }; +const uint8_t objtxt_8[] = { +82, 97, 102, 116, 0 }; +const uint8_t objtxt_9[] = { +76, 73, 84, 32, 79, 105, 108, 32, 76, 97, 109, 112, 0 }; +const uint8_t objtxt_10[] = { +74, 101, 119, 101, 108, 108, 101, 100, 32, 75, 110, 105, 102, 101, 0 }; +const uint8_t objtxt_11[] = { +71, 79, 76, 68, 69, 78, 32, 66, 65, 84, 79, 78, 0 }; +const uint8_t objtxt_12[] = { +80, 97, 114, 99, 104, 109, 101, 110, 116, 0 }; +const uint8_t objtxt_13[] = { +75, 110, 105, 103, 104, 116, 32, 105, 110, 32, 100, 97, 114, 107, 32, 65, 114, 109, 111, 117, 114, 0 }; +const uint8_t objtxt_14[] = { +87, 111, 111, 100, 101, 110, 32, 83, 116, 97, 102, 102, 0 }; +const uint8_t objtxt_15[] = { +79, 108, 100, 32, 72, 101, 108, 109, 101, 116, 0 }; +const uint8_t objtxt_16[] = { +71, 111, 108, 100, 101, 110, 32, 82, 105, 110, 103, 0 }; +const uint8_t objtxt_17[] = { +71, 76, 79, 87, 73, 78, 71, 32, 81, 117, 97, 114, 116, 122, 0 }; +const uint8_t objtxt_18[] = { +77, 105, 114, 114, 111, 114, 0 }; +const uint8_t objtxt_19[] = { +82, 111, 116, 116, 105, 110, 103, 32, 108, 101, 97, 118, 101, 115, 0 }; +const uint8_t objtxt_20[] = { +80, 111, 111, 108, 32, 111, 102, 32, 79, 105, 108, 0 }; +const uint8_t objtxt_21[] = { +72, 111, 108, 101, 32, 105, 110, 32, 70, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_22[] = { +77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_23[] = { +87, 69, 84, 32, 77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_24[] = { +67, 111, 105, 108, 32, 111, 102, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_25[] = { +79, 105, 108, 32, 76, 97, 109, 112, 0 }; +const uint8_t objtxt_26[] = { +83, 97, 118, 97, 103, 101, 32, 87, 111, 108, 102, 0 }; +const uint8_t objtxt_27[] = { +72, 117, 103, 101, 32, 83, 108, 117, 103, 115, 0 }; +const uint8_t objtxt_28[] = { +72, 105, 100, 101, 111, 117, 115, 32, 71, 111, 114, 103, 111, 110, 0 }; +const uint8_t objtxt_29[] = { +85, 103, 108, 121, 32, 76, 105, 122, 97, 114, 100, 45, 109, 97, 110, 0 }; +const uint8_t objtxt_30[] = { +79, 105, 108, 32, 115, 111, 100, 100, 101, 110, 32, 82, 97, 103, 0 }; +const uint8_t objtxt_31[] = { +80, 97, 100, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_32[] = { +66, 114, 111, 107, 101, 110, 32, 80, 97, 100, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_33[] = { +68, 114, 121, 32, 82, 97, 103, 0 }; +const uint8_t objtxt_34[] = { +67, 108, 111, 97, 107, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_35[] = { +72, 101, 108, 109, 101, 116, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_36[] = { +82, 105, 110, 103, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_37[] = { +76, 117, 109, 112, 32, 111, 102, 32, 81, 117, 97, 114, 116, 122, 0 }; +const uint8_t objtxt_38[] = { +72, 97, 110, 103, 105, 110, 103, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_39[] = { +69, 109, 112, 116, 121, 32, 76, 97, 109, 112, 0 }; +const uint8_t objtxt_40[] = { +68, 101, 97, 100, 32, 87, 111, 108, 102, 0 }; +const uint8_t objtxt_41[] = { +83, 97, 108, 116, 101, 100, 32, 83, 108, 117, 103, 115, 0 }; +const uint8_t objtxt_42[] = { +71, 111, 114, 103, 111, 110, 32, 40, 115, 116, 111, 110, 101, 41, 0 }; +const uint8_t objtxt_43[] = { +68, 101, 97, 100, 32, 76, 105, 122, 97, 114, 100, 45, 109, 97, 110, 0 }; +const uint8_t objtxt_44[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_45[] = { +32, 0 }; +const uint8_t objtxt_46[] = { +72, 111, 108, 108, 111, 119, 32, 105, 110, 32, 84, 114, 117, 110, 107, 0 }; +const uint8_t objtxt_47[] = { +72, 111, 108, 101, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_48[] = { +71, 114, 97, 105, 110, 115, 32, 111, 102, 32, 83, 97, 108, 116, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, +}; +const uint8_t msgtxt_0[] = { +32, 0 }; +const uint8_t msgtxt_1[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 77, 89, 83, 84, 69, 82, 73, 79, 85, 83, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 83, 0 }; +const uint8_t msgtxt_2[] = { +80, 114, 101, 112, 97, 114, 101, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 102, 111, 114, 32, 97, 110, 121, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_3[] = { +84, 104, 105, 115, 32, 105, 115, 39, 110, 116, 32, 97, 32, 70, 111, 111, 116, 98, 97, 108, 108, 32, 71, 97, 109, 101, 0 }; +const uint8_t msgtxt_4[] = { +84, 114, 121, 32, 69, 88, 65, 77, 105, 110, 105, 110, 103, 32, 116, 104, 105, 110, 103, 115, 46, 46, 0 }; +const uint8_t msgtxt_5[] = { +67, 114, 97, 98, 32, 101, 97, 116, 115, 32, 83, 108, 117, 103, 115, 32, 116, 104, 101, 110, 32, 105, 103, 110, 111, 114, 101, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_6[] = { +72, 101, 39, 115, 32, 101, 97, 116, 101, 110, 33, 0 }; +const uint8_t msgtxt_7[] = { +73, 116, 39, 115, 32, 116, 114, 111, 100, 100, 101, 110, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 33, 0 }; +const uint8_t msgtxt_8[] = { +72, 101, 32, 111, 110, 108, 121, 32, 119, 97, 110, 116, 115, 32, 116, 111, 32, 101, 97, 116, 32, 77, 69, 33, 0 }; +const uint8_t msgtxt_9[] = { +67, 114, 97, 98, 115, 32, 108, 105, 107, 101, 32, 83, 97, 108, 116, 101, 100, 32, 83, 108, 117, 103, 115, 0 }; +const uint8_t msgtxt_10[] = { +84, 104, 101, 32, 67, 114, 97, 98, 32, 115, 116, 111, 112, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_11[] = { +73, 32, 110, 101, 101, 100, 32, 97, 32, 115, 104, 97, 114, 112, 32, 111, 98, 106, 101, 99, 116, 0 }; +const uint8_t msgtxt_12[] = { +73, 32, 110, 101, 101, 100, 32, 77, 97, 103, 105, 99, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_13[] = { +83, 109, 97, 115, 104, 32, 116, 104, 101, 32, 76, 111, 99, 107, 33, 0 }; +const uint8_t msgtxt_14[] = { +84, 114, 121, 32, 116, 104, 101, 32, 80, 97, 114, 99, 104, 109, 101, 110, 116, 0 }; +const uint8_t msgtxt_15[] = { +77, 97, 121, 98, 101, 32, 116, 104, 101, 32, 67, 114, 97, 98, 32, 105, 115, 32, 104, 117, 110, 103, 114, 121, 0 }; +const uint8_t msgtxt_16[] = { +84, 104, 101, 32, 81, 117, 97, 114, 116, 122, 32, 109, 97, 121, 32, 98, 101, 32, 111, 102, 32, 117, 115, 101, 0 }; +const uint8_t msgtxt_17[] = { +72, 111, 108, 100, 32, 105, 116, 33, 32, 65, 32, 77, 105, 114, 114, 111, 114, 32, 116, 104, 97, 116, 32, 105, 115, 33, 0 }; +const uint8_t msgtxt_18[] = { +84, 114, 121, 32, 71, 101, 115, 116, 117, 114, 101, 115, 32, 97, 110, 100, 32, 77, 97, 103, 105, 99, 0 }; +const uint8_t msgtxt_19[] = { +87, 101, 97, 114, 32, 116, 104, 101, 32, 72, 101, 108, 109, 101, 116, 0 }; +const uint8_t msgtxt_20[] = { +73, 116, 39, 115, 32, 108, 111, 99, 107, 101, 100, 33, 0 }; +const uint8_t msgtxt_21[] = { +73, 116, 39, 115, 32, 111, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_22[] = { +32, 0 }; +const uint8_t msgtxt_23[] = { +84, 104, 101, 32, 72, 97, 110, 100, 32, 115, 116, 111, 112, 115, 32, 109, 111, 118, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_24[] = { +73, 32, 115, 101, 101, 32, 119, 114, 105, 116, 105, 110, 103, 0 }; +const uint8_t msgtxt_25[] = { +84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 82, 117, 110, 101, 115, 32, 111, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_26[] = { +32, 0 }; +const uint8_t msgtxt_27[] = { +73, 32, 115, 101, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_28[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_29[] = { +76, 105, 122, 97, 114, 100, 45, 109, 97, 110, 32, 115, 116, 97, 98, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_30[] = { +77, 97, 116, 99, 104, 101, 115, 32, 97, 114, 101, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 77, 111, 97, 116, 0 }; +const uint8_t msgtxt_31[] = { +73, 116, 32, 99, 97, 116, 99, 104, 101, 115, 33, 32, 73, 116, 39, 115, 32, 115, 101, 99, 117, 114, 101, 0 }; +const uint8_t msgtxt_32[] = { +76, 97, 109, 112, 32, 105, 115, 32, 110, 111, 119, 32, 76, 73, 84, 0 }; +const uint8_t msgtxt_33[] = { +78, 111, 116, 104, 105, 110, 103, 32, 116, 111, 32, 108, 105, 103, 104, 116, 32, 105, 116, 32, 119, 105, 116, 104, 0 }; +const uint8_t msgtxt_34[] = { +32, 0 }; +const uint8_t msgtxt_35[] = { +73, 116, 39, 115, 32, 76, 73, 84, 33, 0 }; +const uint8_t msgtxt_36[] = { +87, 105, 116, 104, 32, 87, 69, 84, 32, 77, 97, 116, 99, 104, 101, 115, 32, 63, 0 }; +const uint8_t msgtxt_37[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 108, 111, 99, 107, 101, 100, 33, 0 }; +const uint8_t msgtxt_38[] = { +76, 111, 99, 107, 32, 105, 115, 32, 116, 111, 111, 32, 114, 117, 115, 116, 121, 0 }; +const uint8_t msgtxt_39[] = { +73, 39, 118, 101, 32, 110, 111, 32, 107, 101, 121, 0 }; +const uint8_t msgtxt_40[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 108, 105, 116, 33, 0 }; +const uint8_t msgtxt_41[] = { +81, 117, 97, 114, 116, 122, 32, 103, 108, 111, 119, 115, 32, 102, 105, 101, 114, 99, 101, 108, 121, 0 }; +const uint8_t msgtxt_42[] = { +84, 104, 101, 32, 100, 105, 109, 115, 32, 97, 103, 97, 105, 110, 33, 0 }; +const uint8_t msgtxt_43[] = { +32, 0 }; +const uint8_t msgtxt_44[] = { +32, 0 }; +const uint8_t msgtxt_45[] = { +82, 117, 110, 101, 115, 32, 115, 97, 121, 46, 46, 77, 97, 103, 105, 99, 32, 119, 111, 114, 100, 32, 65, 75, 89, 82, 90, 0 }; +const uint8_t msgtxt_46[] = { +82, 117, 110, 101, 115, 32, 97, 114, 101, 32, 117, 110, 114, 101, 97, 100, 97, 98, 108, 101, 0 }; +const uint8_t msgtxt_47[] = { +83, 65, 73, 76, 32, 76, 65, 75, 69, 46, 46, 66, 76, 79, 87, 32, 72, 79, 82, 78, 46, 46, 84, 72, 82, 46, 46, 84, 104, 97, 116, 115, 32, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_48[] = { +32, 0 }; +const uint8_t msgtxt_49[] = { +70, 117, 116, 105, 108, 101, 33, 0 }; +const uint8_t msgtxt_50[] = { +32, 0 }; +const uint8_t msgtxt_51[] = { +87, 105, 116, 104, 32, 98, 97, 114, 101, 32, 104, 97, 110, 100, 115, 32, 63, 0 }; +const uint8_t msgtxt_52[] = { +32, 0 }; +const uint8_t msgtxt_53[] = { +32, 0 }; +const uint8_t msgtxt_54[] = { +67, 108, 105, 109, 98, 105, 110, 103, 32, 97, 32, 99, 111, 105, 108, 32, 111, 102, 32, 114, 111, 112, 101, 32, 105, 115, 32, 100, 105, 102, 102, 105, 99, 117, 108, 116, 33, 0 }; +const uint8_t msgtxt_55[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_56[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 105, 115, 32, 104, 97, 112, 112, 101, 110, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_57[] = { +81, 117, 97, 114, 116, 122, 32, 101, 109, 105, 116, 115, 32, 97, 32, 100, 97, 122, 122, 108, 105, 110, 103, 32, 98, 101, 97, 109, 33, 0 }; +const uint8_t msgtxt_58[] = { +73, 116, 32, 104, 105, 116, 115, 32, 116, 104, 101, 32, 76, 105, 122, 97, 114, 100, 45, 109, 97, 110, 0 }; +const uint8_t msgtxt_59[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_60[] = { +73, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 107, 105, 108, 108, 32, 104, 105, 109, 32, 111, 110, 99, 101, 33, 0 }; +const uint8_t msgtxt_61[] = { +84, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 72, 101, 97, 114, 116, 33, 0 }; +const uint8_t msgtxt_62[] = { +87, 105, 116, 104, 32, 98, 97, 114, 101, 32, 104, 97, 110, 100, 115, 32, 63, 0 }; +const uint8_t msgtxt_63[] = { +87, 104, 121, 32, 100, 111, 32, 116, 104, 97, 116, 32, 63, 0 }; +const uint8_t msgtxt_64[] = { +73, 32, 110, 101, 101, 100, 32, 79, 73, 76, 0 }; +const uint8_t msgtxt_65[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 101, 109, 112, 116, 121, 33, 0 }; +const uint8_t msgtxt_66[] = { +73, 39, 109, 32, 110, 111, 32, 65, 114, 115, 111, 110, 105, 115, 116, 33, 0 }; +const uint8_t msgtxt_67[] = { +84, 104, 101, 32, 83, 108, 117, 103, 115, 32, 115, 104, 114, 105, 118, 101, 108, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_68[] = { +72, 97, 110, 100, 32, 109, 111, 118, 101, 115, 32, 97, 119, 97, 121, 33, 0 }; +const uint8_t msgtxt_69[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_70[] = { +79, 85, 67, 72, 33, 32, 84, 104, 97, 116, 32, 119, 97, 115, 32, 72, 79, 84, 33, 0 }; +const uint8_t msgtxt_71[] = { +84, 114, 121, 32, 101, 120, 112, 108, 111, 114, 105, 110, 103, 0 }; +const uint8_t msgtxt_72[] = { +79, 105, 108, 32, 102, 108, 97, 114, 101, 115, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_73[] = { +82, 97, 103, 32, 105, 115, 32, 116, 111, 111, 32, 100, 114, 121, 33, 0 }; +const uint8_t msgtxt_74[] = { +65, 108, 108, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 70, 108, 111, 111, 114, 33, 0 }; +const uint8_t msgtxt_75[] = { +76, 97, 109, 112, 32, 105, 115, 32, 110, 111, 119, 32, 102, 117, 108, 108, 0 }; +const uint8_t msgtxt_76[] = { +32, 0 }; +const uint8_t msgtxt_77[] = { +65, 32, 107, 101, 121, 32, 77, 97, 116, 101, 114, 105, 97, 108, 105, 115, 101, 115, 33, 0 }; +const uint8_t msgtxt_78[] = { +84, 104, 101, 32, 119, 97, 116, 101, 114, 115, 32, 114, 105, 112, 112, 108, 101, 33, 0 }; +const uint8_t msgtxt_79[] = { +65, 32, 72, 97, 110, 100, 32, 114, 105, 115, 101, 115, 33, 0 }; +const uint8_t msgtxt_80[] = { +73, 116, 39, 115, 32, 105, 109, 112, 111, 115, 115, 105, 98, 108, 101, 0 }; +const uint8_t msgtxt_81[] = { +73, 116, 39, 115, 32, 116, 111, 111, 32, 115, 109, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_82[] = { +65, 32, 71, 101, 110, 105, 101, 32, 97, 112, 112, 101, 97, 114, 115, 46, 46, 119, 97, 118, 101, 115, 32, 104, 105, 115, 32, 104, 97, 110, 100, 0 }; +const uint8_t msgtxt_83[] = { +32, 0 }; +const uint8_t msgtxt_84[] = { +83, 97, 121, 115, 32, 77, 97, 116, 99, 104, 101, 115, 32, 97, 114, 101, 32, 100, 114, 121, 32, 116, 104, 101, 110, 32, 118, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_85[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_86[] = { +71, 111, 114, 103, 111, 110, 39, 115, 32, 115, 116, 97, 114, 101, 32, 116, 117, 114, 110, 115, 32, 109, 101, 32, 116, 111, 32, 115, 116, 111, 110, 101, 33, 0 }; +const uint8_t msgtxt_87[] = { +87, 69, 76, 76, 32, 68, 79, 78, 69, 33, 32, 89, 111, 117, 32, 104, 97, 118, 101, 32, 115, 117, 99, 99, 101, 101, 100, 101, 100, 33, 0 }; +const uint8_t msgtxt_88[] = { +89, 111, 117, 32, 97, 114, 101, 32, 97, 32, 72, 101, 114, 111, 33, 0 }; +const uint8_t msgtxt_89[] = { +87, 111, 108, 102, 32, 115, 116, 111, 112, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_90[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 72, 111, 108, 108, 111, 119, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_91[] = { +76, 97, 109, 112, 32, 105, 115, 32, 110, 111, 119, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_92[] = { +73, 32, 99, 97, 110, 39, 116, 32, 101, 118, 101, 110, 32, 116, 111, 117, 99, 104, 32, 104, 105, 109, 33, 0 }; +const uint8_t msgtxt_93[] = { +68, 111, 111, 114, 32, 99, 114, 101, 97, 107, 115, 32, 111, 112, 101, 110, 46, 46, 0 }; +const uint8_t msgtxt_94[] = { +68, 111, 111, 114, 32, 105, 115, 32, 110, 111, 119, 32, 117, 110, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_95[] = { +75, 110, 105, 103, 104, 116, 32, 115, 116, 111, 112, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_96[] = { +72, 109, 109, 46, 46, 78, 105, 99, 101, 32, 109, 101, 108, 108, 111, 119, 32, 115, 111, 117, 110, 100, 33, 0 }; +const uint8_t msgtxt_97[] = { +72, 111, 119, 32, 114, 101, 118, 111, 108, 116, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_98[] = { +71, 111, 32, 119, 97, 115, 104, 32, 121, 111, 117, 114, 32, 109, 111, 117, 116, 104, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_99[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, + msgtxt_97, + msgtxt_98, + msgtxt_99, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 171, + 9, 1, 0, 1, + 58, 1, 86, 2, +/* AUTO 100 */ + 175, + 4, 29, 9, 2, 2, 28, + 64, 88, 136, 61, +/* AUTO 100 */ + 165, + 4, 20, + 56, 64, +/* AUTO 100 */ + 165, + 4, 17, + 56, 64, +/* AUTO 100 */ + 165, + 4, 19, + 57, 64, +/* AUTO 100 */ + 165, + 4, 14, + 57, 64, +/* AUTO 100 */ + 165, + 4, 24, + 57, 64, +/* AUTO 100 */ + 166, + 1, 11, + 137, 138, 63, +/* AUTO 100 */ + 183, + 4, 29, 8, 2, 2, 28, 0, 28, 0, 42, + 88, 149, 59, 53, +/* AUTO 100 */ + 177, + 8, 16, 9, 11, 0, 39, 0, 11, + 53, 58, +/* AUTO 100 */ + 169, + 1, 17, 0, 17, + 120, 53, +/* AUTO 100 */ + 178, + 4, 24, 2, 41, 0, 7, 0, 41, + 58, 59, 5, +/* AUTO 100 */ + 164, + 4, 31, + 63, +}; +const uint8_t actions[] = { +/* GO CABI */ + 9, 1, 41, + 4, 5, 0, 19, + 54, 64, +/* GO ARCH */ + 12, 1, 65, + 4, 13, 1, 34, 0, 15, + 54, +/* GO ARCH */ + 8, 1, 65, + 4, 13, 6, 34, + 145, +/* LIGH LAMP */ + 17, 26, 16, + 3, 25, 1, 22, 0, 9, 0, 25, + 72, 32, +/* LIGH LAMP */ + 8, 26, 16, + 3, 25, 6, 22, + 33, +/* LIGH LAMP */ + 8, 26, 16, + 3, 25, 1, 23, + 36, +/* LOOK STRA */ + 17, 15, 66, + 4, 14, 14, 47, 0, 47, 0, 14, + 62, 27, +/* GO HOLE */ + 12, 1, 26, + 4, 14, 2, 47, 0, 17, + 54, +/* UNLI LAMP */ + 15, 28, 16, + 1, 9, 0, 9, 0, 25, + 72, 109, 141, 64, +/* LIGH LAMP */ + 4, 26, 16, + 3, 9, + 35, +/* UNLI LAMP */ + 8, 28, 16, + 6, 9, 6, 22, + 40, +/* SQUE RAG */ + 14, 3, 33, + 1, 30, 9, 16, 2, 9, + 122, 61, 64, +/* SQUE RAG */ + 18, 3, 33, + 2, 39, 1, 30, 0, 33, 0, 30, + 72, 125, 73, +/* AUTO 0 */ + 206, + 0, 39, 0, 25, 0, 9, + 72, 69, 59, +/* SQUE RAG */ + 18, 3, 33, + 1, 30, 0, 33, 0, 30, 0, 20, + 72, 53, 124, +/* READ RING */ + 8, 33, 22, + 1, 16, 1, 35, + 45, +/* READ RING */ + 4, 33, 22, + 1, 36, + 119, +/* REMO RING */ + 13, 50, 22, + 1, 36, 0, 36, 0, 16, + 109, 72, +/* REMO CLOA */ + 13, 50, 8, + 1, 34, 0, 34, 0, 1, + 109, 72, +/* REMO HELM */ + 13, 50, 76, + 1, 35, 0, 35, 0, 15, + 109, 72, +/* KILL WOLF */ + 8, 44, 29, + 2, 26, 6, 0, + 112, +/* FEED WOLF */ + 4, 9, 29, + 2, 26, + 8, +/* GO DOOR */ + 10, 1, 56, + 4, 17, 0, 18, + 54, 64, 56, +/* WEAR RING */ + 13, 48, 22, + 1, 16, 0, 16, 0, 36, + 109, 72, +/* READ RING */ + 8, 33, 22, + 1, 16, 6, 35, + 46, +/* WEAR HELM */ + 13, 48, 76, + 1, 15, 0, 15, 0, 35, + 109, 72, +/* READ PARC */ + 4, 33, 19, + 1, 12, + 47, +/* LOOK BARR */ + 21, 15, 9, + 3, 2, 14, 4, 14, 48, 13, 27, 0, 4, + 27, 53, +/* LOOK RING */ + 4, 15, 22, + 1, 16, + 25, +/* HOLD MIRR */ + 9, 52, 24, + 1, 18, 0, 2, + 109, 58, +/* LOOK LEAV */ + 13, 15, 61, + 4, 1, 14, 0, 14, 45, + 27, 53, +/* GO PATH */ + 8, 1, 44, + 4, 6, 2, 26, + 139, +/* GO PATH */ + 9, 1, 44, + 4, 6, 0, 7, + 54, 109, +/* KILL WOLF */ + 17, 44, 29, + 2, 26, 1, 0, 0, 26, 0, 40, + 72, 111, +/* WEAR CLOA */ + 18, 48, 8, + 3, 1, 0, 1, 0, 34, 0, 34, + 72, 74, 109, +/* THRO ROPE */ + 22, 22, 28, + 4, 3, 1, 24, 0, 24, 0, 38, 0, 38, + 31, 72, 53, +/* THRO ROPE */ + 22, 22, 28, + 4, 11, 1, 24, 0, 24, 0, 38, 0, 38, + 31, 72, 53, +/* CLIM ROPE */ + 14, 38, 28, + 4, 3, 3, 38, 0, 30, + 54, 64, 140, +/* CLIM ROPE */ + 13, 38, 28, + 4, 11, 3, 38, 0, 12, + 54, 64, +/* CLIM ROPE */ + 4, 38, 28, + 2, 24, + 104, +/* LOOK TREE */ + 17, 15, 38, + 4, 30, 14, 36, 14, 16, 0, 16, + 53, 27, +/* GET BATO */ + 13, 10, 18, + 2, 11, 8, 9, 0, 11, + 109, 74, +/* CHOP BRIA */ + 21, 36, 40, + 4, 4, 1, 0, 14, 24, 14, 38, 0, 24, + 53, 27, +/* CHOP BRIA */ + 8, 36, 40, + 4, 4, 1, 0, + 109, +/* GET ROPE */ + 9, 10, 28, + 2, 24, 0, 24, + 52, 109, +/* GET ROPE */ + 22, 10, 28, + 3, 38, 7, 30, 7, 12, 0, 24, 0, 38, + 109, 72, 73, +/* AUTO 0 */ + 196, + 0, 24, + 52, +/* THRO ROPE */ + 17, 22, 28, + 1, 24, 7, 3, 7, 11, 0, 24, + 53, 109, +/* RUB RING */ + 13, 54, 22, + 1, 16, 14, 5, 0, 5, + 53, 127, +/* RUB RING */ + 23, 54, 22, + 1, 16, 3, 23, 0, 23, 0, 22, 0, 22, + 72, 53, 132, 134, +/* THRO MATC */ + 17, 22, 27, + 1, 22, 4, 10, 0, 22, 0, 11, + 30, 62, +/* SWIM ANY */ + 13, 2, 0, + 4, 10, 6, 22, 0, 11, + 54, 64, +/* CLIM TREE */ + 14, 38, 38, + 4, 3, 3, 38, 0, 30, + 54, 64, 140, +/* SWIM ANY */ + 21, 2, 0, + 4, 10, 1, 22, 0, 22, 0, 23, 0, 11, + 72, 54, +/* RUB RING */ + 5, 54, 22, + 1, 16, + 109, 105, +/* LOOK STAF */ + 4, 15, 20, + 1, 14, + 25, +/* KILL WOLF */ + 4, 44, 29, + 2, 40, + 110, +/* LOOK BRIA */ + 0, 15, 40, + 51, +/* READ RUNE */ + 8, 33, 67, + 1, 14, 1, 35, + 45, +/* LOOK PARC */ + 4, 15, 19, + 1, 12, + 24, +/* READ STAF */ + 8, 33, 20, + 1, 14, 1, 35, + 45, +/* READ STAF */ + 8, 33, 20, + 1, 14, 6, 35, + 46, +/* READ RUNE */ + 8, 33, 67, + 1, 16, 6, 35, + 46, +/* READ RUNE */ + 8, 33, 67, + 1, 14, 6, 35, + 46, +/* READ RUNE */ + 8, 33, 67, + 1, 16, 1, 35, + 45, +/* SWIM ANY */ + 13, 2, 0, + 4, 11, 0, 10, 6, 22, + 54, 64, +/* SWIM ANY */ + 22, 2, 0, + 4, 11, 1, 22, 0, 22, 0, 23, 0, 10, + 72, 54, 64, +/* THRO MATC */ + 17, 22, 27, + 4, 11, 1, 22, 0, 22, 0, 10, + 30, 62, +/* KILL ANY */ + 4, 44, 0, + 4, 13, + 142, +/* BURN ANY */ + 0, 4, 0, + 116, +/* WAVE STAF */ + 18, 42, 20, + 1, 14, 4, 27, 14, 37, 0, 4, + 58, 109, 106, +/* SAY AKYR */ + 23, 32, 71, + 4, 27, 8, 4, 14, 37, 0, 37, 0, 17, + 72, 149, 41, 42, +/* WAVE QUAR */ + 18, 42, 23, + 4, 28, 2, 29, 0, 29, 0, 43, + 107, 108, 72, +/* LOOK LIZA */ + 17, 15, 32, + 4, 28, 2, 43, 14, 10, 0, 10, + 27, 53, +/* OPEN DOOR */ + 17, 31, 56, + 4, 15, 8, 5, 9, 6, 0, 6, + 143, 58, +/* UNLO DOOR */ + 18, 58, 56, + 4, 15, 1, 5, 9, 5, 0, 5, + 58, 109, 144, +/* UNLO DOOR */ + 8, 58, 56, + 4, 15, 8, 5, + 37, +/* OPEN DOOR */ + 8, 31, 56, + 4, 15, 8, 6, + 21, +/* OPEN DOOR */ + 8, 31, 56, + 4, 15, 9, 5, + 20, +/* UNLO DOOR */ + 12, 58, 56, + 4, 15, 9, 5, 6, 5, + 39, +/* GO DOOR */ + 14, 1, 56, + 4, 15, 8, 6, 0, 29, + 54, 109, 64, +/* LOOK LIZA */ + 10, 15, 32, + 4, 28, 2, 29, + 29, 61, 64, +/* FILL LAMP */ + 4, 74, 16, + 3, 25, + 115, +/* RUB RING */ + 18, 54, 22, + 1, 36, 13, 23, 0, 23, 0, 22, + 72, 132, 134, +/* RUB RING */ + 13, 54, 22, + 1, 36, 14, 5, 0, 5, + 127, 53, +/* RUB RING */ + 5, 54, 22, + 1, 36, + 105, 109, +/* BLOW HORN */ + 9, 7, 14, + 1, 7, 7, 25, + 146, 105, +/* SWEA ANY */ + 0, 59, 0, + 148, +/* EAT ANY */ + 0, 57, 0, + 147, +/* GET SALT */ + 4, 10, 11, + 2, 48, + 7, +/* GO TREE */ + 4, 1, 38, + 4, 30, + 131, +/* JUMP ANY */ + 0, 34, 0, + 113, +/* SPRI SALT */ + 23, 65, 11, + 5, 27, 1, 4, 0, 4, 0, 48, 0, 48, + 72, 53, 109, 105, +/* DROP SALT */ + 22, 18, 11, + 1, 4, 4, 21, 2, 27, 0, 27, 0, 41, + 117, 72, 73, +/* AUTO 0 */ + 196, + 0, 4, + 59, +/* SPRI SALT */ + 22, 65, 11, + 1, 4, 4, 21, 2, 27, 0, 27, 0, 41, + 117, 72, 73, +/* AUTO 0 */ + 196, + 0, 4, + 59, +/* CHOP ANY */ + 4, 36, 0, + 7, 4, + 49, +/* LOOK AROU */ + 1, 15, 72, + 28, 64, +/* OPEN DOOR */ + 8, 31, 56, + 4, 22, 2, 31, + 20, +/* SMAS PADL */ + 21, 66, 34, + 4, 22, 2, 31, 1, 3, 0, 31, 0, 32, + 72, 73, +/* AUTO 0 */ + 201, + 0, 44, 0, 22, + 62, 109, +/* UNLO DOOR */ + 9, 58, 56, + 4, 22, 2, 31, + 38, 130, +/* OPEN DOOR */ + 8, 31, 56, + 4, 22, 2, 32, + 21, +/* UNLO DOOR */ + 8, 58, 56, + 4, 22, 2, 32, + 37, +/* GO DOOR */ + 13, 1, 56, + 4, 22, 2, 32, 0, 23, + 54, 64, +/* FEED CRAB */ + 18, 9, 13, + 4, 24, 1, 41, 0, 7, 0, 41, + 58, 59, 5, +/* FILL LAMP */ + 4, 74, 16, + 3, 39, + 114, +/* GO LAKE */ + 8, 1, 58, + 4, 24, 9, 7, + 10, +/* GO LAKE */ + 17, 1, 58, + 4, 24, 8, 7, 1, 8, 0, 25, + 54, 64, +/* SAIL LAKE */ + 17, 8, 58, + 4, 24, 8, 7, 1, 8, 0, 25, + 54, 64, +/* FEED CRAB */ + 8, 9, 13, + 4, 24, 8, 7, + 6, +/* BLOW HORN */ + 23, 7, 14, + 4, 25, 1, 7, 14, 11, 0, 8, 0, 11, + 58, 53, 128, 129, +/* THRO KNIF */ + 22, 22, 17, + 4, 25, 1, 10, 8, 8, 0, 9, 0, 10, + 58, 59, 23, +/* AUTO 0 */ + 204, + 4, 25, 8, 8, 8, 9, + 88, +/* GET SALT */ + 13, 10, 11, + 4, 19, 2, 4, 0, 4, + 52, 109, +/* DROP SALT */ + 13, 18, 11, + 7, 21, 1, 4, 0, 4, + 53, 109, +/* GET SALT */ + 9, 10, 11, + 2, 4, 0, 4, + 52, 109, +/* HELP ANY */ + 12, 13, 0, + 4, 24, 9, 7, 1, 41, + 15, +/* HELP ANY */ + 12, 13, 0, + 4, 24, 9, 7, 6, 41, + 9, +/* HELP ANY */ + 8, 13, 0, + 4, 28, 2, 29, + 16, +/* HELP ANY */ + 12, 13, 0, + 4, 27, 2, 17, 9, 4, + 18, +/* HELP ANY */ + 8, 13, 0, + 4, 22, 2, 31, + 13, +/* HELP ANY */ + 8, 13, 0, + 4, 25, 9, 8, + 14, +/* HELP ANY */ + 12, 13, 0, + 4, 25, 8, 8, 9, 9, + 11, +/* HELP ANY */ + 4, 13, 0, + 4, 15, + 17, +/* HELP ANY */ + 8, 13, 0, + 1, 15, 1, 12, + 19, +/* HELP ANY */ + 8, 13, 0, + 1, 15, 1, 14, + 19, +/* HELP ANY */ + 9, 13, 0, + 1, 15, 1, 16, + 0, 19, +/* HELP ANY */ + 12, 13, 0, + 4, 27, 2, 17, 8, 4, + 12, +/* HELP ANY */ + 1, 13, 0, + 4, 121, +/* SAVE ANY */ + 0, 70, 0, + 71, +/* DROP CLOA */ + 4, 18, 8, + 1, 34, + 119, +/* DROP HELM */ + 4, 18, 76, + 1, 35, + 119, +/* DROP RING */ + 4, 18, 22, + 1, 36, + 119, +/* SCOR ANY */ + 0, 53, 0, + 3, +/* WAVE ANY */ + 1, 42, 0, + 109, 105, +/* DROP CLOA */ + 9, 18, 8, + 1, 1, 0, 1, + 53, 109, +/* DROP RING */ + 9, 18, 22, + 1, 16, 0, 16, + 53, 109, +/* DROP HELM */ + 9, 18, 76, + 1, 15, 0, 15, + 53, 109, +/* SAY ANY */ + 2, 32, 0, + 109, 85, 105, +/* GO ANY */ + 0, 1, 0, + 135, +/* GET BATO */ + 12, 10, 18, + 4, 25, 2, 11, 9, 9, + 118, +/* SQUE RAG */ + 4, 3, 33, + 1, 33, + 123, +/* SOAK RAG */ + 22, 73, 33, + 1, 33, 2, 20, 0, 30, 0, 33, 0, 20, + 72, 59, 109, +/* LOOK ANY */ + 0, 15, 0, + 28, +/* WEAR ANY */ + 0, 48, 0, + 135, +/* MOVE ANY */ + 0, 40, 0, + 135, +/* INVE ANY */ + 0, 14, 0, + 66, +/* QUIT ANY */ + 0, 6, 0, + 63, +/* BLOW ANY */ + 0, 7, 0, + 135, +/* HELP ANY */ + 0, 13, 0, + 4, +/* SAIL ANY */ + 4, 8, 0, + 4, 25, + 109, +/* SAIL ANY */ + 0, 8, 0, + 135, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* SWIM */ + 83, 87, 73, 77, + /* SQUE */ + 83, 81, 85, 69, + /* BURN */ + 66, 85, 82, 78, + /* POUR */ + 80, 79, 85, 82, + /* QUIT */ + 81, 85, 73, 84, + /* BLOW */ + 66, 76, 79, 87, + /* SAIL */ + 83, 65, 73, 76, + /* FEED */ + 70, 69, 69, 68, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *PICK */ + 208, 73, 67, 75, + /* HELP */ + 72, 69, 76, 80, + /* INVE */ + 73, 78, 86, 69, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *SEAR */ + 211, 69, 65, 82, + /* DROP */ + 68, 82, 79, 80, + /* *PUT */ + 208, 85, 84, 32, + /* *LEAV */ + 204, 69, 65, 86, + /* *GIVE */ + 199, 73, 86, 69, + /* THRO */ + 84, 72, 82, 79, + /* *SLIN */ + 211, 76, 73, 78, + /* *CHUC */ + 195, 72, 85, 67, + /* *HURL */ + 200, 85, 82, 76, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* UNLI */ + 85, 78, 76, 73, + /* *DOUS */ + 196, 79, 85, 83, + /* *EXTI */ + 197, 88, 84, 73, + /* OPEN */ + 79, 80, 69, 78, + /* SAY */ + 83, 65, 89, 32, + /* READ */ + 82, 69, 65, 68, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* CHOP */ + 67, 72, 79, 80, + /* *CUT */ + 195, 85, 84, 32, + /* CLIM */ + 67, 76, 73, 77, + /* *ASCE */ + 193, 83, 67, 69, + /* MOVE */ + 77, 79, 86, 69, + /* *SHIF */ + 211, 72, 73, 70, + /* WAVE */ + 87, 65, 86, 69, + /* *SHAK */ + 211, 72, 65, 75, + /* KILL */ + 75, 73, 76, 76, + /* *DEST */ + 196, 69, 83, 84, + /* *EXTE */ + 197, 88, 84, 69, + /* *ATTA */ + 193, 84, 84, 65, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* HOLD */ + 72, 79, 76, 68, + /* SCOR */ + 83, 67, 79, 82, + /* RUB */ + 82, 85, 66, 32, + /* *POLI */ + 208, 79, 76, 73, + /* *SHIN */ + 211, 72, 73, 78, + /* EAT */ + 69, 65, 84, 32, + /* UNLO */ + 85, 78, 76, 79, + /* SWEA */ + 83, 87, 69, 65, + /* *FUCK */ + 198, 85, 67, 75, + /* *BALL */ + 194, 65, 76, 76, + /* *BOLL */ + 194, 79, 76, 76, + /* *SHIT */ + 211, 72, 73, 84, + /* *BAST */ + 194, 65, 83, 84, + /* SPRI */ + 83, 80, 82, 73, + /* SMAS */ + 83, 77, 65, 83, + /* *HIT */ + 200, 73, 84, 32, + /* *BREA */ + 194, 82, 69, 65, + /* *HAMM */ + 200, 65, 77, 77, + /* SAVE */ + 83, 65, 86, 69, + /* *STOR */ + 211, 84, 79, 82, + /* MOP */ + 77, 79, 80, 32, + /* SOAK */ + 83, 79, 65, 75, + /* FILL */ + 70, 73, 76, 76, + /* *REPL */ + 210, 69, 80, 76, + /* *REFI */ + 210, 69, 70, 73, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* SWOR */ + 83, 87, 79, 82, + /* CLOA */ + 67, 76, 79, 65, + /* BARR */ + 66, 65, 82, 82, + /* HAMM */ + 72, 65, 77, 77, + /* SALT */ + 83, 65, 76, 84, + /* KEY */ + 75, 69, 89, 32, + /* CRAB */ + 67, 82, 65, 66, + /* HORN */ + 72, 79, 82, 78, + /* RAFT */ + 82, 65, 70, 84, + /* LAMP */ + 76, 65, 77, 80, + /* KNIF */ + 75, 78, 73, 70, + /* BATO */ + 66, 65, 84, 79, + /* PARC */ + 80, 65, 82, 67, + /* STAF */ + 83, 84, 65, 70, + /* *WOOD */ + 215, 79, 79, 68, + /* RING */ + 82, 73, 78, 71, + /* QUAR */ + 81, 85, 65, 82, + /* MIRR */ + 77, 73, 82, 82, + /* POOL */ + 80, 79, 79, 76, + /* HOLE */ + 72, 79, 76, 69, + /* MATC */ + 77, 65, 84, 67, + /* ROPE */ + 82, 79, 80, 69, + /* WOLF */ + 87, 79, 76, 70, + /* SLUG */ + 83, 76, 85, 71, + /* GORG */ + 71, 79, 82, 71, + /* LIZA */ + 76, 73, 90, 65, + /* RAG */ + 82, 65, 71, 32, + /* PADL */ + 80, 65, 68, 76, + /* STAT */ + 83, 84, 65, 84, + /* STON */ + 83, 84, 79, 78, + /* STRE */ + 83, 84, 82, 69, + /* TREE */ + 84, 82, 69, 69, + /* *HOLL */ + 200, 79, 76, 76, + /* BRIA */ + 66, 82, 73, 65, + /* CABI */ + 67, 65, 66, 73, + /* *HUT */ + 200, 85, 84, 32, + /* WIND */ + 87, 73, 78, 68, + /* PATH */ + 80, 65, 84, 72, + /* ROAD */ + 82, 79, 65, 68, + /* POND */ + 80, 79, 78, 68, + /* PORT */ + 80, 79, 82, 84, + /* BATT */ + 66, 65, 84, 84, + /* COUR */ + 67, 79, 85, 82, + /* STAB */ + 83, 84, 65, 66, + /* HOLE */ + 72, 79, 76, 69, + /* TORT */ + 84, 79, 82, 84, + /* STAI */ + 83, 84, 65, 73, + /* PASS */ + 80, 65, 83, 83, + /* CAVE */ + 67, 65, 86, 69, + /* DOOR */ + 68, 79, 79, 82, + /* STOR */ + 83, 84, 79, 82, + /* LAKE */ + 76, 65, 75, 69, + /* WORK */ + 87, 79, 82, 75, + /* SORC */ + 83, 79, 82, 67, + /* LEAV */ + 76, 69, 65, 86, + /* *PILE */ + 208, 73, 76, 69, + /* MOAT */ + 77, 79, 65, 84, + /* BOAR */ + 66, 79, 65, 82, + /* ARCH */ + 65, 82, 67, 72, + /* STRA */ + 83, 84, 82, 65, + /* RUNE */ + 82, 85, 78, 69, + /* KNIG */ + 75, 78, 73, 71, + /* *FIGU */ + 198, 73, 71, 85, + /* *EERI */ + 197, 69, 82, 73, + /* AKYR */ + 65, 75, 89, 82, + /* AROU */ + 65, 82, 79, 85, + /* *ABOU */ + 193, 66, 79, 85, + /* *ROUN */ + 210, 79, 85, 78, + /* REED */ + 82, 69, 69, 68, + /* HELM */ + 72, 69, 76, 77, + /* OFF */ + 79, 70, 70, 32, + /* CAST */ + 67, 65, 83, 84, + 0, +}; +const uint8_t automap[] = { + /* SWOR */ + 83, 87, 79, 82, + 0, + /* CLOA */ + 67, 76, 79, 65, + 1, + /* BARR */ + 66, 65, 82, 82, + 2, + /* HAMM */ + 72, 65, 77, 77, + 3, + /* SALT */ + 83, 65, 76, 84, + 4, + /* KEY */ + 75, 69, 89, 32, + 5, + /* HORN */ + 72, 79, 82, 78, + 7, + /* RAFT */ + 82, 65, 70, 84, + 8, + /* LAMP */ + 76, 65, 77, 80, + 9, + /* KNIF */ + 75, 78, 73, 70, + 10, + /* PARC */ + 80, 65, 82, 67, + 12, + /* STAF */ + 83, 84, 65, 70, + 14, + /* HELM */ + 72, 69, 76, 77, + 15, + /* RING */ + 82, 73, 78, 71, + 16, + /* QUAR */ + 81, 85, 65, 82, + 17, + /* MIRR */ + 77, 73, 82, 82, + 18, + /* MATC */ + 77, 65, 84, 67, + 22, + /* MATC */ + 77, 65, 84, 67, + 23, + /* ROPE */ + 82, 79, 80, 69, + 24, + /* LAMP */ + 76, 65, 77, 80, + 25, + /* SLUG */ + 83, 76, 85, 71, + 27, + /* RAG */ + 82, 65, 71, 32, + 30, + /* RAG */ + 82, 65, 71, 32, + 33, + /* QUAR */ + 81, 85, 65, 82, + 37, + /* LAMP */ + 76, 65, 77, 80, + 39, + /* SLUG */ + 83, 76, 85, 71, + 41, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst02.c b/Applications/games/myst02.c new file mode 100644 index 00000000..faf78c69 --- /dev/null +++ b/Applications/games/myst02.c @@ -0,0 +1,2884 @@ +#define NUM_OBJ 62 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 200; +const uint8_t lightfill = 200; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 44; +const uint8_t startloc = 43; +const uint8_t loctxt_0[] = { +42, 32, 0 }; +const uint8_t loctxt_1[] = { +104, 111, 116, 32, 102, 101, 116, 105, 100, 32, 83, 119, 97, 109, 112, 0 }; +const uint8_t loctxt_2[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 110, 32, 65, 110, 99, 105, 101, 110, 116, 32, 83, 112, 104, 105, 110, 120, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 97, 105, 108, 105, 110, 103, 32, 66, 114, 105, 103, 0 }; +const uint8_t loctxt_4[] = { +67, 101, 108, 108, 97, 114, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 71, 114, 97, 115, 115, 121, 32, 80, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_6[] = { +84, 105, 109, 101, 45, 87, 97, 114, 112, 0 }; +const uint8_t loctxt_7[] = { +48, 0 }; +const uint8_t loctxt_8[] = { +48, 0 }; +const uint8_t loctxt_9[] = { +48, 0 }; +const uint8_t loctxt_10[] = { +115, 116, 114, 97, 110, 103, 101, 32, 77, 97, 99, 104, 105, 110, 101, 0 }; +const uint8_t loctxt_11[] = { +104, 111, 116, 32, 102, 101, 116, 105, 100, 32, 83, 119, 97, 109, 112, 0 }; +const uint8_t loctxt_12[] = { +104, 111, 116, 32, 102, 101, 116, 105, 100, 32, 83, 119, 97, 109, 112, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 115, 116, 101, 97, 109, 121, 32, 76, 97, 107, 101, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 97, 117, 115, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 116, 105, 110, 121, 32, 73, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_16[] = { +116, 114, 97, 99, 107, 108, 101, 115, 115, 32, 68, 101, 115, 101, 114, 116, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 83, 116, 111, 110, 101, 32, 87, 97, 108, 108, 0 }; +const uint8_t loctxt_18[] = { +108, 111, 110, 103, 32, 80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_19[] = { +87, 101, 97, 112, 111, 110, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 83, 116, 97, 116, 117, 101, 0 }; +const uint8_t loctxt_21[] = { +115, 109, 97, 108, 108, 32, 84, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_22[] = { +119, 105, 110, 100, 105, 110, 103, 32, 84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_23[] = { +42, 73, 39, 109, 32, 98, 121, 32, 116, 104, 101, 32, 70, 111, 114, 101, 109, 97, 115, 116, 0 }; +const uint8_t loctxt_24[] = { +42, 73, 39, 109, 32, 97, 102, 116, 32, 98, 121, 32, 116, 104, 101, 32, 82, 105, 103, 103, 105, 110, 103, 0 }; +const uint8_t loctxt_25[] = { +83, 104, 105, 112, 39, 115, 32, 80, 97, 110, 116, 114, 121, 0 }; +const uint8_t loctxt_26[] = { +68, 101, 99, 107, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_27[] = { +67, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 98, 121, 32, 116, 104, 101, 32, 68, 101, 99, 107, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_29[] = { +67, 114, 111, 119, 115, 45, 78, 101, 115, 116, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 67, 97, 112, 116, 97, 105, 110, 39, 115, 32, 67, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_31[] = { +42, 73, 32, 115, 101, 101, 32, 97, 32, 72, 111, 117, 115, 101, 32, 116, 111, 32, 116, 104, 101, 32, 78, 111, 114, 116, 104, 0 }; +const uint8_t loctxt_32[] = { +81, 117, 97, 103, 109, 105, 114, 101, 46, 46, 73, 39, 109, 32, 83, 105, 110, 107, 105, 110, 103, 33, 0 }; +const uint8_t loctxt_33[] = { +100, 101, 110, 115, 101, 32, 70, 111, 103, 32, 111, 110, 32, 116, 104, 101, 32, 77, 111, 111, 114, 115, 0 }; +const uint8_t loctxt_34[] = { +68, 111, 111, 114, 119, 97, 121, 0 }; +const uint8_t loctxt_35[] = { +100, 101, 110, 115, 101, 32, 70, 111, 103, 32, 111, 110, 32, 116, 104, 101, 32, 77, 111, 111, 114, 115, 0 }; +const uint8_t loctxt_36[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 87, 105, 110, 100, 111, 119, 0 }; +const uint8_t loctxt_37[] = { +72, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_38[] = { +68, 69, 80, 79, 0 }; +const uint8_t loctxt_39[] = { +83, 116, 117, 100, 121, 0 }; +const uint8_t loctxt_40[] = { +71, 101, 110, 101, 114, 97, 116, 111, 114, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_41[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_42[] = { +71, 117, 97, 114, 100, 45, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_43[] = { +100, 101, 110, 115, 101, 32, 70, 111, 103, 32, 111, 110, 32, 116, 104, 101, 32, 77, 111, 111, 114, 115, 0 }; +const uint8_t loctxt_44[] = { +42, 77, 121, 32, 84, 73, 77, 69, 32, 105, 115, 32, 117, 112, 46, 46, 46, 73, 39, 109, 32, 68, 69, 65, 68, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 11, 0, 0, 0, 0, 0 } }, + { loctxt_2, { 0, 16, 0, 0, 0, 0 } }, + { loctxt_3, { 23, 24, 28, 0, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 0, 37, 0 } }, + { loctxt_5, { 5, 5, 5, 5, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_8, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_9, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_11, { 12, 1, 11, 11, 0, 0 } }, + { loctxt_12, { 0, 11, 13, 12, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 12, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 13, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_16, { 2, 16, 16, 16, 0, 0 } }, + { loctxt_17, { 0, 18, 0, 0, 0, 0 } }, + { loctxt_18, { 17, 19, 0, 0, 0, 0 } }, + { loctxt_19, { 18, 0, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 21 } }, + { loctxt_21, { 0, 0, 0, 17, 0, 0 } }, + { loctxt_22, { 21, 2, 0, 0, 0, 0 } }, + { loctxt_23, { 0, 3, 0, 0, 0, 0 } }, + { loctxt_24, { 3, 0, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 26, 0, 0, 0 } }, + { loctxt_26, { 0, 30, 27, 25, 28, 0 } }, + { loctxt_27, { 0, 0, 0, 26, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 0, 24 } }, + { loctxt_30, { 26, 0, 0, 0, 0, 0 } }, + { loctxt_31, { 34, 43, 35, 31, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_33, { 35, 31, 33, 32, 0, 0 } }, + { loctxt_34, { 0, 31, 0, 36, 0, 0 } }, + { loctxt_35, { 35, 0, 43, 33, 0, 0 } }, + { loctxt_36, { 0, 0, 34, 0, 0, 0 } }, + { loctxt_37, { 0, 0, 0, 39, 0, 0 } }, + { loctxt_38, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_39, { 0, 0, 37, 0, 0, 0 } }, + { loctxt_40, { 0, 0, 41, 0, 0, 0 } }, + { loctxt_41, { 0, 0, 0, 40, 5, 0 } }, + { loctxt_42, { 0, 0, 41, 0, 0, 0 } }, + { loctxt_43, { 35, 32, 43, 43, 0, 0 } }, + { loctxt_44, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 32, + 34, + 39, + 39, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 4, + 0, + 23, + 23, + 29, + 0, + 27, + 25, + 25, + 30, + 30, + 13, + 14, + 2, + 18, + 19, + 19, + 0, + 0, + 0, + 0, + 42, + 0, + 4, + 10, + 0, + 0, + 10, + 34, + 0, + 13, + 41, + 21, + 28, + 20, + 0, + 0, + 2, + 37, + 0, + 0, + 0, + 5, + 0, + 6, + 0, + 0, + 0, + 40, + 41, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +83, 109, 97, 108, 108, 32, 66, 117, 115, 104, 0 }; +const uint8_t objtxt_1[] = { +71, 108, 111, 118, 101, 115, 0 }; +const uint8_t objtxt_2[] = { +80, 97, 105, 110, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_3[] = { +68, 114, 97, 119, 101, 114, 0 }; +const uint8_t objtxt_4[] = { +79, 112, 101, 110, 32, 68, 114, 97, 119, 101, 114, 0 }; +const uint8_t objtxt_5[] = { +75, 101, 121, 0 }; +const uint8_t objtxt_6[] = { +80, 105, 115, 116, 111, 108, 0 }; +const uint8_t objtxt_7[] = { +67, 114, 111, 119, 98, 97, 114, 0 }; +const uint8_t objtxt_8[] = { +66, 114, 111, 107, 101, 110, 32, 71, 108, 97, 115, 115, 0 }; +const uint8_t objtxt_9[] = { +76, 73, 84, 32, 70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_10[] = { +70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_11[] = { +67, 97, 115, 115, 101, 116, 116, 101, 32, 82, 101, 99, 111, 114, 100, 101, 114, 0 }; +const uint8_t objtxt_12[] = { +71, 108, 111, 119, 105, 110, 103, 32, 80, 111, 114, 116, 97, 108, 0 }; +const uint8_t objtxt_13[] = { +82, 111, 112, 101, 0 }; +const uint8_t objtxt_14[] = { +84, 111, 114, 110, 32, 83, 97, 105, 108, 0 }; +const uint8_t objtxt_15[] = { +80, 111, 117, 99, 104, 0 }; +const uint8_t objtxt_16[] = { +71, 108, 97, 115, 115, 32, 80, 114, 105, 115, 109, 0 }; +const uint8_t objtxt_17[] = { +67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_18[] = { +83, 97, 108, 116, 32, 66, 101, 101, 102, 0 }; +const uint8_t objtxt_19[] = { +83, 101, 97, 32, 66, 105, 115, 99, 117, 105, 116, 115, 0 }; +const uint8_t objtxt_20[] = { +78, 101, 101, 100, 108, 101, 32, 38, 32, 84, 104, 114, 101, 97, 100, 0 }; +const uint8_t objtxt_21[] = { +83, 104, 105, 112, 39, 115, 32, 76, 111, 103, 0 }; +const uint8_t objtxt_22[] = { +66, 114, 111, 110, 116, 111, 115, 97, 117, 114, 117, 115, 0 }; +const uint8_t objtxt_23[] = { +79, 108, 100, 32, 66, 111, 97, 116, 0 }; +const uint8_t objtxt_24[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_25[] = { +82, 111, 99, 107, 0 }; +const uint8_t objtxt_26[] = { +83, 112, 101, 97, 114, 0 }; +const uint8_t objtxt_27[] = { +76, 101, 118, 101, 114, 0 }; +const uint8_t objtxt_28[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_29[] = { +83, 97, 118, 97, 103, 101, 32, 68, 111, 103, 0 }; +const uint8_t objtxt_30[] = { +68, 101, 97, 100, 32, 68, 111, 103, 0 }; +const uint8_t objtxt_31[] = { +68, 97, 114, 107, 32, 79, 112, 101, 110, 105, 110, 103, 0 }; +const uint8_t objtxt_32[] = { +68, 111, 99, 116, 111, 114, 32, 80, 111, 116, 116, 101, 114, 0 }; +const uint8_t objtxt_33[] = { +71, 108, 111, 118, 101, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_34[] = { +83, 116, 114, 97, 110, 103, 101, 32, 77, 97, 99, 104, 105, 110, 101, 0 }; +const uint8_t objtxt_35[] = { +51, 32, 69, 109, 112, 116, 121, 32, 83, 111, 99, 107, 101, 116, 115, 0 }; +const uint8_t objtxt_36[] = { +50, 32, 69, 109, 112, 116, 121, 32, 83, 111, 99, 107, 101, 116, 115, 0 }; +const uint8_t objtxt_37[] = { +69, 109, 112, 116, 121, 32, 83, 111, 99, 107, 101, 116, 0 }; +const uint8_t objtxt_38[] = { +50, 32, 66, 117, 116, 116, 111, 110, 115, 0 }; +const uint8_t objtxt_39[] = { +66, 101, 108, 108, 0 }; +const uint8_t objtxt_40[] = { +72, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_41[] = { +67, 97, 117, 115, 101, 119, 97, 121, 0 }; +const uint8_t objtxt_42[] = { +82, 111, 98, 111, 116, 32, 71, 117, 97, 114, 100, 0 }; +const uint8_t objtxt_43[] = { +72, 117, 103, 101, 32, 83, 116, 97, 116, 117, 101, 0 }; +const uint8_t objtxt_44[] = { +68, 111, 111, 114, 0 }; +const uint8_t objtxt_45[] = { +71, 108, 97, 115, 115, 32, 80, 114, 105, 115, 109, 0 }; +const uint8_t objtxt_46[] = { +71, 108, 97, 115, 115, 32, 80, 114, 105, 115, 109, 0 }; +const uint8_t objtxt_47[] = { +82, 111, 98, 111, 116, 32, 71, 117, 97, 114, 100, 32, 40, 100, 101, 102, 117, 110, 99, 116, 41, 0 }; +const uint8_t objtxt_48[] = { +80, 114, 111, 106, 101, 99, 116, 105, 110, 103, 32, 83, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_49[] = { +68, 111, 111, 114, 0 }; +const uint8_t objtxt_50[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_51[] = { +79, 112, 101, 110, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_52[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_53[] = { +77, 101, 116, 97, 108, 32, 80, 108, 97, 116, 101, 0 }; +const uint8_t objtxt_54[] = { +79, 112, 101, 110, 32, 83, 104, 97, 102, 116, 0 }; +const uint8_t objtxt_55[] = { +80, 111, 108, 105, 99, 101, 32, 66, 111, 120, 0 }; +const uint8_t objtxt_56[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_57[] = { +83, 101, 97, 119, 111, 114, 116, 104, 121, 32, 66, 111, 97, 116, 0 }; +const uint8_t objtxt_58[] = { +68, 111, 103, 32, 40, 101, 97, 116, 105, 110, 103, 41, 0 }; +const uint8_t objtxt_59[] = { +71, 101, 110, 101, 114, 97, 116, 111, 114, 0 }; +const uint8_t objtxt_60[] = { +65, 114, 99, 104, 119, 97, 121, 0 }; +const uint8_t objtxt_61[] = { +66, 114, 111, 107, 101, 110, 32, 71, 101, 110, 101, 114, 97, 116, 111, 114, 0 }; +const uint8_t objtxt_62[] = { +68, 101, 97, 100, 32, 70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +73, 116, 39, 115, 32, 76, 111, 99, 107, 101, 100, 33, 0 }; +const uint8_t msgtxt_2[] = { +66, 114, 111, 110, 116, 111, 115, 97, 117, 114, 117, 115, 0 }; +const uint8_t msgtxt_3[] = { +73, 39, 118, 101, 32, 110, 111, 32, 75, 101, 121, 33, 0 }; +const uint8_t msgtxt_4[] = { +73, 116, 32, 110, 101, 101, 100, 115, 32, 70, 105, 120, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_5[] = { +89, 111, 117, 39, 114, 101, 32, 74, 111, 107, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_6[] = { +70, 114, 97, 109, 101, 32, 105, 115, 32, 82, 111, 116, 116, 101, 110, 46, 46, 87, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_7[] = { +77, 105, 115, 115, 105, 110, 103, 32, 80, 114, 105, 115, 109, 115, 32, 109, 117, 115, 116, 32, 98, 101, 32, 114, 101, 115, 112, 111, 110, 115, 105, 98, 108, 101, 33, 0 }; +const uint8_t msgtxt_8[] = { +73, 116, 39, 115, 32, 79, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_9[] = { +78, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_10[] = { +87, 79, 87, 33, 32, 87, 104, 97, 116, 32, 97, 32, 83, 104, 111, 119, 46, 46, 87, 104, 101, 114, 101, 32, 97, 114, 101, 32, 119, 101, 63, 0 }; +const uint8_t msgtxt_11[] = { +85, 115, 101, 32, 50, 32, 119, 111, 114, 100, 115, 46, 32, 105, 46, 101, 46, 32, 80, 82, 69, 83, 83, 32, 82, 69, 86, 0 }; +const uint8_t msgtxt_12[] = { +68, 105, 110, 103, 33, 32, 68, 111, 110, 103, 33, 0 }; +const uint8_t msgtxt_13[] = { +73, 32, 104, 101, 97, 114, 32, 97, 32, 71, 114, 105, 110, 100, 105, 110, 103, 32, 78, 111, 105, 115, 101, 33, 0 }; +const uint8_t msgtxt_14[] = { +73, 39, 118, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 116, 111, 32, 74, 97, 109, 32, 105, 116, 32, 119, 105, 116, 104, 33, 0 }; +const uint8_t msgtxt_15[] = { +80, 114, 105, 115, 109, 32, 115, 108, 111, 116, 115, 32, 105, 110, 32, 116, 104, 101, 110, 32, 118, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_16[] = { +73, 116, 32, 115, 97, 121, 115, 58, 45, 32, 0 }; +const uint8_t msgtxt_17[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_18[] = { +75, 105, 108, 108, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_19[] = { +73, 116, 39, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 68, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_20[] = { +85, 103, 104, 33, 0 }; +const uint8_t msgtxt_21[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 0 }; +const uint8_t msgtxt_22[] = { +73, 39, 118, 101, 32, 110, 111, 32, 119, 101, 97, 112, 111, 110, 33, 0 }; +const uint8_t msgtxt_23[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_24[] = { +73, 32, 110, 101, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 101, 97, 118, 121, 33, 0 }; +const uint8_t msgtxt_25[] = { +73, 32, 99, 117, 116, 32, 109, 121, 115, 101, 108, 102, 32, 97, 110, 100, 32, 98, 108, 101, 100, 32, 116, 111, 32, 100, 101, 97, 116, 104, 33, 0 }; +const uint8_t msgtxt_26[] = { +66, 65, 78, 71, 33, 0 }; +const uint8_t msgtxt_27[] = { +73, 116, 39, 115, 32, 83, 104, 105, 112, 115, 104, 97, 112, 101, 32, 110, 111, 119, 33, 0 }; +const uint8_t msgtxt_28[] = { +77, 121, 32, 114, 101, 112, 97, 105, 114, 32, 107, 105, 116, 32, 105, 115, 32, 105, 110, 99, 111, 109, 112, 108, 101, 116, 101, 33, 0 }; +const uint8_t msgtxt_29[] = { +68, 101, 108, 105, 99, 105, 111, 117, 115, 46, 46, 46, 84, 104, 97, 110, 107, 115, 33, 0 }; +const uint8_t msgtxt_30[] = { +72, 101, 39, 115, 32, 110, 111, 116, 32, 104, 117, 110, 103, 114, 121, 46, 46, 72, 101, 39, 115, 32, 68, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_31[] = { +73, 39, 118, 101, 32, 110, 111, 32, 70, 111, 111, 100, 33, 0 }; +const uint8_t msgtxt_32[] = { +112, 111, 117, 110, 99, 101, 115, 32, 111, 110, 32, 102, 111, 111, 100, 33, 0 }; +const uint8_t msgtxt_33[] = { +105, 115, 32, 86, 101, 103, 101, 116, 97, 114, 105, 97, 110, 0 }; +const uint8_t msgtxt_34[] = { +109, 111, 118, 101, 115, 32, 111, 102, 102, 32, 101, 97, 116, 105, 110, 103, 32, 66, 105, 115, 99, 117, 105, 116, 115, 33, 0 }; +const uint8_t msgtxt_35[] = { +72, 101, 32, 119, 105, 108, 108, 32, 98, 101, 32, 79, 46, 75, 46, 0 }; +const uint8_t msgtxt_36[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 67, 97, 115, 115, 101, 116, 116, 101, 32, 105, 110, 32, 105, 116, 0 }; +const uint8_t msgtxt_37[] = { +77, 97, 121, 98, 101, 32, 73, 32, 115, 104, 111, 117, 108, 100, 32, 112, 108, 97, 121, 32, 105, 116, 63, 0 }; +const uint8_t msgtxt_38[] = { +73, 116, 32, 104, 97, 115, 32, 110, 111, 32, 109, 101, 97, 110, 115, 32, 111, 102, 32, 80, 114, 111, 112, 117, 108, 115, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_39[] = { +82, 111, 98, 111, 116, 32, 71, 117, 97, 114, 100, 0 }; +const uint8_t msgtxt_40[] = { +110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_41[] = { +73, 116, 32, 108, 111, 111, 107, 115, 32, 67, 108, 105, 109, 98, 97, 98, 108, 101, 0 }; +const uint8_t msgtxt_42[] = { +77, 121, 32, 72, 97, 110, 100, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 65, 117, 114, 97, 33, 0 }; +const uint8_t msgtxt_43[] = { +73, 116, 39, 115, 32, 108, 111, 111, 115, 101, 0 }; +const uint8_t msgtxt_44[] = { +69, 120, 97, 109, 105, 110, 101, 32, 116, 104, 105, 110, 103, 115, 32, 97, 110, 100, 32, 116, 104, 105, 110, 107, 33, 0 }; +const uint8_t msgtxt_45[] = { +115, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_46[] = { +73, 116, 32, 108, 111, 111, 107, 115, 32, 72, 117, 110, 103, 114, 121, 33, 0 }; +const uint8_t msgtxt_47[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_48[] = { +73, 116, 39, 115, 32, 116, 111, 111, 32, 72, 111, 116, 33, 0 }; +const uint8_t msgtxt_49[] = { +83, 119, 105, 109, 109, 105, 110, 103, 32, 100, 114, 97, 103, 115, 32, 109, 101, 32, 100, 101, 101, 112, 101, 114, 33, 0 }; +const uint8_t msgtxt_50[] = { +73, 39, 100, 32, 110, 101, 101, 100, 32, 97, 110, 32, 73, 114, 111, 110, 32, 98, 97, 114, 32, 102, 111, 114, 32, 116, 104, 97, 116, 33, 0 }; +const uint8_t msgtxt_51[] = { +68, 111, 103, 0 }; +const uint8_t msgtxt_52[] = { +87, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_53[] = { +65, 65, 82, 82, 71, 71, 72, 72, 33, 33, 0 }; +const uint8_t msgtxt_54[] = { +73, 39, 109, 32, 100, 114, 111, 119, 110, 101, 100, 32, 105, 110, 32, 81, 117, 105, 99, 107, 115, 97, 110, 100, 33, 0 }; +const uint8_t msgtxt_55[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 84, 72, 69, 32, 84, 73, 77, 69, 32, 77, 65, 67, 72, 73, 78, 69, 0 }; +const uint8_t msgtxt_56[] = { +70, 111, 114, 32, 76, 73, 90, 32, 38, 32, 77, 73, 67, 72, 65, 69, 76, 32, 109, 121, 32, 87, 105, 102, 101, 32, 38, 32, 83, 111, 110, 0 }; +const uint8_t msgtxt_57[] = { +79, 110, 101, 32, 105, 115, 32, 109, 97, 114, 107, 101, 100, 32, 60, 70, 79, 82, 62, 32, 111, 110, 101, 32, 60, 82, 69, 86, 62, 0 }; +const uint8_t msgtxt_58[] = { +73, 116, 39, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 98, 114, 111, 107, 101, 110, 33, 0 }; +const uint8_t msgtxt_59[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_60[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 101, 108, 108, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_61[] = { +80, 72, 69, 87, 33, 32, 66, 101, 116, 116, 101, 114, 32, 119, 97, 116, 99, 104, 32, 109, 121, 32, 115, 116, 101, 112, 33, 0 }; +const uint8_t msgtxt_62[] = { +66, 82, 73, 76, 76, 73, 65, 78, 84, 33, 32, 89, 111, 117, 32, 114, 101, 115, 99, 117, 101, 100, 32, 116, 104, 101, 32, 68, 111, 99, 116, 111, 114, 33, 0 }; +const uint8_t msgtxt_63[] = { +67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 83, 32, 72, 69, 82, 79, 33, 0 }; +const uint8_t msgtxt_64[] = { +79, 111, 112, 115, 33, 32, 87, 101, 39, 114, 101, 32, 114, 117, 115, 104, 105, 110, 103, 32, 104, 101, 97, 100, 108, 111, 110, 103, 0 }; +const uint8_t msgtxt_65[] = { +116, 104, 114, 111, 117, 103, 104, 32, 84, 105, 109, 101, 32, 105, 116, 115, 101, 108, 102, 33, 0 }; +const uint8_t msgtxt_66[] = { +73, 32, 104, 101, 97, 114, 32, 97, 32, 115, 110, 97, 114, 108, 105, 110, 103, 32, 110, 111, 105, 115, 101, 32, 98, 101, 108, 111, 119, 33, 0 }; +const uint8_t msgtxt_67[] = { +87, 97, 108, 108, 32, 99, 108, 111, 115, 101, 100, 32, 98, 101, 104, 105, 110, 100, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_68[] = { +70, 105, 110, 100, 32, 116, 104, 101, 32, 51, 32, 80, 114, 105, 115, 109, 115, 32, 116, 104, 97, 116, 32, 99, 111, 110, 116, 114, 111, 108, 0 }; +const uint8_t msgtxt_69[] = { +109, 121, 32, 77, 97, 99, 104, 105, 110, 101, 46, 32, 82, 101, 115, 99, 117, 101, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_70[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 116, 104, 101, 109, 33, 0 }; +const uint8_t msgtxt_71[] = { +71, 111, 32, 119, 97, 115, 104, 32, 121, 111, 117, 114, 32, 109, 111, 117, 116, 104, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_72[] = { +72, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_73[] = { +77, 65, 46, 89, 32, 46, 69, 76, 46, 83, 84, 69, 32, 32, 46, 79, 86, 32, 49, 56, 46, 49, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 175, + 9, 1, 0, 3, 0, 1, + 81, 58, 105, 73, +/* AUTO 0 */ + 203, + 0, 0, 0, 3, + 79, 81, 86, 106, +/* AUTO 100 */ + 165, + 4, 18, + 56, 64, +/* AUTO 100 */ + 165, + 4, 2, + 57, 64, +/* AUTO 100 */ + 172, + 4, 18, 9, 2, 0, 28, + 59, +/* AUTO 100 */ + 166, + 18, 32, + 112, 113, 63, +/* AUTO 100 */ + 178, + 7, 32, 0, 1, 0, 4, 0, 1, + 81, 79, 81, +/* AUTO 100 */ + 170, + 4, 32, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 198, + 19, 0, + 103, 104, 61, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 */ + 179, + 4, 10, 8, 7, 0, 6, 0, 10, + 54, 64, 54, 73, +/* AUTO 0 */ + 203, + 0, 6, 0, 10, + 64, 54, 64, 54, +/* AUTO 0 */ + 192, + 64, +/* AUTO 0 */ +/* AUTO 0 */ + 198, + 0, 10, + 54, 64, 10, +/* AUTO 25 */ + 150, 25, + 4, 10, 8, 7, 9, 10, 0, 4, 0, 7, + 81, 60, 73, +/* AUTO 0 */ + 210, + 0, 1, 0, 12, 0, 1, 0, 4, + 79, 62, 81, +/* AUTO 30 */ + 150, 30, + 4, 10, 8, 7, 9, 10, 0, 4, 0, 7, + 81, 60, 73, +/* AUTO 0 */ + 210, + 0, 2, 0, 12, 0, 2, 0, 4, + 79, 62, 81, +/* AUTO 35 */ + 150, 35, + 4, 10, 8, 7, 9, 10, 0, 4, 0, 7, + 81, 60, 73, +/* AUTO 0 */ + 210, + 0, 3, 0, 12, 0, 3, 0, 4, + 79, 62, 81, +/* AUTO 15 */ + 150, 15, + 4, 10, 8, 7, 9, 10, 0, 4, 0, 7, + 81, 60, 73, +/* AUTO 0 */ + 210, + 0, 6, 0, 12, 0, 6, 0, 4, + 79, 62, 81, +/* AUTO 100 */ + 182, + 4, 10, 8, 7, 9, 10, 0, 4, 0, 7, + 81, 60, 73, +/* AUTO 0 */ + 201, + 0, 4, 0, 4, + 79, 81, +/* AUTO 100 */ + 178, + 4, 4, 0, 4, 0, 4, 0, 4, + 81, 79, 81, +/* AUTO 100 */ + 181, + 1, 45, 4, 20, 14, 29, 14, 58, 14, 30, + 116, 73, +/* AUTO 0 */ + 209, + 0, 29, 0, 21, 0, 31, 0, 21, + 62, 62, +/* AUTO 100 */ + 164, + 4, 44, + 63, +/* AUTO 100 */ + 180, + 14, 35, 14, 36, 14, 37, 9, 10, 0, 10, + 58, +/* AUTO 100 */ + 165, + 0, 3, + 81, 73, +/* AUTO 0 */ + 204, + 19, 3, 13, 37, 0, 37, + 59, +/* AUTO 0 */ + 208, + 19, 2, 13, 36, 0, 36, 0, 37, + 72, +/* AUTO 0 */ + 208, + 19, 1, 13, 35, 0, 35, 0, 36, + 72, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* AUTO 100 */ + 172, + 8, 16, 14, 62, 0, 62, + 53, +/* AUTO 100 */ + 176, + 7, 17, 18, 28, 0, 28, 0, 17, + 62, +/* AUTO 100 */ + 176, + 4, 17, 8, 6, 5, 28, 0, 28, + 53, +}; +const uint8_t actions[] = { +/* DROP MACH */ + 10, 18, 19, + 4, 10, 0, 4, + 109, 81, 73, +/* AUTO 0 */ + 211, + 15, 1, 0, 1, 0, 1, 0, 12, + 79, 54, 53, 64, +/* AUTO 0 */ + 206, + 19, 2, 0, 2, 0, 12, + 54, 53, 64, +/* AUTO 0 */ + 206, + 19, 3, 0, 3, 0, 12, + 54, 53, 64, +/* AUTO 0 */ + 201, + 19, 4, 0, 4, + 54, 64, +/* AUTO 0 */ + 206, + 19, 5, 0, 5, 0, 12, + 54, 53, 64, +/* AUTO 0 */ + 211, + 16, 5, 0, 6, 0, 6, 0, 12, + 79, 54, 53, 64, +/* AUTO 0 */ + 202, + 0, 7, 0, 4, + 60, 81, 64, +/* GO MACH */ + 9, 1, 19, + 4, 4, 0, 10, + 54, 109, +/* GO MACH */ + 10, 1, 19, + 2, 12, 0, 10, + 109, 54, 64, +/* AUTO 0 */ +/* AUTO 0 */ +/* GO WIND */ + 10, 1, 11, + 4, 39, 0, 36, + 109, 54, 64, +/* GET GLOV */ + 8, 10, 9, + 3, 1, 0, 1, + 52, +/* WEAR GLOV */ + 13, 34, 9, + 1, 1, 0, 1, 0, 33, + 109, 72, +/* DROP GLOV */ + 9, 18, 9, + 1, 1, 0, 1, + 53, 109, +/* DROP GLOV */ + 4, 18, 9, + 1, 33, + 120, +/* REMO GLOV */ + 13, 36, 9, + 1, 33, 0, 33, 0, 1, + 72, 109, +/* BREA WIND */ + 8, 39, 11, + 4, 36, 8, 3, + 108, +/* BREA WIND */ + 15, 39, 11, + 4, 36, 9, 3, 6, 33, + 109, 103, 25, 61, +/* BREA WIND */ + 23, 39, 11, + 4, 36, 9, 3, 1, 33, 0, 8, 0, 3, + 109, 53, 58, 64, +/* GO WIND */ + 14, 1, 11, + 4, 36, 8, 3, 0, 39, + 109, 54, 64, +/* PRES BUTT */ + 4, 63, 43, + 4, 10, + 11, +/* LOOK PAIN */ + 14, 7, 13, + 2, 2, 14, 5, 0, 5, + 109, 53, 110, +/* OPEN DRAW */ + 12, 5, 15, + 4, 39, 2, 3, 6, 5, + 3, +/* OPEN DRAW */ + 21, 5, 15, + 4, 39, 2, 3, 1, 5, 0, 3, 0, 4, + 109, 72, +/* LOOK DRAW */ + 23, 7, 15, + 4, 39, 2, 4, 14, 6, 0, 6, 0, 7, + 17, 23, 53, 53, +/* PRES FOR */ + 15, 63, 45, + 4, 10, 9, 10, 0, 7, + 109, 58, 114, 115, +/* PRES REV */ + 15, 63, 44, + 4, 10, 9, 10, 0, 7, + 109, 58, 114, 115, +/* OPEN DOOR */ + 21, 5, 7, + 4, 37, 2, 49, 1, 5, 0, 49, 0, 50, + 72, 109, +/* OPEN DOOR */ + 12, 5, 7, + 4, 37, 2, 49, 6, 5, + 3, +/* GO DOOR */ + 10, 1, 7, + 2, 50, 0, 4, + 109, 54, 64, +/* GRAB BUSH */ + 10, 68, 10, + 4, 32, 0, 43, + 54, 64, 111, +/* SWIM ANY */ + 4, 42, 0, + 4, 32, + 49, +/* LOOK CASS */ + 6, 7, 50, + 3, 11, + 17, 36, 37, +/* RING BELL */ + 5, 43, 8, + 4, 34, + 12, 12, +/* OPEN WIND */ + 8, 5, 11, + 4, 36, 14, 8, + 6, +/* GET PRIS */ + 8, 10, 77, + 3, 16, 0, 16, + 52, +/* GET PRIS */ + 8, 10, 77, + 3, 45, 0, 45, + 52, +/* GET PRIS */ + 8, 10, 77, + 3, 46, 0, 46, + 52, +/* DROP PRIS */ + 9, 18, 77, + 1, 16, 0, 16, + 53, 109, +/* DROP PRIS */ + 9, 18, 77, + 1, 45, 0, 45, + 53, 109, +/* DROP PRIS */ + 9, 18, 77, + 1, 46, 0, 46, + 53, 109, +/* FIT PRIS */ + 23, 71, 77, + 1, 16, 4, 10, 0, 3, 0, 16, 0, 38, + 81, 62, 109, 73, +/* AUTO 0 */ + 203, + 0, 1, 0, 3, + 88, 82, 81, 15, +/* FIT PRIS */ + 23, 71, 77, + 4, 10, 1, 45, 0, 3, 0, 45, 0, 38, + 109, 81, 62, 73, +/* AUTO 0 */ + 203, + 0, 1, 0, 3, + 82, 81, 88, 15, +/* FIT PRIS */ + 23, 71, 77, + 4, 10, 1, 46, 0, 3, 0, 46, 0, 38, + 109, 81, 62, 73, +/* AUTO 0 */ + 203, + 0, 1, 0, 3, + 88, 82, 81, 15, +/* EAT BEEF */ + 15, 60, 63, + 3, 18, 0, 18, 0, 38, + 62, 109, 29, 64, +/* EAT BISC */ + 15, 60, 65, + 3, 19, 0, 19, 0, 38, + 62, 109, 29, 64, +/* LOOK MACH */ + 4, 7, 19, + 2, 12, + 42, +/* CLIM RIGG */ + 10, 26, 31, + 4, 24, 0, 29, + 109, 54, 64, +/* LOOK POUC */ + 15, 7, 71, + 3, 15, 14, 46, 0, 46, + 53, 109, 110, 64, +/* LOOK BUTT */ + 5, 7, 43, + 4, 10, + 109, 107, +/* LOOK LOG */ + 5, 7, 68, + 3, 21, + 16, 123, +/* PRES FOR */ + 23, 63, 45, + 4, 10, 8, 10, 0, 4, 0, 1, 0, 4, + 81, 82, 81, 10, +/* PRES REV */ + 19, 63, 44, + 4, 10, 8, 10, 0, 4, 0, 4, + 81, 77, 81, 10, +/* OPEN DOOR */ + 8, 5, 7, + 4, 28, 2, 56, + 8, +/* OPEN DOOR */ + 13, 5, 7, + 4, 28, 2, 44, 6, 7, + 45, 50, +/* OPEN DOOR */ + 21, 5, 7, + 4, 28, 2, 44, 1, 7, 0, 44, 0, 56, + 109, 72, +/* GO DOOR */ + 10, 1, 7, + 2, 56, 0, 26, + 109, 54, 64, +/* PLAY CASS */ + 7, 61, 50, + 3, 11, + 109, 16, 118, 119, +/* LIGH FLAS */ + 14, 22, 48, + 1, 10, 0, 10, 0, 9, + 109, 72, 64, +/* UNLI FLAS */ + 14, 24, 48, + 1, 9, 0, 9, 0, 10, + 109, 72, 64, +/* FEED BRON */ + 23, 49, 52, + 2, 22, 1, 19, 0, 22, 0, 19, 0, 38, + 59, 62, 2, 34, +/* FEED BRON */ + 10, 49, 52, + 2, 22, 6, 19, + 45, 2, 33, +/* LOOK BRON */ + 4, 7, 52, + 2, 22, + 46, +/* GO CAUS */ + 10, 1, 39, + 4, 13, 2, 22, + 45, 2, 102, +/* GO CAUS */ + 14, 1, 39, + 4, 13, 14, 22, 0, 14, + 109, 54, 64, +/* GO BOAT */ + 8, 1, 53, + 4, 14, 2, 23, + 4, +/* LOOK BOAT */ + 4, 7, 53, + 2, 23, + 38, +/* GO BOAT */ + 19, 1, 53, + 2, 57, 4, 14, 0, 15, 0, 57, + 109, 54, 53, 64, +/* GO BOAT */ + 15, 1, 53, + 4, 15, 0, 14, 0, 57, + 109, 54, 53, 64, +/* MEND BOAT */ + 23, 50, 53, + 2, 23, 3, 13, 3, 14, 3, 20, 0, 13, + 59, 109, 27, 73, +/* AUTO 0 */ + 210, + 0, 23, 0, 57, 0, 14, 0, 20, + 72, 59, 59, +/* MEND BOAT */ + 5, 50, 53, + 2, 23, + 45, 28, +/* DIG ANY */ + 19, 47, 0, + 4, 15, 1, 24, 14, 16, 0, 16, + 109, 17, 23, 53, +/* DIG ANY */ + 9, 47, 0, + 4, 15, 1, 24, + 17, 9, +/* LOOK STON */ + 5, 7, 80, + 4, 2, + 17, 43, +/* PRES STON */ + 10, 63, 80, + 4, 2, 0, 31, + 109, 47, 53, +/* GO OPEN */ + 19, 1, 81, + 4, 2, 2, 31, 0, 18, 0, 31, + 109, 54, 59, 117, +/* PULL LEVE */ + 14, 56, 59, + 4, 19, 0, 28, 0, 17, + 62, 47, 13, +/* JAM LEVE */ + 18, 53, 59, + 4, 19, 1, 25, 0, 2, 0, 25, + 58, 53, 109, +/* JAM LEVE */ + 9, 53, 59, + 4, 19, 6, 25, + 45, 14, +/* GO DOOR */ + 14, 1, 7, + 4, 17, 2, 28, 0, 21, + 109, 54, 64, +/* LOOK STAT */ + 4, 7, 29, + 2, 43, + 41, +/* CLIM STAT */ + 10, 26, 29, + 2, 43, 0, 20, + 109, 54, 64, +/* GO OPEN */ + 10, 1, 81, + 4, 21, 2, 29, + 45, 51, 102, +/* GO OPEN */ + 14, 1, 81, + 4, 21, 2, 31, 0, 22, + 109, 54, 64, +/* FEED DOG */ + 23, 49, 60, + 2, 29, 1, 18, 0, 18, 0, 29, 0, 58, + 59, 72, 51, 32, +/* FEED DOG */ + 23, 49, 60, + 2, 29, 1, 19, 0, 19, 0, 29, 0, 58, + 59, 72, 51, 32, +/* FEED DOG */ + 9, 49, 60, + 6, 18, 6, 19, + 45, 31, +/* FEED DOG */ + 4, 49, 60, + 2, 30, + 30, +/* LOOK DOG */ + 4, 7, 60, + 2, 29, + 46, +/* KILL DOG */ + 18, 31, 60, + 2, 29, 1, 6, 0, 29, 0, 30, + 72, 26, 18, +/* KILL DOG */ + 22, 31, 60, + 2, 29, 1, 26, 0, 26, 0, 29, 0, 30, + 53, 72, 18, +/* SHOO DOG */ + 18, 58, 60, + 2, 29, 1, 6, 0, 29, 0, 30, + 26, 72, 18, +/* KILL DOG */ + 13, 31, 60, + 2, 29, 6, 6, 6, 26, + 45, 22, +/* KILL DOG */ + 4, 31, 60, + 2, 30, + 19, +/* OPEN CHES */ + 9, 5, 69, + 3, 17, 6, 7, + 45, 50, +/* OPEN CHES */ + 23, 5, 69, + 3, 17, 1, 7, 0, 17, 0, 51, 0, 40, + 72, 53, 17, 23, +/* LEVE META */ + 22, 79, 74, + 4, 5, 2, 53, 1, 7, 0, 53, 0, 54, + 72, 109, 64, +/* HELP ANY */ + 8, 66, 0, + 4, 6, 9, 10, + 7, +/* GO SHAF */ + 10, 1, 42, + 2, 54, 0, 41, + 54, 109, 64, +/* BREA GENE */ + 8, 39, 35, + 2, 59, 6, 40, + 24, +/* BREA GENE */ + 19, 39, 35, + 2, 59, 1, 40, 0, 59, 0, 61, + 72, 109, 47, 73, +/* AUTO 0 */ + 200, + 0, 42, 0, 47, + 72, +/* GO ARCH */ + 6, 1, 41, + 2, 42, + 45, 39, 102, +/* GO ARCH */ + 10, 1, 41, + 2, 47, 0, 42, + 109, 54, 64, +/* LOOK ROBO */ + 4, 7, 55, + 2, 42, + 5, +/* LOOK DOCT */ + 4, 7, 46, + 3, 32, + 35, +/* SHOO ANY */ + 4, 58, 0, + 1, 6, + 26, +/* GO LAKE */ + 4, 1, 38, + 4, 13, + 48, +/* HELP ANY */ + 0, 66, 0, + 44, +/* INVE ANY */ + 0, 38, 0, + 66, +/* GET INVE */ + 0, 10, 83, + 66, +/* SAVE ANY */ + 0, 57, 0, + 71, +/* QUIT ANY */ + 0, 44, 0, + 63, +/* LOOK ANY */ + 1, 7, 0, + 17, 40, +/* GO ANY */ + 0, 1, 0, + 45, +/* FUCK ANY */ + 0, 74, 0, + 121, +/* KILL ANY */ + 0, 31, 0, + 45, +/* EAT ANY */ + 0, 60, 0, + 20, +/* SAY ANY */ + 3, 17, 0, + 109, 85, 9, 122, +/* WAIT ANY */ + 2, 84, 0, + 21, 88, 88, +/* AUTO 0 */ + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *RUN */ + 210, 85, 78, 32, + /* *WALK */ + 215, 65, 76, 75, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *SEAR */ + 211, 69, 65, 82, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *PICK */ + 208, 73, 67, 75, + /* THRO */ + 84, 72, 82, 79, + /* *SLIN */ + 211, 76, 73, 78, + /* *CHUC */ + 195, 72, 85, 67, + /* *HURL */ + 200, 85, 82, 76, + /* SAY */ + 83, 65, 89, 32, + /* DROP */ + 68, 82, 79, 80, + /* *PUT */ + 208, 85, 84, 32, + /* *GIVE */ + 199, 73, 86, 69, + /* *LEAV */ + 204, 69, 65, 86, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* UNLI */ + 85, 78, 76, 73, + /* *DOUS */ + 196, 79, 85, 83, + /* CLIM */ + 67, 76, 73, 77, + /* *ASCE */ + 193, 83, 67, 69, + /* READ */ + 82, 69, 65, 68, + /* MOVE */ + 77, 79, 86, 69, + /* LOAD */ + 76, 79, 65, 68, + /* KILL */ + 75, 73, 76, 76, + /* *MURD */ + 205, 85, 82, 68, + /* *SLAY */ + 211, 76, 65, 89, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* INVE */ + 73, 78, 86, 69, + /* BREA */ + 66, 82, 69, 65, + /* *SMAS */ + 211, 77, 65, 83, + /* *DEST */ + 196, 69, 83, 84, + /* SWIM */ + 83, 87, 73, 77, + /* RING */ + 82, 73, 78, 71, + /* QUIT */ + 81, 85, 73, 84, + /* *END */ + 197, 78, 68, 32, + /* SAIL */ + 83, 65, 73, 76, + /* DIG */ + 68, 73, 71, 32, + /* *SHOV */ + 211, 72, 79, 86, + /* FEED */ + 70, 69, 69, 68, + /* MEND */ + 77, 69, 78, 68, + /* *FIX */ + 198, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* JAM */ + 74, 65, 77, 32, + /* *WEDG */ + 215, 69, 68, 71, + /* TOUC */ + 84, 79, 85, 67, + /* PULL */ + 80, 85, 76, 76, + /* SAVE */ + 83, 65, 86, 69, + /* SHOO */ + 83, 72, 79, 79, + /* *FIRE */ + 198, 73, 82, 69, + /* EAT */ + 69, 65, 84, 32, + /* PLAY */ + 80, 76, 65, 89, + /* *STAR */ + 211, 84, 65, 82, + /* PRES */ + 80, 82, 69, 83, + /* *PUSH */ + 208, 85, 83, 72, + /* *JAB */ + 202, 65, 66, 32, + /* HELP */ + 72, 69, 76, 80, + /* SCOR */ + 83, 67, 79, 82, + /* GRAB */ + 71, 82, 65, 66, + /* FOR */ + 70, 79, 82, 32, + /* REV */ + 82, 69, 86, 32, + /* FIT */ + 70, 73, 84, 32, + /* *INSE */ + 201, 78, 83, 69, + /* *PLUG */ + 208, 76, 85, 71, + /* FUCK */ + 70, 85, 67, 75, + /* *BOLL */ + 194, 79, 76, 76, + /* *BAST */ + 194, 65, 83, 84, + /* *BALL */ + 194, 65, 76, 76, + /* *SHIT */ + 211, 72, 73, 84, + /* LEVE */ + 76, 69, 86, 69, + /* *FORC */ + 198, 79, 82, 67, + /* *PRIS */ + 208, 82, 73, 83, + /* *JEMM */ + 202, 69, 77, 77, + /* *CROW */ + 195, 82, 79, 87, + /* WAIT */ + 87, 65, 73, 84, + /* *STAL */ + 211, 84, 65, 76, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* DOOR */ + 68, 79, 79, 82, + /* BELL */ + 66, 69, 76, 76, + /* GLOV */ + 71, 76, 79, 86, + /* BUSH */ + 66, 85, 83, 72, + /* WIND */ + 87, 73, 78, 68, + /* GLAS */ + 71, 76, 65, 83, + /* PAIN */ + 80, 65, 73, 78, + /* KEY */ + 75, 69, 89, 32, + /* DRAW */ + 68, 82, 65, 87, + /* PIST */ + 80, 73, 83, 84, + /* CROW */ + 67, 82, 79, 87, + /* *BAR */ + 194, 65, 82, 32, + /* MACH */ + 77, 65, 67, 72, + /* *PORT */ + 208, 79, 82, 84, + /* POLI */ + 80, 79, 76, 73, + /* HOUS */ + 72, 79, 85, 83, + /* STUD */ + 83, 84, 85, 68, + /* CELL */ + 67, 69, 76, 76, + /* SPHI */ + 83, 80, 72, 73, + /* BOX */ + 66, 79, 88, 32, + /* WALL */ + 87, 65, 76, 76, + /* WEAP */ + 87, 69, 65, 80, + /* STAT */ + 83, 84, 65, 84, + /* DECK */ + 68, 69, 67, 75, + /* RIGG */ + 82, 73, 71, 71, + /* CABI */ + 67, 65, 66, 73, + /* LOCK */ + 76, 79, 67, 75, + /* PLAI */ + 80, 76, 65, 73, + /* GENE */ + 71, 69, 78, 69, + /* CORR */ + 67, 79, 82, 82, + /* SWAM */ + 83, 87, 65, 77, + /* LAKE */ + 76, 65, 75, 69, + /* CAUS */ + 67, 65, 85, 83, + /* ISLA */ + 73, 83, 76, 65, + /* ARCH */ + 65, 82, 67, 72, + /* SHAF */ + 83, 72, 65, 70, + /* BUTT */ + 66, 85, 84, 84, + /* REV */ + 82, 69, 86, 32, + /* FOR */ + 70, 79, 82, 32, + /* DOCT */ + 68, 79, 67, 84, + /* *POTT */ + 208, 79, 84, 84, + /* FLAS */ + 70, 76, 65, 83, + /* *LAMP */ + 204, 65, 77, 80, + /* CASS */ + 67, 65, 83, 83, + /* *TAPE */ + 212, 65, 80, 69, + /* BRON */ + 66, 82, 79, 78, + /* BOAT */ + 66, 79, 65, 84, + /* SHOV */ + 83, 72, 79, 86, + /* ROBO */ + 82, 79, 66, 79, + /* *GUAR */ + 199, 85, 65, 82, + /* ROCK */ + 82, 79, 67, 75, + /* SPEA */ + 83, 80, 69, 65, + /* LEVE */ + 76, 69, 86, 69, + /* DOG */ + 68, 79, 71, 32, + /* ROPE */ + 82, 79, 80, 69, + /* SAIL */ + 83, 65, 73, 76, + /* BEEF */ + 66, 69, 69, 70, + /* *SALT */ + 211, 65, 76, 84, + /* BISC */ + 66, 73, 83, 67, + /* NEED */ + 78, 69, 69, 68, + /* *THRE */ + 212, 72, 82, 69, + /* LOG */ + 76, 79, 71, 32, + /* CHES */ + 67, 72, 69, 83, + /* HAMM */ + 72, 65, 77, 77, + /* POUC */ + 80, 79, 85, 67, + /* *LEAT */ + 204, 69, 65, 84, + /* HOLE */ + 72, 79, 76, 69, + /* META */ + 77, 69, 84, 65, + /* *PLAT */ + 208, 76, 65, 84, + /* FIRS */ + 70, 73, 82, 83, + /* PRIS */ + 80, 82, 73, 83, + /* OFF */ + 79, 70, 70, 32, + /* *YOU */ + 217, 79, 85, 32, + /* STON */ + 83, 84, 79, 78, + /* OPEN */ + 79, 80, 69, 78, + /* GAME */ + 71, 65, 77, 69, + /* INVE */ + 73, 78, 86, 69, + /* TUNN */ + 84, 85, 78, 78, + /* MOOR */ + 77, 79, 79, 82, + /* SOCK */ + 83, 79, 67, 75, + /* SHAF */ + 83, 72, 65, 70, + 0, +}; +const uint8_t automap[] = { + /* KEY */ + 75, 69, 89, 32, + 5, + /* PIST */ + 80, 73, 83, 84, + 6, + /* CROW */ + 67, 82, 79, 87, + 7, + /* GLAS */ + 71, 76, 65, 83, + 8, + /* FLAS */ + 70, 76, 65, 83, + 9, + /* FLAS */ + 70, 76, 65, 83, + 10, + /* CASS */ + 67, 65, 83, 83, + 11, + /* ROPE */ + 82, 79, 80, 69, + 13, + /* SAIL */ + 83, 65, 73, 76, + 14, + /* POUC */ + 80, 79, 85, 67, + 15, + /* CHES */ + 67, 72, 69, 83, + 17, + /* BEEF */ + 66, 69, 69, 70, + 18, + /* BISC */ + 66, 73, 83, 67, + 19, + /* NEED */ + 78, 69, 69, 68, + 20, + /* LOG */ + 76, 79, 71, 32, + 21, + /* SHOV */ + 83, 72, 79, 86, + 24, + /* ROCK */ + 82, 79, 67, 75, + 25, + /* SPEA */ + 83, 80, 69, 65, + 26, + /* LEVE */ + 76, 69, 86, 69, + 27, + /* DOCT */ + 68, 79, 67, 84, + 32, + /* HAMM */ + 72, 65, 77, 77, + 40, + /* FLAS */ + 70, 76, 65, 83, + 62, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst03.c b/Applications/games/myst03.c new file mode 100644 index 00000000..417ec59a --- /dev/null +++ b/Applications/games/myst03.c @@ -0,0 +1,2886 @@ +#define NUM_OBJ 64 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 0; +const uint8_t maxcar = 5; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 52; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +40, 67, 41, 32, 49, 57, 56, 50, 32, 66, 46, 72, 46, 0 }; +const uint8_t loctxt_1[] = { +67, 111, 117, 114, 116, 121, 97, 114, 100, 0 }; +const uint8_t loctxt_2[] = { +80, 97, 108, 97, 99, 101, 0 }; +const uint8_t loctxt_3[] = { +84, 104, 114, 111, 110, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_4[] = { +75, 105, 116, 99, 104, 101, 110, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 75, 105, 110, 103, 39, 115, 32, 67, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_6[] = { +115, 101, 99, 114, 101, 116, 32, 86, 97, 117, 108, 116, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 67, 114, 111, 115, 115, 114, 111, 97, 100, 115, 0 }; +const uint8_t loctxt_8[] = { +100, 101, 110, 115, 101, 32, 70, 111, 114, 101, 115, 116, 0 }; +const uint8_t loctxt_9[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 77, 111, 117, 110, 116, 97, 105, 110, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 83, 99, 114, 101, 101, 32, 115, 108, 111, 112, 101, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 77, 111, 117, 110, 116, 97, 105, 110, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_12[] = { +67, 108, 105, 102, 102, 32, 83, 104, 101, 108, 116, 101, 114, 0 }; +const uint8_t loctxt_13[] = { +67, 97, 118, 101, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 67, 108, 105, 102, 102, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 115, 116, 114, 97, 110, 103, 101, 32, 76, 97, 107, 101, 0 }; +const uint8_t loctxt_16[] = { +109, 121, 115, 116, 101, 114, 105, 111, 117, 115, 32, 66, 97, 114, 103, 101, 0 }; +const uint8_t loctxt_17[] = { +100, 114, 105, 101, 100, 32, 117, 112, 32, 80, 111, 111, 108, 0 }; +const uint8_t loctxt_18[] = { +114, 117, 105, 110, 101, 100, 32, 70, 111, 114, 101, 115, 116, 0 }; +const uint8_t loctxt_19[] = { +67, 108, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_20[] = { +71, 73, 65, 78, 84, 32, 66, 117, 105, 108, 100, 105, 110, 103, 0 }; +const uint8_t loctxt_21[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 71, 73, 65, 78, 84, 32, 66, 117, 105, 108, 100, 105, 110, 103, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 67, 111, 111, 107, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_23[] = { +71, 73, 65, 78, 84, 39, 83, 32, 67, 111, 111, 107, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_24[] = { +76, 117, 109, 98, 101, 114, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_25[] = { +114, 105, 110, 103, 32, 111, 102, 32, 84, 111, 97, 100, 115, 116, 111, 111, 108, 115, 0 }; +const uint8_t loctxt_26[] = { +100, 101, 101, 112, 32, 70, 111, 114, 101, 115, 116, 32, 67, 117, 116, 116, 105, 110, 103, 0 }; +const uint8_t loctxt_27[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 76, 111, 103, 32, 70, 108, 117, 109, 101, 0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 82, 111, 99, 107, 32, 87, 97, 108, 108, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_30[] = { +67, 97, 118, 101, 0 }; +const uint8_t loctxt_31[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 111, 103, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 111, 103, 0 }; +const uint8_t loctxt_33[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 67, 108, 105, 102, 102, 0 }; +const uint8_t loctxt_34[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_35[] = { +71, 114, 101, 101, 110, 32, 80, 97, 115, 116, 117, 114, 101, 0 }; +const uint8_t loctxt_36[] = { +71, 114, 101, 101, 110, 32, 80, 97, 115, 116, 117, 114, 101, 0 }; +const uint8_t loctxt_37[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 66, 114, 111, 111, 107, 0 }; +const uint8_t loctxt_38[] = { +66, 97, 98, 98, 108, 105, 110, 103, 32, 66, 114, 111, 111, 107, 0 }; +const uint8_t loctxt_39[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 103, 114, 97, 115, 115, 121, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_40[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_41[] = { +66, 117, 114, 110, 116, 45, 100, 111, 119, 110, 32, 86, 105, 108, 108, 97, 103, 101, 0 }; +const uint8_t loctxt_42[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_43[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 74, 117, 110, 99, 116, 105, 111, 110, 0 }; +const uint8_t loctxt_44[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 77, 97, 114, 115, 104, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_45[] = { +87, 111, 111, 100, 101, 110, 32, 72, 117, 116, 0 }; +const uint8_t loctxt_46[] = { +66, 117, 114, 110, 116, 45, 100, 111, 119, 110, 32, 86, 105, 108, 108, 97, 103, 101, 0 }; +const uint8_t loctxt_47[] = { +77, 97, 114, 115, 104, 0 }; +const uint8_t loctxt_48[] = { +67, 105, 114, 99, 108, 101, 32, 111, 102, 32, 84, 114, 101, 101, 115, 0 }; +const uint8_t loctxt_49[] = { +67, 101, 108, 108, 97, 114, 0 }; +const uint8_t loctxt_50[] = { +87, 105, 108, 108, 111, 119, 32, 71, 114, 111, 118, 101, 0 }; +const uint8_t loctxt_51[] = { +32, 0 }; +const uint8_t loctxt_52[] = { +67, 114, 121, 112, 116, 32, 119, 105, 116, 104, 32, 110, 111, 32, 69, 120, 105, 116, 33, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 7, 0, 0, 2, 0, 0 } }, + { loctxt_2, { 0, 3, 1, 5, 0, 0 } }, + { loctxt_3, { 2, 0, 4, 0, 0, 0 } }, + { loctxt_4, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_5, { 0, 0, 2, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 5, 0, 0 } }, + { loctxt_7, { 11, 1, 8, 9, 0, 0 } }, + { loctxt_8, { 11, 8, 1, 11, 0, 0 } }, + { loctxt_9, { 0, 9, 11, 10, 0, 0 } }, + { loctxt_10, { 0, 0, 9, 0, 0, 0 } }, + { loctxt_11, { 0, 7, 8, 10, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 10 } }, + { loctxt_13, { 0, 12, 0, 0, 0, 0 } }, + { loctxt_14, { 15, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 14, 0, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 18, 0, 0, 0, 0 } }, + { loctxt_18, { 17, 21, 19, 0, 0, 0 } }, + { loctxt_19, { 0, 22, 0, 18, 0, 0 } }, + { loctxt_20, { 21, 0, 0, 0, 0, 0 } }, + { loctxt_21, { 18, 0, 22, 0, 0, 0 } }, + { loctxt_22, { 19, 26, 0, 21, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 22, 0, 0 } }, + { loctxt_24, { 0, 0, 0, 27, 0, 20 } }, + { loctxt_25, { 0, 28, 26, 0, 0, 0 } }, + { loctxt_26, { 22, 0, 0, 25, 29, 0 } }, + { loctxt_27, { 0, 0, 24, 0, 0, 0 } }, + { loctxt_28, { 25, 0, 0, 0, 0, 0 } }, + { loctxt_29, { 0, 0, 0, 0, 0, 26 } }, + { loctxt_30, { 29, 0, 0, 0, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 0, 0, 0, 34, 0 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 33 } }, + { loctxt_35, { 36, 36, 35, 36, 0, 0 } }, + { loctxt_36, { 37, 35, 36, 35, 0, 0 } }, + { loctxt_37, { 38, 35, 0, 0, 0, 0 } }, + { loctxt_38, { 39, 37, 0, 0, 0, 0 } }, + { loctxt_39, { 40, 38, 0, 0, 0, 0 } }, + { loctxt_40, { 43, 39, 0, 0, 0, 0 } }, + { loctxt_41, { 42, 0, 0, 0, 0, 0 } }, + { loctxt_42, { 46, 41, 43, 0, 0, 0 } }, + { loctxt_43, { 0, 40, 44, 42, 0, 0 } }, + { loctxt_44, { 0, 0, 0, 43, 0, 0 } }, + { loctxt_45, { 0, 40, 0, 0, 0, 0 } }, + { loctxt_46, { 0, 42, 0, 0, 0, 0 } }, + { loctxt_47, { 0, 44, 48, 0, 0, 0 } }, + { loctxt_48, { 50, 0, 0, 0, 0, 0 } }, + { loctxt_49, { 0, 0, 0, 0, 46, 0 } }, + { loctxt_50, { 0, 48, 0, 0, 0, 0 } }, + { loctxt_51, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_52, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 1, + 0, + 5, + 5, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 3, + 5, + 0, + 0, + 0, + 7, + 24, + 0, + 13, + 13, + 15, + 15, + 0, + 0, + 18, + 0, + 0, + 0, + 0, + 20, + 19, + 0, + 23, + 22, + 25, + 29, + 20, + 27, + 30, + 34, + 0, + 0, + 45, + 0, + 0, + 46, + 0, + 49, + 49, + 0, + 0, + 50, + 50, + 0, + 44, + 21, + 32, + 40, + 0, + 0, + 10, + 0, +}; + + +const uint8_t objtxt_0[] = { +68, 101, 97, 100, 32, 77, 101, 115, 115, 101, 110, 103, 101, 114, 0 }; +const uint8_t objtxt_1[] = { +87, 105, 108, 108, 111, 119, 32, 66, 114, 97, 110, 99, 104, 0 }; +const uint8_t objtxt_2[] = { +66, 101, 100, 0 }; +const uint8_t objtxt_3[] = { +83, 117, 105, 116, 32, 111, 102, 32, 65, 114, 109, 111, 117, 114, 0 }; +const uint8_t objtxt_4[] = { +65, 114, 109, 111, 117, 114, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_5[] = { +83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_6[] = { +80, 117, 114, 115, 101, 0 }; +const uint8_t objtxt_7[] = { +67, 111, 105, 110, 115, 0 }; +const uint8_t objtxt_8[] = { +65, 109, 117, 108, 101, 116, 0 }; +const uint8_t objtxt_9[] = { +71, 108, 111, 119, 105, 110, 103, 32, 79, 114, 98, 0 }; +const uint8_t objtxt_10[] = { +83, 101, 99, 114, 101, 116, 32, 80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t objtxt_11[] = { +90, 65, 82, 68, 82, 65, 32, 116, 104, 101, 32, 77, 97, 103, 105, 99, 105, 97, 110, 0 }; +const uint8_t objtxt_12[] = { +90, 65, 82, 68, 82, 65, 32, 40, 100, 101, 97, 100, 41, 0 }; +const uint8_t objtxt_13[] = { +84, 104, 101, 32, 71, 79, 76, 68, 69, 78, 32, 66, 65, 84, 79, 78, 0 }; +const uint8_t objtxt_14[] = { +67, 111, 97, 116, 32, 111, 102, 32, 65, 114, 109, 115, 0 }; +const uint8_t objtxt_15[] = { +80, 105, 108, 108, 111, 119, 0 }; +const uint8_t objtxt_16[] = { +72, 111, 111, 107, 0 }; +const uint8_t objtxt_17[] = { +72, 111, 111, 107, 32, 40, 116, 105, 101, 100, 32, 116, 111, 32, 82, 111, 112, 101, 41, 0 }; +const uint8_t objtxt_18[] = { +66, 101, 103, 103, 97, 114, 0 }; +const uint8_t objtxt_19[] = { +76, 111, 103, 0 }; +const uint8_t objtxt_20[] = { +71, 108, 97, 115, 115, 32, 79, 114, 98, 0 }; +const uint8_t objtxt_21[] = { +72, 117, 103, 101, 32, 83, 101, 114, 112, 101, 110, 116, 0 }; +const uint8_t objtxt_22[] = { +65, 114, 114, 111, 119, 104, 101, 97, 100, 0 }; +const uint8_t objtxt_23[] = { +70, 101, 114, 114, 121, 109, 97, 110, 0 }; +const uint8_t objtxt_24[] = { +66, 97, 114, 103, 101, 0 }; +const uint8_t objtxt_25[] = { +67, 97, 118, 101, 32, 69, 110, 116, 114, 97, 110, 99, 101, 0 }; +const uint8_t objtxt_26[] = { +32, 0 }; +const uint8_t objtxt_27[] = { +84, 114, 101, 101, 32, 83, 116, 117, 109, 112, 115, 0 }; +const uint8_t objtxt_28[] = { +82, 111, 112, 101, 0 }; +const uint8_t objtxt_29[] = { +82, 111, 112, 101, 32, 119, 105, 116, 104, 32, 72, 111, 111, 107, 32, 111, 110, 32, 101, 110, 100, 0 }; +const uint8_t objtxt_30[] = { +32, 0 }; +const uint8_t objtxt_31[] = { +65, 110, 103, 114, 121, 32, 71, 73, 65, 78, 84, 83, 0 }; +const uint8_t objtxt_32[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 71, 73, 65, 78, 84, 83, 0 }; +const uint8_t objtxt_33[] = { +67, 104, 97, 105, 110, 101, 100, 32, 83, 108, 97, 118, 101, 0 }; +const uint8_t objtxt_34[] = { +83, 108, 97, 118, 101, 0 }; +const uint8_t objtxt_35[] = { +67, 97, 117, 108, 100, 114, 111, 110, 0 }; +const uint8_t objtxt_36[] = { +67, 111, 111, 107, 104, 111, 117, 115, 101, 0 }; +const uint8_t objtxt_37[] = { +84, 111, 97, 100, 115, 116, 111, 111, 108, 115, 0 }; +const uint8_t objtxt_38[] = { +66, 111, 117, 108, 100, 101, 114, 0 }; +const uint8_t objtxt_39[] = { +76, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_40[] = { +76, 111, 103, 32, 70, 108, 117, 109, 101, 0 }; +const uint8_t objtxt_41[] = { +83, 99, 114, 111, 108, 108, 0 }; +const uint8_t objtxt_42[] = { +71, 105, 97, 110, 116, 32, 69, 97, 103, 108, 101, 0 }; +const uint8_t objtxt_43[] = { +69, 97, 103, 108, 101, 115, 32, 70, 101, 97, 116, 104, 101, 114, 115, 0 }; +const uint8_t objtxt_44[] = { +77, 101, 100, 97, 108, 108, 105, 111, 110, 0 }; +const uint8_t objtxt_45[] = { +68, 101, 97, 100, 32, 68, 119, 97, 114, 102, 0 }; +const uint8_t objtxt_46[] = { +83, 112, 101, 99, 116, 97, 99, 108, 101, 115, 0 }; +const uint8_t objtxt_47[] = { +83, 112, 101, 99, 116, 97, 99, 108, 101, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_48[] = { +67, 104, 97, 114, 114, 101, 100, 32, 68, 101, 98, 114, 105, 115, 0 }; +const uint8_t objtxt_49[] = { +84, 114, 97, 112, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_50[] = { +80, 108, 97, 113, 117, 101, 32, 111, 110, 32, 87, 97, 108, 108, 0 }; +const uint8_t objtxt_51[] = { +79, 114, 110, 97, 116, 101, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_52[] = { +79, 112, 101, 110, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_53[] = { +65, 110, 99, 105, 101, 110, 116, 32, 66, 111, 111, 107, 0 }; +const uint8_t objtxt_54[] = { +83, 97, 99, 114, 101, 100, 32, 87, 105, 108, 108, 111, 119, 0 }; +const uint8_t objtxt_55[] = { +71, 117, 97, 114, 100, 105, 97, 110, 115, 32, 111, 102, 32, 83, 97, 99, 114, 101, 100, 32, 87, 105, 108, 108, 111, 119, 0 }; +const uint8_t objtxt_56[] = { +68, 114, 117, 103, 103, 101, 100, 32, 83, 108, 97, 118, 101, 0 }; +const uint8_t objtxt_57[] = { +77, 97, 114, 115, 104, 0 }; +const uint8_t objtxt_58[] = { +71, 73, 65, 78, 84, 32, 66, 117, 105, 108, 100, 105, 110, 103, 0 }; +const uint8_t objtxt_59[] = { +66, 101, 97, 99, 104, 0 }; +const uint8_t objtxt_60[] = { +72, 117, 116, 0 }; +const uint8_t objtxt_61[] = { +68, 114, 117, 103, 103, 101, 100, 32, 71, 73, 65, 78, 84, 83, 0 }; +const uint8_t objtxt_62[] = { +65, 114, 109, 111, 117, 114, 32, 111, 110, 32, 72, 111, 111, 107, 0 }; +const uint8_t objtxt_63[] = { +76, 101, 100, 103, 101, 0 }; +const uint8_t objtxt_64[] = { +78, 111, 116, 101, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, +}; +const uint8_t msgtxt_0[] = { +32, 0 }; +const uint8_t msgtxt_1[] = { +71, 111, 111, 100, 32, 108, 117, 99, 107, 32, 111, 110, 32, 65, 82, 82, 79, 87, 32, 79, 70, 32, 68, 69, 65, 84, 72, 32, 40, 80, 116, 46, 49, 41, 0 }; +const uint8_t msgtxt_2[] = { +70, 111, 114, 32, 116, 104, 111, 115, 101, 32, 119, 104, 111, 32, 106, 111, 117, 114, 110, 101, 121, 32, 105, 110, 32, 68, 114, 101, 97, 109, 115, 46, 46, 0 }; +const uint8_t msgtxt_3[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_4[] = { +78, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_5[] = { +115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_6[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_7[] = { +104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_8[] = { +73, 32, 102, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_9[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_10[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_11[] = { +72, 101, 32, 115, 110, 101, 101, 114, 115, 46, 46, 0 }; +const uint8_t msgtxt_12[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 119, 104, 97, 116, 32, 104, 101, 32, 119, 97, 110, 116, 115, 33, 0 }; +const uint8_t msgtxt_13[] = { +71, 111, 32, 119, 97, 115, 104, 32, 121, 111, 117, 114, 32, 77, 111, 117, 116, 104, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_14[] = { +65, 65, 82, 82, 71, 71, 72, 72, 33, 33, 0 }; +const uint8_t msgtxt_15[] = { +73, 39, 109, 32, 100, 114, 111, 119, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_16[] = { +72, 101, 32, 105, 115, 32, 100, 114, 117, 103, 103, 101, 100, 33, 0 }; +const uint8_t msgtxt_17[] = { +72, 101, 32, 103, 97, 115, 112, 115, 32, 97, 110, 100, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_18[] = { +77, 97, 103, 105, 99, 97, 108, 32, 65, 114, 114, 111, 119, 46, 46, 46, 68, 101, 115, 116, 114, 111, 121, 32, 88, 69, 82, 68, 79, 78, 46, 46, 33, 0 }; +const uint8_t msgtxt_19[] = { +72, 101, 32, 100, 105, 101, 115, 33, 0 }; +const uint8_t msgtxt_20[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 105, 115, 32, 116, 111, 111, 32, 104, 101, 97, 118, 121, 33, 0 }; +const uint8_t msgtxt_21[] = { +73, 32, 115, 108, 105, 100, 101, 32, 100, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_22[] = { +83, 101, 114, 112, 101, 110, 116, 32, 101, 97, 116, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_23[] = { +73, 116, 32, 116, 117, 114, 110, 115, 33, 0 }; +const uint8_t msgtxt_24[] = { +71, 73, 65, 78, 84, 83, 32, 119, 97, 107, 101, 32, 97, 110, 100, 32, 107, 105, 108, 108, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_25[] = { +84, 104, 101, 32, 66, 101, 103, 103, 97, 114, 0 }; +const uint8_t msgtxt_26[] = { +68, 114, 111, 112, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_27[] = { +102, 101, 101, 100, 115, 32, 84, 111, 97, 100, 115, 116, 111, 111, 108, 115, 32, 116, 111, 32, 83, 108, 97, 118, 101, 0 }; +const uint8_t msgtxt_28[] = { +83, 108, 97, 118, 101, 32, 102, 97, 108, 108, 115, 32, 97, 115, 108, 101, 101, 112, 33, 0 }; +const uint8_t msgtxt_29[] = { +73, 32, 116, 114, 105, 112, 112, 101, 100, 33, 0 }; +const uint8_t msgtxt_30[] = { +69, 97, 103, 108, 101, 32, 114, 105, 112, 115, 32, 109, 101, 32, 119, 105, 116, 104, 32, 104, 105, 115, 32, 84, 97, 108, 111, 110, 115, 33, 0 }; +const uint8_t msgtxt_31[] = { +69, 97, 103, 108, 101, 32, 99, 97, 114, 114, 105, 101, 115, 32, 109, 101, 32, 111, 102, 102, 46, 46, 46, 0 }; +const uint8_t msgtxt_32[] = { +67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 83, 33, 0 }; +const uint8_t msgtxt_33[] = { +89, 111, 117, 32, 99, 97, 110, 32, 110, 111, 119, 32, 109, 97, 107, 101, 32, 116, 104, 101, 32, 65, 114, 114, 111, 119, 0 }; +const uint8_t msgtxt_34[] = { +83, 101, 101, 32, 65, 82, 82, 79, 87, 32, 79, 70, 32, 68, 69, 65, 84, 72, 32, 40, 80, 116, 46, 50, 41, 0 }; +const uint8_t msgtxt_35[] = { +67, 117, 116, 32, 104, 105, 115, 32, 67, 104, 97, 105, 110, 115, 33, 0 }; +const uint8_t msgtxt_36[] = { +73, 116, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_37[] = { +68, 101, 115, 116, 114, 111, 121, 32, 88, 69, 82, 68, 79, 78, 32, 116, 104, 101, 32, 69, 118, 105, 108, 0 }; +const uint8_t msgtxt_38[] = { +119, 105, 116, 104, 32, 97, 110, 32, 65, 114, 114, 111, 119, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 83, 97, 99, 114, 101, 100, 32, 87, 105, 108, 108, 111, 119, 0 }; +const uint8_t msgtxt_39[] = { +84, 104, 101, 32, 71, 117, 97, 114, 100, 105, 97, 110, 115, 32, 111, 102, 32, 116, 104, 101, 32, 87, 105, 108, 108, 111, 119, 0 }; +const uint8_t msgtxt_40[] = { +76, 117, 115, 116, 32, 102, 111, 114, 32, 83, 105, 108, 118, 101, 114, 33, 0 }; +const uint8_t msgtxt_41[] = { +84, 104, 101, 32, 119, 114, 105, 116, 105, 110, 103, 32, 105, 115, 32, 116, 111, 111, 32, 115, 109, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_42[] = { +70, 105, 110, 100, 32, 116, 104, 101, 32, 70, 101, 97, 116, 104, 101, 114, 115, 0 }; +const uint8_t msgtxt_43[] = { +111, 102, 32, 116, 104, 101, 32, 77, 105, 103, 104, 116, 121, 32, 69, 97, 103, 108, 101, 0 }; +const uint8_t msgtxt_44[] = { +79, 114, 98, 32, 103, 108, 111, 119, 115, 32, 98, 114, 105, 103, 104, 116, 108, 121, 33, 0 }; +const uint8_t msgtxt_45[] = { +71, 117, 97, 114, 100, 105, 97, 110, 115, 0 }; +const uint8_t msgtxt_46[] = { +87, 111, 110, 39, 116, 32, 108, 101, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +73, 39, 109, 32, 110, 111, 116, 32, 115, 116, 114, 111, 110, 103, 32, 101, 110, 111, 117, 103, 104, 33, 0 }; +const uint8_t msgtxt_48[] = { +67, 104, 97, 115, 101, 32, 77, 101, 100, 97, 108, 108, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_49[] = { +73, 32, 102, 101, 101, 108, 0 }; +const uint8_t msgtxt_50[] = { +32, 0 }; +const uint8_t msgtxt_51[] = { +40, 116, 111, 32, 104, 111, 111, 107, 41, 0 }; +const uint8_t msgtxt_52[] = { +100, 111, 100, 103, 101, 115, 32, 109, 121, 32, 116, 104, 114, 117, 115, 116, 33, 0 }; +const uint8_t msgtxt_53[] = { +73, 39, 118, 101, 32, 110, 111, 32, 119, 101, 97, 112, 111, 110, 33, 0 }; +const uint8_t msgtxt_54[] = { +84, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 72, 101, 97, 114, 116, 33, 0 }; +const uint8_t msgtxt_55[] = { +115, 105, 122, 122, 108, 101, 115, 32, 97, 110, 100, 32, 86, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_56[] = { +84, 104, 101, 32, 66, 101, 103, 103, 97, 114, 32, 86, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_57[] = { +70, 101, 114, 114, 121, 109, 97, 110, 0 }; +const uint8_t msgtxt_58[] = { +104, 111, 108, 100, 115, 32, 111, 117, 116, 32, 104, 105, 115, 32, 104, 97, 110, 100, 0 }; +const uint8_t msgtxt_59[] = { +72, 101, 32, 105, 115, 32, 119, 97, 105, 116, 105, 110, 103, 32, 102, 111, 114, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_60[] = { +72, 101, 32, 105, 115, 32, 68, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_61[] = { +73, 116, 32, 101, 109, 105, 116, 115, 32, 97, 32, 100, 101, 97, 100, 108, 121, 32, 66, 101, 97, 109, 0 }; +const uint8_t msgtxt_62[] = { +97, 32, 116, 104, 105, 99, 107, 32, 66, 114, 111, 116, 104, 0 }; +const uint8_t msgtxt_63[] = { +97, 32, 112, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 97, 32, 66, 97, 114, 103, 101, 0 }; +const uint8_t msgtxt_64[] = { +116, 97, 107, 101, 115, 32, 65, 109, 117, 108, 101, 116, 46, 46, 97, 110, 100, 32, 109, 101, 32, 111, 110, 116, 111, 32, 66, 97, 114, 103, 101, 33, 0 }; +const uint8_t msgtxt_65[] = { +73, 39, 118, 101, 32, 115, 108, 105, 100, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 82, 105, 118, 101, 114, 33, 0 }; +const uint8_t msgtxt_66[] = { +65, 32, 77, 105, 115, 116, 32, 100, 101, 115, 99, 101, 110, 100, 115, 32, 97, 110, 100, 32, 116, 114, 97, 110, 115, 112, 111, 114, 116, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_67[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 0 }; +const uint8_t msgtxt_68[] = { +73, 116, 39, 115, 32, 115, 111, 108, 105, 100, 32, 83, 105, 108, 118, 101, 114, 33, 0 }; +const uint8_t msgtxt_69[] = { +78, 111, 32, 104, 101, 108, 112, 32, 105, 115, 32, 97, 108, 108, 111, 119, 101, 100, 32, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_70[] = { +84, 104, 101, 110, 32, 86, 97, 110, 105, 115, 104, 101, 115, 33, 0 }; +const uint8_t msgtxt_71[] = { +83, 101, 114, 112, 101, 110, 116, 0 }; +const uint8_t msgtxt_72[] = { +83, 108, 97, 118, 101, 32, 105, 115, 32, 102, 114, 101, 101, 33, 0 }; +const uint8_t msgtxt_73[] = { +66, 114, 111, 116, 104, 32, 105, 115, 32, 110, 111, 119, 32, 100, 114, 117, 103, 103, 101, 100, 33, 0 }; +const uint8_t msgtxt_74[] = { +73, 32, 102, 97, 108, 108, 32, 97, 115, 108, 101, 101, 112, 33, 0 }; +const uint8_t msgtxt_75[] = { +71, 73, 65, 78, 84, 83, 32, 102, 105, 110, 100, 32, 109, 101, 32, 97, 110, 100, 32, 107, 105, 108, 108, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_76[] = { +83, 108, 97, 118, 101, 32, 104, 101, 108, 112, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_77[] = { +65, 82, 78, 73, 68, 32, 67, 79, 82, 82, 73, 83, 84, 65, 32, 45, 32, 77, 97, 115, 116, 101, 114, 32, 70, 108, 101, 116, 99, 104, 101, 114, 0 }; +const uint8_t msgtxt_78[] = { +73, 32, 115, 105, 110, 107, 32, 105, 110, 32, 66, 111, 103, 33, 0 }; +const uint8_t msgtxt_79[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_80[] = { +70, 105, 110, 101, 32, 70, 101, 97, 116, 104, 101, 114, 115, 33, 0 }; +const uint8_t msgtxt_81[] = { +87, 104, 101, 110, 32, 97, 108, 108, 32, 115, 101, 101, 109, 115, 32, 108, 111, 115, 116, 46, 46, 87, 65, 73, 84, 33, 0 }; +const uint8_t msgtxt_82[] = { +82, 85, 66, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 171, + 9, 1, 0, 1, + 1, 86, 58, 73, +/* AUTO 0 */ + 207, + 0, 1, 0, 0, 0, 1, + 81, 79, 81, 2, +/* AUTO 100 */ + 175, + 3, 1, 3, 22, 3, 43, + 32, 33, 34, 63, +/* AUTO 100 */ + 168, + 13, 34, 0, 34, + 53, +/* AUTO 100 */ + 175, + 4, 25, 2, 34, 0, 18, + 53, 64, 25, 73, +/* AUTO 0 */ + 194, + 27, 88, 88, +/* AUTO 0 */ + 206, + 0, 18, 0, 34, 0, 56, + 59, 72, 28, +/* AUTO 80 */ + 143, 80, + 2, 32, 0, 32, 0, 31, + 29, 88, 72, 73, +/* AUTO 0 */ + 195, + 24, 64, 88, 61, +/* AUTO 100 */ + 168, + 1, 17, 0, 3, + 60, +/* AUTO 100 */ + 181, + 7, 12, 1, 29, 8, 3, 0, 62, 0, 17, + 53, 53, +/* AUTO 100 */ + 176, + 7, 12, 1, 29, 6, 17, 0, 17, + 53, +/* AUTO 100 */ + 175, + 4, 13, 6, 4, 2, 21, + 88, 14, 22, 61, +/* AUTO 100 */ + 183, + 9, 2, 0, 2, 0, 2, 0, 0, 0, 2, + 58, 81, 79, 81, +/* AUTO 100 */ + 170, + 4, 31, 6, 19, + 14, 15, 61, +/* AUTO 100 */ + 170, + 4, 32, 6, 19, + 14, 15, 61, +/* AUTO 100 */ + 165, + 4, 13, + 56, 64, +/* AUTO 100 */ + 165, + 4, 12, + 57, 64, +/* AUTO 100 */ + 165, + 4, 30, + 56, 64, +/* AUTO 100 */ + 165, + 4, 29, + 57, 64, +/* AUTO 100 */ + 164, + 4, 52, + 63, +/* AUTO 100 */ + 172, + 1, 17, 6, 29, 0, 29, + 53, +}; +const uint8_t actions[] = { +/* TURN COAT */ + 19, 27, 11, + 2, 14, 14, 10, 0, 1, 0, 1, + 81, 82, 10, 73, +/* AUTO 0 */ + 211, + 19, 3, 14, 10, 0, 10, 0, 1, + 3, 6, 53, 81, +/* AUTO 0 */ + 200, + 15, 3, 0, 1, + 81, +/* TURN COAT */ + 5, 27, 11, + 13, 10, + 4, 7, +/* GO PASS */ + 10, 1, 24, + 2, 10, 0, 6, + 10, 54, 64, +/* LOOK BATO */ + 5, 30, 14, + 2, 13, + 111, 61, +/* LOOK MESS */ + 14, 30, 7, + 14, 8, 2, 0, 0, 8, + 53, 3, 6, +/* LOOK MESS */ + 5, 30, 7, + 2, 0, + 10, 110, +/* LOOK COUR */ + 14, 30, 8, + 14, 28, 4, 1, 0, 28, + 53, 3, 6, +/* LOOK KITC */ + 14, 30, 73, + 4, 4, 14, 16, 0, 16, + 53, 3, 6, +/* TIE ROPE */ + 19, 47, 27, + 3, 28, 3, 16, 0, 17, 0, 29, + 53, 53, 51, 73, +/* AUTO 0 */ + 210, + 0, 28, 0, 51, 0, 16, 0, 51, + 62, 62, 10, +/* HOOK SUIT */ + 23, 49, 12, + 3, 3, 3, 17, 0, 3, 0, 17, 0, 3, + 59, 59, 58, 73, +/* AUTO 0 */ + 197, + 0, 62, + 53, 10, +/* GET SUIT */ + 14, 10, 12, + 2, 3, 0, 3, 0, 3, + 52, 60, 10, +/* GET SUIT */ + 19, 10, 12, + 2, 62, 0, 3, 0, 62, 0, 3, + 52, 59, 60, 10, +/* WEAR SUIT */ + 13, 56, 12, + 1, 3, 0, 3, 0, 4, + 72, 10, +/* DROP SUIT */ + 9, 18, 12, + 1, 3, 0, 3, + 53, 10, +/* REMO SUIT */ + 13, 58, 12, + 1, 4, 0, 3, 0, 4, + 72, 10, +/* GO LEDG */ + 15, 1, 78, + 4, 10, 1, 3, 0, 12, + 54, 64, 88, 73, +/* AUTO 0 */ + 199, + 0, 10, + 20, 21, 54, 64, +/* GO LEDG */ + 15, 1, 78, + 4, 10, 1, 4, 0, 12, + 54, 64, 88, 73, +/* AUTO 0 */ + 199, + 0, 10, + 54, 64, 20, 21, +/* GO LEDG */ + 10, 1, 78, + 4, 10, 0, 12, + 54, 64, 10, +/* PULL ROPE */ + 22, 83, 27, + 4, 12, 1, 29, 8, 3, 0, 62, 0, 17, + 10, 53, 53, +/* GET HOOK */ + 9, 10, 25, + 2, 17, 0, 17, + 52, 10, +/* DROP HOOK */ + 9, 18, 25, + 1, 17, 0, 17, + 53, 10, +/* GET ROPE */ + 9, 10, 27, + 2, 29, 0, 29, + 52, 10, +/* DROP ROPE */ + 9, 18, 27, + 1, 29, 0, 29, + 53, 10, +/* GIVE AMUL */ + 9, 5, 10, + 1, 8, 2, 18, + 12, 11, +/* GIVE COIN */ + 23, 5, 80, + 1, 7, 2, 18, 0, 18, 0, 7, 0, 20, + 59, 59, 53, 73, +/* AUTO 0 */ + 199, + 0, 64, + 53, 25, 26, 120, +/* GIVE AMUL */ + 23, 5, 10, + 1, 8, 2, 23, 0, 16, 0, 23, 0, 8, + 54, 53, 59, 73, +/* AUTO 0 */ + 195, + 107, 114, 64, 64, +/* LOOK BEGG */ + 18, 30, 26, + 2, 18, 14, 9, 14, 20, 4, 7, + 25, 108, 109, +/* LOOK FERR */ + 10, 30, 32, + 2, 23, 4, 15, + 107, 108, 109, +/* WAIT ANY */ + 11, 60, 0, + 4, 8, 0, 14, + 117, 88, 116, 54, +/* RUB ORB */ + 18, 41, 29, + 1, 20, 4, 12, 14, 25, 0, 25, + 6, 7, 53, +/* RUB ORB */ + 17, 41, 29, + 1, 20, 13, 25, 0, 20, 0, 9, + 72, 44, +/* GET ARRO */ + 9, 10, 31, + 4, 13, 2, 21, + 121, 46, +/* GET ARRO */ + 9, 10, 31, + 2, 22, 0, 22, + 52, 10, +/* DROP ARRO */ + 9, 18, 31, + 1, 22, 0, 22, + 53, 10, +/* GO CAVE */ + 14, 1, 34, + 2, 25, 4, 12, 0, 13, + 54, 64, 10, +/* KILL SERP */ + 18, 35, 30, + 1, 5, 2, 21, 0, 2, 0, 1, + 81, 82, 73, +/* AUTO 0 */ + 207, + 19, 3, 0, 21, 0, 2, + 59, 104, 121, 105, +/* AUTO 0 */ + 197, + 15, 2, + 121, 102, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* LOOK ZARD */ + 15, 30, 16, + 2, 11, 0, 11, 0, 12, + 17, 18, 19, 72, +/* LOOK ZARD */ + 4, 30, 16, + 2, 12, + 110, +/* LOOK PURS */ + 22, 30, 23, + 3, 6, 14, 7, 14, 20, 14, 9, 0, 7, + 53, 8, 6, +/* LOOK BED */ + 10, 30, 18, + 14, 15, 0, 15, + 53, 8, 6, +/* CUT PILL */ + 18, 44, 19, + 1, 5, 3, 15, 14, 6, 0, 6, + 53, 8, 6, +/* GET ROPE */ + 9, 10, 27, + 2, 28, 0, 28, + 52, 10, +/* DROP ROPE */ + 9, 18, 27, + 1, 28, 0, 28, + 53, 10, +/* GET HOOK */ + 9, 10, 25, + 2, 16, 0, 16, + 52, 10, +/* DROP HOOK */ + 9, 18, 25, + 1, 16, 0, 16, + 53, 10, +/* WAIT ANY */ + 7, 60, 0, + 4, 16, + 117, 88, 64, 73, +/* AUTO 0 */ + 199, + 0, 17, + 88, 116, 54, 64, +/* KILL BEGG */ + 11, 35, 26, + 2, 18, 0, 18, + 10, 106, 59, 64, +/* CUT CHAI */ + 18, 44, 42, + 2, 33, 1, 5, 0, 33, 0, 34, + 10, 122, 72, +/* GO COOK */ + 10, 1, 45, + 2, 36, 0, 23, + 54, 10, 64, +/* DRUG CAUL */ + 15, 71, 43, + 4, 23, 1, 37, 0, 37, + 10, 123, 59, 73, +/* AUTO 0 */ + 205, + 0, 2, 0, 32, 0, 61, + 58, 72, +/* MOVE BOUL */ + 19, 39, 47, + 2, 38, 2, 34, 5, 25, 0, 25, + 53, 126, 3, 6, +/* MOVE BOUL */ + 8, 39, 47, + 2, 38, 5, 34, + 47, +/* GO CAVE */ + 14, 1, 34, + 4, 29, 2, 25, 0, 30, + 54, 10, 64, +/* LOOK SCRO */ + 6, 30, 53, + 3, 41, + 36, 42, 43, +/* GO BUIL */ + 10, 1, 69, + 4, 21, 0, 20, + 54, 10, 64, +/* CLIM LADD */ + 10, 50, 48, + 4, 20, 0, 24, + 54, 10, 64, +/* GO FLUM */ + 15, 1, 49, + 4, 27, 1, 19, 0, 31, + 54, 10, 115, 64, +/* WAIT ANY */ + 11, 60, 0, + 4, 31, 0, 32, + 117, 88, 54, 64, +/* GO BEAC */ + 15, 1, 50, + 4, 32, 0, 33, 0, 19, + 10, 54, 59, 64, +/* CLIM CLIF */ + 10, 50, 66, + 4, 33, 0, 34, + 54, 10, 64, +/* KILL EAGL */ + 14, 35, 51, + 1, 5, 2, 42, 0, 42, + 10, 104, 59, +/* KILL EAGL */ + 10, 35, 51, + 6, 5, 2, 42, + 14, 30, 61, +/* PLUC EAGL */ + 15, 61, 51, + 2, 42, 0, 43, 0, 35, + 74, 31, 88, 54, +/* EAT TOAD */ + 7, 62, 46, + 3, 37, + 88, 124, 125, 61, +/* GO HUT */ + 10, 1, 58, + 4, 40, 0, 45, + 54, 10, 64, +/* LOOK DWAR */ + 14, 30, 56, + 2, 45, 14, 44, 0, 44, + 53, 8, 6, +/* LOOK DWAR */ + 8, 30, 56, + 2, 45, 13, 44, + 110, +/* LOOK HUT */ + 18, 30, 58, + 4, 45, 14, 46, 14, 47, 0, 46, + 53, 8, 6, +/* LOOK MEDA */ + 4, 30, 9, + 13, 41, + 118, +/* LOOK AMUL */ + 5, 30, 10, + 3, 8, + 3, 113, +/* WEAR SPEC */ + 13, 56, 60, + 3, 46, 0, 46, 0, 47, + 72, 10, +/* GET SPEC */ + 9, 10, 60, + 2, 46, 0, 46, + 52, 10, +/* DROP SPEC */ + 9, 18, 60, + 1, 46, 0, 46, + 53, 10, +/* REMO SPEC */ + 13, 58, 60, + 1, 47, 0, 47, 0, 46, + 72, 10, +/* LOOK DEBR */ + 15, 30, 59, + 4, 46, 14, 49, 0, 49, + 53, 8, 6, 64, +/* GO TRAP */ + 10, 1, 61, + 2, 49, 0, 49, + 54, 10, 64, +/* LOOK PLAQ */ + 5, 30, 62, + 2, 50, + 36, 127, +/* OPEN CHES */ + 19, 51, 63, + 2, 51, 0, 51, 0, 52, 0, 53, + 72, 53, 8, 6, +/* LOOK BOOK */ + 11, 30, 64, + 1, 53, 1, 47, + 37, 38, 39, 40, +/* LOOK BOOK */ + 8, 30, 64, + 1, 53, 6, 47, + 41, +/* GO MARS */ + 10, 1, 79, + 4, 44, 0, 47, + 54, 64, 10, +/* LOOK MARS */ + 7, 30, 79, + 4, 47, + 14, 128, 15, 61, +/* CUT BRAN */ + 14, 44, 20, + 4, 50, 1, 5, 2, 55, + 9, 45, 46, +/* CUT BRAN */ + 17, 44, 20, + 4, 50, 14, 1, 1, 5, 0, 1, + 10, 53, +/* THRO MEDA */ + 19, 22, 9, + 2, 55, 1, 44, 0, 55, 0, 44, + 59, 59, 45, 48, +/* GO BARG */ + 5, 1, 33, + 4, 15, + 107, 46, +/* LOOK PILL */ + 9, 30, 19, + 14, 6, 3, 15, + 49, 6, +/* FREE SLAV */ + 4, 90, 41, + 2, 33, + 35, +/* DROP SUIT */ + 5, 18, 12, + 1, 4, + 9, 129, +/* DROP SPEC */ + 5, 18, 60, + 1, 47, + 9, 129, +/* LOOK SLAV */ + 4, 30, 41, + 2, 56, + 16, +/* LOOK CAUL */ + 5, 30, 43, + 4, 23, + 3, 112, +/* LOOK COAT */ + 9, 30, 11, + 4, 5, 14, 10, + 3, 23, +/* KILL SERP */ + 9, 35, 30, + 2, 21, 6, 5, + 9, 103, +/* RUB ORB */ + 5, 41, 29, + 1, 9, + 4, 7, +/* RUB ORB */ + 5, 41, 29, + 1, 20, + 4, 7, +/* LOOK EAGL */ + 4, 30, 51, + 2, 42, + 130, +/* LOOK BOOK */ + 4, 30, 64, + 6, 53, + 9, +/* RUB ORB */ + 6, 41, 29, + 1, 9, + 10, 4, 7, +/* GO LADD */ + 10, 1, 48, + 2, 39, 0, 24, + 10, 54, 64, +/* LOOK NOTE */ + 5, 30, 57, + 3, 64, + 36, 131, +/* HELP ANY */ + 9, 16, 0, + 4, 12, 5, 25, + 10, 132, +/* FUCK ANY */ + 0, 75, 0, + 13, +/* LOOK ANY */ + 2, 30, 0, + 3, 4, 5, +/* KILL ANY */ + 0, 35, 0, + 9, +/* MOVE ANY */ + 0, 39, 0, + 9, +/* GIVE ANY */ + 0, 5, 0, + 9, +/* THRO ANY */ + 0, 22, 0, + 9, +/* INVE ANY */ + 0, 4, 0, + 66, +/* QUIT ANY */ + 0, 9, 0, + 63, +/* SAVE ANY */ + 0, 8, 0, + 71, +/* HELP ANY */ + 1, 16, 0, + 9, 119, +/* SAY ANY */ + 3, 66, 0, + 10, 85, 4, 7, +/* GO ANY */ + 0, 1, 0, + 9, +/* TURN ANY */ + 0, 27, 0, + 9, +/* WAIT ANY */ + 2, 60, 0, + 117, 88, 88, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *BOAR */ + 194, 79, 65, 82, + /* INVE */ + 73, 78, 86, 69, + /* GIVE */ + 71, 73, 86, 69, + /* *OFFE */ + 207, 70, 70, 69, + /* *PRES */ + 208, 82, 69, 83, + /* SAVE */ + 83, 65, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* *PICK */ + 208, 73, 67, 75, + /* *HOLD */ + 200, 79, 76, 68, + /* SCOR */ + 83, 67, 79, 82, + /* HELP */ + 72, 69, 76, 80, + /* *HINT */ + 200, 73, 78, 84, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DISC */ + 196, 73, 83, 67, + /* *PUT */ + 208, 85, 84, 32, + /* THRO */ + 84, 72, 82, 79, + /* *TOSS */ + 212, 79, 83, 83, + /* *SLIN */ + 211, 76, 73, 78, + /* *CHUC */ + 195, 72, 85, 67, + /* *HURL */ + 200, 85, 82, 76, + /* TURN */ + 84, 85, 82, 78, + /* *ROTA */ + 210, 79, 84, 65, + /* *TWIS */ + 212, 87, 73, 83, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *INSP */ + 201, 78, 83, 80, + /* *SEAR */ + 211, 69, 65, 82, + /* *READ */ + 210, 69, 65, 68, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* *MURD */ + 205, 85, 82, 68, + /* *SLAY */ + 211, 76, 65, 89, + /* MOVE */ + 77, 79, 86, 69, + /* *SHIF */ + 211, 72, 73, 70, + /* RUB */ + 82, 85, 66, 32, + /* *SHIN */ + 211, 72, 73, 78, + /* *POLI */ + 208, 79, 76, 73, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* *SLIC */ + 211, 76, 73, 67, + /* TIE */ + 84, 73, 69, 32, + /* *FAST */ + 198, 65, 83, 84, + /* HOOK */ + 72, 79, 79, 75, + /* CLIM */ + 67, 76, 73, 77, + /* OPEN */ + 79, 80, 69, 78, + /* BREA */ + 66, 82, 69, 65, + /* *SMAS */ + 211, 77, 65, 83, + /* *DEST */ + 196, 69, 83, 84, + /* *RUIN */ + 210, 85, 73, 78, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* WAIT */ + 87, 65, 73, 84, + /* PLUC */ + 80, 76, 85, 67, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* *NIBB */ + 206, 73, 66, 66, + /* *DEVO */ + 196, 69, 86, 79, + /* SAY */ + 83, 65, 89, 32, + /* *ASK */ + 193, 83, 75, 32, + /* *TALK */ + 212, 65, 76, 75, + /* *SHOU */ + 211, 72, 79, 85, + /* *YELL */ + 217, 69, 76, 76, + /* DRUG */ + 68, 82, 85, 71, + /* *POIS */ + 208, 79, 73, 83, + /* JUMP */ + 74, 85, 77, 80, + /* SWIM */ + 83, 87, 73, 77, + /* FUCK */ + 70, 85, 67, 75, + /* *BOLL */ + 194, 79, 76, 76, + /* *PISS */ + 208, 73, 83, 83, + /* *BAST */ + 194, 65, 83, 84, + /* *BALL */ + 194, 65, 76, 76, + /* LIGH */ + 76, 73, 71, 72, + /* UNLI */ + 85, 78, 76, 73, + /* UNTI */ + 85, 78, 84, 73, + /* PULL */ + 80, 85, 76, 76, + /* *TUG */ + 212, 85, 71, 32, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* LEVE */ + 76, 69, 86, 69, + /* *FORC */ + 198, 79, 82, 67, + /* RIDE */ + 82, 73, 68, 69, + /* FREE */ + 70, 82, 69, 69, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* MESS */ + 77, 69, 83, 83, + /* COUR */ + 67, 79, 85, 82, + /* MEDA */ + 77, 69, 68, 65, + /* AMUL */ + 65, 77, 85, 76, + /* COAT */ + 67, 79, 65, 84, + /* SUIT */ + 83, 85, 73, 84, + /* *ARMO */ + 193, 82, 77, 79, + /* BATO */ + 66, 65, 84, 79, + /* *GOLD */ + 199, 79, 76, 68, + /* ZARD */ + 90, 65, 82, 68, + /* *MAGI */ + 205, 65, 71, 73, + /* BED */ + 66, 69, 68, 32, + /* PILL */ + 80, 73, 76, 76, + /* BRAN */ + 66, 82, 65, 78, + /* *WILL */ + 215, 73, 76, 76, + /* SWOR */ + 83, 87, 79, 82, + /* PURS */ + 80, 85, 82, 83, + /* PASS */ + 80, 65, 83, 83, + /* HOOK */ + 72, 79, 79, 75, + /* BEGG */ + 66, 69, 71, 71, + /* ROPE */ + 82, 79, 80, 69, + /* RATI */ + 82, 65, 84, 73, + /* ORB */ + 79, 82, 66, 32, + /* SERP */ + 83, 69, 82, 80, + /* ARRO */ + 65, 82, 82, 79, + /* FERR */ + 70, 69, 82, 82, + /* BARG */ + 66, 65, 82, 71, + /* CAVE */ + 67, 65, 86, 69, + /* *ENTR */ + 197, 78, 84, 82, + /* WHIR */ + 87, 72, 73, 82, + /* TREE */ + 84, 82, 69, 69, + /* FORE */ + 70, 79, 82, 69, + /* LOG */ + 76, 79, 71, 32, + /* GIAN */ + 71, 73, 65, 78, + /* SLAV */ + 83, 76, 65, 86, + /* CHAI */ + 67, 72, 65, 73, + /* CAUL */ + 67, 65, 85, 76, + /* *BROT */ + 194, 82, 79, 84, + /* COOK */ + 67, 79, 79, 75, + /* TOAD */ + 84, 79, 65, 68, + /* BOUL */ + 66, 79, 85, 76, + /* LADD */ + 76, 65, 68, 68, + /* FLUM */ + 70, 76, 85, 77, + /* BEAC */ + 66, 69, 65, 67, + /* EAGL */ + 69, 65, 71, 76, + /* *FEAT */ + 198, 69, 65, 84, + /* SCRO */ + 83, 67, 82, 79, + /* MEDA */ + 77, 69, 68, 65, + /* STON */ + 83, 84, 79, 78, + /* DWAR */ + 68, 87, 65, 82, + /* NOTE */ + 78, 79, 84, 69, + /* HUT */ + 72, 85, 84, 32, + /* DEBR */ + 68, 69, 66, 82, + /* SPEC */ + 83, 80, 69, 67, + /* TRAP */ + 84, 82, 65, 80, + /* PLAQ */ + 80, 76, 65, 81, + /* CHES */ + 67, 72, 69, 83, + /* BOOK */ + 66, 79, 79, 75, + /* GUAR */ + 71, 85, 65, 82, + /* CLIF */ + 67, 76, 73, 70, + /* WALL */ + 87, 65, 76, 76, + /* LAKE */ + 76, 65, 75, 69, + /* BUIL */ + 66, 85, 73, 76, + /* VILL */ + 86, 73, 76, 76, + /* RUIN */ + 82, 85, 73, 78, + /* VAUL */ + 86, 65, 85, 76, + /* KITC */ + 75, 73, 84, 67, + /* OFF */ + 79, 70, 70, 32, + /* *YOU */ + 217, 79, 85, 32, + /* GAME */ + 71, 65, 77, 69, + /* INVE */ + 73, 78, 86, 69, + /* LEDG */ + 76, 69, 68, 71, + /* MARS */ + 77, 65, 82, 83, + /* COIN */ + 67, 79, 73, 78, + /* PALA */ + 80, 65, 76, 65, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* BRAN */ + 66, 82, 65, 78, + 1, + /* SWOR */ + 83, 87, 79, 82, + 5, + /* PURS */ + 80, 85, 82, 83, + 6, + /* COIN */ + 67, 79, 73, 78, + 7, + /* AMUL */ + 65, 77, 85, 76, + 8, + /* ORB */ + 79, 82, 66, 32, + 9, + /* PILL */ + 80, 73, 76, 76, + 15, + /* LOG */ + 76, 79, 71, 32, + 19, + /* ORB */ + 79, 82, 66, 32, + 20, + /* TOAD */ + 84, 79, 65, 68, + 37, + /* SCRO */ + 83, 67, 82, 79, + 41, + /* FEAT */ + 70, 69, 65, 84, + 43, + /* MEDA */ + 77, 69, 68, 65, + 44, + /* BOOK */ + 66, 79, 79, 75, + 53, + /* NOTE */ + 78, 79, 84, 69, + 64, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst04.c b/Applications/games/myst04.c new file mode 100644 index 00000000..1dd2d05a --- /dev/null +++ b/Applications/games/myst04.c @@ -0,0 +1,3162 @@ +#define NUM_OBJ 90 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 4; +const uint8_t maxcar = 9; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 65; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +40, 67, 41, 49, 57, 56, 50, 32, 66, 46, 72, 46, 0 }; +const uint8_t loctxt_1[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 109, 97, 114, 115, 104, 0 }; +const uint8_t loctxt_2[] = { +66, 97, 114, 114, 101, 110, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_3[] = { +66, 97, 114, 114, 101, 110, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_4[] = { +66, 97, 114, 114, 101, 110, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_5[] = { +66, 97, 114, 114, 101, 110, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 103, 111, 114, 103, 101, 0 }; +const uint8_t loctxt_7[] = { +110, 97, 114, 114, 111, 119, 32, 103, 111, 114, 103, 101, 0 }; +const uint8_t loctxt_8[] = { +112, 111, 111, 108, 32, 111, 102, 32, 109, 117, 100, 0 }; +const uint8_t loctxt_9[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 80, 108, 97, 116, 101, 97, 117, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 67, 104, 97, 115, 109, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_13[] = { +67, 97, 118, 101, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 66, 114, 105, 100, 103, 101, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 116, 111, 110, 101, 32, 83, 108, 97, 98, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 110, 32, 97, 112, 114, 111, 110, 32, 111, 102, 32, 115, 116, 111, 110, 101, 0 }; +const uint8_t loctxt_18[] = { +100, 97, 114, 107, 32, 99, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_19[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_21[] = { +119, 105, 110, 100, 121, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 80, 108, 97, 116, 102, 111, 114, 109, 0 }; +const uint8_t loctxt_23[] = { +68, 117, 110, 103, 101, 111, 110, 0 }; +const uint8_t loctxt_24[] = { +100, 117, 110, 103, 101, 111, 110, 32, 97, 114, 101, 97, 0 }; +const uint8_t loctxt_25[] = { +72, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_26[] = { +115, 116, 111, 114, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_27[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_28[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_29[] = { +115, 116, 111, 110, 101, 32, 99, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_30[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_31[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_32[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_33[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 115, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_34[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_35[] = { +83, 116, 97, 98, 108, 101, 0 }; +const uint8_t loctxt_36[] = { +103, 114, 117, 98, 98, 121, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_37[] = { +103, 114, 117, 98, 98, 121, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_38[] = { +103, 117, 97, 114, 100, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_39[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 111, 102, 116, 121, 32, 112, 101, 97, 107, 0 }; +const uint8_t loctxt_40[] = { +99, 97, 118, 101, 0 }; +const uint8_t loctxt_41[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_42[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_43[] = { +77, 101, 97, 100, 111, 119, 0 }; +const uint8_t loctxt_44[] = { +114, 111, 99, 107, 121, 32, 98, 101, 97, 99, 104, 44, 32, 73, 32, 115, 101, 101, 32, 97, 32, 116, 114, 97, 105, 108, 0 }; +const uint8_t loctxt_45[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 100, 105, 114, 116, 32, 116, 114, 97, 105, 108, 0 }; +const uint8_t loctxt_46[] = { +84, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_47[] = { +77, 97, 114, 98, 108, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_48[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 83, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_49[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 83, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t loctxt_50[] = { +109, 117, 115, 105, 99, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_51[] = { +70, 105, 115, 104, 39, 115, 32, 115, 116, 111, 109, 97, 99, 104, 0 }; +const uint8_t loctxt_52[] = { +66, 111, 97, 116, 0 }; +const uint8_t loctxt_53[] = { +66, 111, 97, 116, 0 }; +const uint8_t loctxt_54[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 76, 97, 107, 101, 0 }; +const uint8_t loctxt_55[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_56[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 110, 32, 97, 108, 116, 97, 114, 33, 0 }; +const uint8_t loctxt_57[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 72, 117, 116, 0 }; +const uint8_t loctxt_58[] = { +119, 111, 111, 100, 101, 110, 32, 104, 117, 116, 0 }; +const uint8_t loctxt_59[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 119, 105, 110, 100, 111, 119, 0 }; +const uint8_t loctxt_60[] = { +115, 101, 99, 114, 101, 116, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_61[] = { +116, 104, 114, 111, 110, 101, 45, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_62[] = { +80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_63[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_64[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 74, 101, 116, 116, 121, 0 }; +const uint8_t loctxt_65[] = { +77, 101, 115, 115, 33, 32, 73, 39, 109, 32, 68, 69, 65, 68, 33, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 9, 0, 2, 0, 0, 0 } }, + { loctxt_2, { 3, 4, 5, 1, 0, 0 } }, + { loctxt_3, { 0, 2, 0, 0, 0, 0 } }, + { loctxt_4, { 2, 0, 0, 0, 0, 0 } }, + { loctxt_5, { 6, 0, 0, 2, 0, 0 } }, + { loctxt_6, { 7, 5, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 6, 0, 0, 0, 0 } }, + { loctxt_8, { 0, 7, 0, 0, 0, 0 } }, + { loctxt_9, { 10, 1, 0, 0, 0, 0 } }, + { loctxt_10, { 0, 9, 0, 0, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 0, 12 } }, + { loctxt_12, { 0, 0, 0, 0, 11, 0 } }, + { loctxt_13, { 12, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 15, 11, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 14, 0, 0, 16, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 15 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 19, 17, 28, 0, 0, 0 } }, + { loctxt_19, { 20, 18, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 19, 0, 0, 21, 29 } }, + { loctxt_21, { 0, 0, 0, 22, 0, 20 } }, + { loctxt_22, { 0, 0, 21, 0, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 0, 24, 0 } }, + { loctxt_24, { 0, 0, 0, 0, 25, 0 } }, + { loctxt_25, { 0, 0, 32, 8, 0, 24 } }, + { loctxt_26, { 27, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 28, 0, 0 } }, + { loctxt_28, { 0, 18, 27, 0, 0, 0 } }, + { loctxt_29, { 0, 0, 30, 0, 20, 0 } }, + { loctxt_30, { 0, 0, 0, 29, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 33 } }, + { loctxt_32, { 38, 0, 34, 25, 0, 0 } }, + { loctxt_33, { 34, 46, 0, 0, 31, 0 } }, + { loctxt_34, { 35, 33, 0, 32, 0, 0 } }, + { loctxt_35, { 0, 34, 0, 0, 0, 0 } }, + { loctxt_36, { 0, 0, 37, 0, 45, 0 } }, + { loctxt_37, { 0, 0, 0, 36, 0, 0 } }, + { loctxt_38, { 0, 32, 0, 0, 0, 0 } }, + { loctxt_39, { 0, 40, 0, 0, 0, 0 } }, + { loctxt_40, { 39, 0, 41, 0, 0, 0 } }, + { loctxt_41, { 0, 0, 42, 0, 0, 0 } }, + { loctxt_42, { 43, 0, 0, 41, 0, 0 } }, + { loctxt_43, { 44, 42, 0, 0, 0, 0 } }, + { loctxt_44, { 0, 43, 0, 0, 0, 0 } }, + { loctxt_45, { 0, 0, 0, 44, 0, 0 } }, + { loctxt_46, { 33, 0, 0, 0, 0, 0 } }, + { loctxt_47, { 48, 0, 0, 37, 0, 0 } }, + { loctxt_48, { 0, 47, 0, 0, 49, 0 } }, + { loctxt_49, { 50, 0, 0, 0, 0, 48 } }, + { loctxt_50, { 0, 49, 0, 0, 0, 0 } }, + { loctxt_51, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_52, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_53, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_54, { 55, 64, 57, 0, 0, 0 } }, + { loctxt_55, { 56, 54, 0, 0, 0, 0 } }, + { loctxt_56, { 0, 55, 0, 0, 0, 0 } }, + { loctxt_57, { 0, 0, 0, 54, 0, 0 } }, + { loctxt_58, { 57, 0, 0, 0, 0, 0 } }, + { loctxt_59, { 0, 60, 62, 0, 0, 0 } }, + { loctxt_60, { 59, 0, 0, 0, 0, 0 } }, + { loctxt_61, { 0, 0, 0, 63, 0, 0 } }, + { loctxt_62, { 59, 63, 0, 0, 0, 0 } }, + { loctxt_63, { 62, 49, 0, 61, 0, 0 } }, + { loctxt_64, { 54, 0, 0, 0, 0, 0 } }, + { loctxt_65, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 255, + 255, + 255, + 255, + 11, + 12, + 13, + 14, + 16, + 0, + 7, + 0, + 0, + 8, + 0, + 0, + 24, + 23, + 38, + 0, + 0, + 35, + 0, + 0, + 29, + 29, + 26, + 26, + 0, + 57, + 58, + 58, + 39, + 0, + 0, + 0, + 40, + 37, + 64, + 53, + 0, + 0, + 0, + 51, + 0, + 21, + 44, + 45, + 0, + 59, + 60, + 50, + 61, + 46, + 17, + 0, + 41, + 41, + 49, + 0, + 0, + 3, + 15, + 31, + 0, + 0, + 21, + 0, + 0, + 17, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30, + 27, + 53, + 0, + 0, + 0, + 0, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +65, 114, 114, 111, 119, 104, 101, 97, 100, 0 }; +const uint8_t objtxt_1[] = { +87, 105, 108, 108, 111, 119, 32, 98, 114, 97, 110, 99, 104, 0 }; +const uint8_t objtxt_2[] = { +70, 101, 97, 116, 104, 101, 114, 115, 0 }; +const uint8_t objtxt_3[] = { +83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_4[] = { +82, 111, 112, 101, 32, 98, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_5[] = { +67, 114, 101, 118, 105, 99, 101, 0 }; +const uint8_t objtxt_6[] = { +79, 105, 108, 32, 108, 97, 109, 112, 0 }; +const uint8_t objtxt_7[] = { +83, 117, 112, 112, 111, 114, 116, 32, 114, 111, 112, 101, 115, 0 }; +const uint8_t objtxt_8[] = { +71, 114, 105, 108, 108, 0 }; +const uint8_t objtxt_9[] = { +76, 105, 116, 32, 111, 105, 108, 32, 108, 97, 109, 112, 0 }; +const uint8_t objtxt_10[] = { +87, 97, 116, 101, 114, 32, 97, 99, 114, 111, 115, 115, 32, 103, 111, 114, 103, 101, 0 }; +const uint8_t objtxt_11[] = { +77, 117, 100, 0 }; +const uint8_t objtxt_12[] = { +76, 101, 118, 101, 114, 0 }; +const uint8_t objtxt_13[] = { +83, 116, 111, 110, 101, 32, 115, 108, 97, 98, 0 }; +const uint8_t objtxt_14[] = { +68, 97, 114, 107, 32, 111, 112, 101, 110, 105, 110, 103, 0 }; +const uint8_t objtxt_15[] = { +73, 114, 111, 110, 32, 104, 101, 108, 109, 101, 116, 0 }; +const uint8_t objtxt_16[] = { +71, 114, 97, 116, 105, 110, 103, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_17[] = { +65, 82, 78, 73, 68, 32, 116, 104, 101, 32, 102, 108, 101, 116, 99, 104, 101, 114, 0 }; +const uint8_t objtxt_18[] = { +71, 114, 111, 116, 101, 115, 113, 117, 101, 32, 97, 110, 105, 109, 97, 108, 0 }; +const uint8_t objtxt_19[] = { +65, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_20[] = { +77, 117, 115, 105, 99, 32, 115, 104, 101, 101, 116, 0 }; +const uint8_t objtxt_21[] = { +83, 116, 97, 114, 118, 105, 110, 103, 32, 109, 117, 108, 101, 0 }; +const uint8_t objtxt_22[] = { +65, 108, 116, 97, 114, 0 }; +const uint8_t objtxt_23[] = { +67, 111, 108, 117, 109, 110, 32, 111, 102, 32, 70, 105, 114, 101, 0 }; +const uint8_t objtxt_24[] = { +73, 114, 111, 110, 32, 119, 104, 101, 101, 108, 0 }; +const uint8_t objtxt_25[] = { +71, 117, 97, 114, 100, 0 }; +const uint8_t objtxt_26[] = { +66, 114, 101, 97, 100, 0 }; +const uint8_t objtxt_27[] = { +67, 104, 101, 101, 115, 101, 0 }; +const uint8_t objtxt_28[] = { +70, 108, 105, 110, 116, 115, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_29[] = { +87, 111, 111, 100, 101, 110, 32, 104, 117, 116, 0 }; +const uint8_t objtxt_30[] = { +66, 114, 105, 97, 114, 32, 112, 105, 112, 101, 0 }; +const uint8_t objtxt_31[] = { +84, 111, 98, 97, 99, 99, 111, 0 }; +const uint8_t objtxt_32[] = { +67, 97, 105, 114, 110, 32, 111, 102, 32, 115, 116, 111, 110, 101, 115, 0 }; +const uint8_t objtxt_33[] = { +83, 109, 111, 111, 116, 104, 32, 83, 116, 111, 110, 101, 0 }; +const uint8_t objtxt_34[] = { +79, 108, 100, 32, 98, 101, 103, 103, 97, 114, 0 }; +const uint8_t objtxt_35[] = { +77, 97, 103, 105, 99, 32, 66, 111, 119, 0 }; +const uint8_t objtxt_36[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_37[] = { +76, 97, 114, 103, 101, 32, 98, 111, 117, 108, 100, 101, 114, 0 }; +const uint8_t objtxt_38[] = { +66, 111, 97, 116, 0 }; +const uint8_t objtxt_39[] = { +79, 97, 114, 115, 0 }; +const uint8_t objtxt_40[] = { +68, 121, 110, 97, 109, 105, 116, 101, 32, 119, 105, 116, 104, 32, 108, 105, 116, 32, 102, 117, 115, 101, 0 }; +const uint8_t objtxt_41[] = { +68, 121, 110, 97, 109, 105, 116, 101, 32, 119, 105, 116, 104, 32, 115, 104, 111, 114, 116, 32, 102, 117, 115, 101, 0 }; +const uint8_t objtxt_42[] = { +102, 108, 117, 102, 102, 121, 32, 76, 101, 97, 118, 101, 115, 0 }; +const uint8_t objtxt_43[] = { +82, 97, 103, 103, 101, 100, 32, 99, 108, 111, 97, 107, 0 }; +const uint8_t objtxt_44[] = { +66, 117, 116, 116, 111, 110, 32, 105, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_45[] = { +71, 105, 97, 110, 116, 32, 107, 105, 116, 101, 0 }; +const uint8_t objtxt_46[] = { +65, 110, 105, 109, 97, 116, 101, 100, 32, 115, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t objtxt_47[] = { +77, 111, 117, 110, 100, 0 }; +const uint8_t objtxt_48[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_49[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_50[] = { +83, 108, 105, 116, 115, 32, 105, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_51[] = { +76, 97, 114, 103, 101, 32, 79, 114, 103, 97, 110, 0 }; +const uint8_t objtxt_52[] = { +88, 69, 82, 68, 79, 78, 32, 116, 104, 101, 32, 69, 118, 105, 108, 0 }; +const uint8_t objtxt_53[] = { +84, 97, 112, 101, 115, 116, 114, 121, 0 }; +const uint8_t objtxt_54[] = { +65, 114, 99, 104, 119, 97, 121, 0 }; +const uint8_t objtxt_55[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_56[] = { +67, 97, 118, 101, 32, 101, 110, 116, 114, 97, 110, 99, 101, 0 }; +const uint8_t objtxt_57[] = { +82, 111, 99, 107, 0 }; +const uint8_t objtxt_58[] = { +83, 104, 105, 109, 109, 101, 114, 105, 110, 103, 32, 118, 101, 105, 108, 0 }; +const uint8_t objtxt_59[] = { +67, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_60[] = { +72, 111, 108, 101, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_61[] = { +87, 101, 105, 114, 100, 32, 115, 104, 114, 117, 98, 0 }; +const uint8_t objtxt_62[] = { +83, 116, 114, 97, 103, 103, 108, 121, 32, 119, 101, 101, 100, 0 }; +const uint8_t objtxt_63[] = { +66, 111, 108, 116, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_64[] = { +66, 111, 110, 101, 115, 0 }; +const uint8_t objtxt_65[] = { +85, 110, 105, 102, 111, 114, 109, 0 }; +const uint8_t objtxt_66[] = { +68, 101, 97, 100, 32, 87, 97, 114, 114, 105, 111, 114, 0 }; +const uint8_t objtxt_67[] = { +84, 104, 105, 99, 107, 32, 83, 77, 79, 75, 69, 0 }; +const uint8_t objtxt_68[] = { +77, 97, 103, 105, 99, 97, 108, 32, 65, 114, 114, 111, 119, 0 }; +const uint8_t objtxt_69[] = { +82, 111, 112, 101, 0 }; +const uint8_t objtxt_70[] = { +66, 114, 111, 107, 101, 110, 32, 103, 114, 97, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_71[] = { +83, 116, 117, 110, 110, 101, 100, 32, 97, 110, 105, 109, 97, 108, 0 }; +const uint8_t objtxt_72[] = { +72, 97, 112, 112, 121, 32, 109, 117, 108, 101, 0 }; +const uint8_t objtxt_73[] = { +70, 105, 108, 108, 101, 100, 32, 80, 105, 112, 101, 0 }; +const uint8_t objtxt_74[] = { +108, 105, 116, 32, 112, 105, 112, 101, 0 }; +const uint8_t objtxt_75[] = { +76, 105, 116, 32, 99, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_76[] = { +85, 110, 98, 111, 108, 116, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_77[] = { +67, 108, 111, 97, 107, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_78[] = { +72, 101, 108, 109, 101, 116, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_79[] = { +85, 110, 105, 102, 111, 114, 109, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_80[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_81[] = { +66, 114, 111, 107, 101, 110, 32, 107, 105, 116, 101, 0 }; +const uint8_t objtxt_82[] = { +72, 101, 97, 118, 121, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_83[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_84[] = { +74, 101, 116, 116, 121, 0 }; +const uint8_t objtxt_85[] = { +82, 111, 112, 101, 32, 116, 105, 101, 100, 32, 116, 111, 32, 103, 114, 97, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_86[] = { +79, 116, 104, 101, 114, 32, 101, 110, 100, 32, 111, 102, 32, 114, 111, 112, 101, 0 }; +const uint8_t objtxt_87[] = { +77, 117, 108, 101, 32, 119, 105, 116, 104, 32, 114, 111, 112, 101, 32, 116, 105, 101, 100, 32, 116, 111, 32, 105, 116, 0 }; +const uint8_t objtxt_88[] = { +76, 97, 114, 103, 101, 32, 104, 111, 108, 101, 0 }; +const uint8_t objtxt_89[] = { +72, 111, 108, 101, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_90[] = { +99, 111, 114, 114, 105, 100, 111, 114, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, + objtxt_75, + objtxt_76, + objtxt_77, + objtxt_78, + objtxt_79, + objtxt_80, + objtxt_81, + objtxt_82, + objtxt_83, + objtxt_84, + objtxt_85, + objtxt_86, + objtxt_87, + objtxt_88, + objtxt_89, + objtxt_90, +}; +const uint8_t msgtxt_0[] = { +32, 0 }; +const uint8_t msgtxt_1[] = { +65, 82, 82, 79, 87, 32, 79, 70, 32, 68, 69, 65, 84, 72, 32, 40, 80, 116, 46, 50, 41, 0 }; +const uint8_t msgtxt_2[] = { +84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 106, 111, 121, 32, 105, 110, 32, 114, 101, 97, 108, 105, 116, 121, 0 }; +const uint8_t msgtxt_3[] = { +73, 32, 115, 101, 101, 32, 97, 32, 108, 101, 100, 103, 101, 32, 98, 101, 108, 111, 119, 0 }; +const uint8_t msgtxt_4[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 108, 101, 119, 32, 98, 121, 44, 32, 100, 114, 111, 112, 112, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_5[] = { +73, 39, 109, 32, 107, 105, 108, 108, 101, 100, 32, 111, 110, 32, 114, 111, 99, 107, 115, 33, 0 }; +const uint8_t msgtxt_6[] = { +87, 104, 101, 101, 101, 101, 101, 101, 33, 0 }; +const uint8_t msgtxt_7[] = { +83, 97, 102, 101, 32, 108, 97, 110, 100, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_8[] = { +83, 112, 108, 97, 97, 116, 33, 32, 72, 101, 97, 118, 121, 32, 108, 97, 110, 100, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_9[] = { +73, 32, 115, 101, 101, 32, 77, 97, 99, 104, 105, 110, 101, 114, 121, 0 }; +const uint8_t msgtxt_10[] = { +73, 32, 102, 101, 101, 108, 32, 83, 116, 114, 111, 110, 103, 101, 114, 33, 0 }; +const uint8_t msgtxt_11[] = { +71, 117, 97, 114, 100, 0 }; +const uint8_t msgtxt_12[] = { +73, 32, 104, 101, 97, 114, 32, 114, 117, 109, 98, 108, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_13[] = { +73, 39, 109, 32, 116, 111, 111, 32, 119, 101, 97, 107, 33, 0 }; +const uint8_t msgtxt_14[] = { +72, 105, 115, 32, 83, 107, 117, 108, 108, 32, 105, 115, 32, 98, 114, 111, 107, 101, 110, 33, 0 }; +const uint8_t msgtxt_15[] = { +87, 104, 121, 63, 0 }; +const uint8_t msgtxt_16[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_17[] = { +73, 32, 98, 97, 110, 103, 101, 100, 32, 109, 121, 32, 104, 101, 97, 100, 33, 0 }; +const uint8_t msgtxt_18[] = { +73, 32, 104, 97, 118, 101, 32, 110, 111, 32, 108, 105, 103, 104, 116, 101, 114, 33, 0 }; +const uint8_t msgtxt_19[] = { +73, 39, 118, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 104, 97, 114, 112, 33, 0 }; +const uint8_t msgtxt_20[] = { +79, 46, 32, 75, 46, 0 }; +const uint8_t msgtxt_21[] = { +73, 116, 39, 115, 32, 118, 101, 114, 121, 32, 102, 108, 117, 102, 102, 121, 33, 0 }; +const uint8_t msgtxt_22[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_23[] = { +73, 32, 102, 111, 117, 110, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_24[] = { +73, 32, 102, 111, 117, 110, 100, 32, 110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_25[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_26[] = { +84, 104, 105, 115, 32, 105, 115, 32, 121, 111, 117, 114, 32, 111, 110, 108, 121, 32, 72, 101, 108, 112, 32, 58, 0 }; +const uint8_t msgtxt_27[] = { +70, 105, 110, 100, 32, 65, 82, 78, 73, 68, 32, 116, 104, 101, 32, 102, 108, 101, 116, 99, 104, 101, 114, 0 }; +const uint8_t msgtxt_28[] = { +76, 101, 116, 32, 104, 105, 109, 32, 109, 97, 107, 101, 32, 97, 32, 77, 97, 103, 105, 99, 32, 65, 114, 114, 111, 119, 0 }; +const uint8_t msgtxt_29[] = { +102, 114, 111, 109, 32, 116, 104, 101, 32, 112, 97, 114, 116, 115, 32, 121, 111, 117, 32, 98, 101, 103, 97, 110, 32, 119, 105, 116, 104, 46, 0 }; +const uint8_t msgtxt_30[] = { +75, 105, 108, 108, 32, 88, 69, 82, 68, 79, 78, 32, 116, 104, 101, 32, 69, 118, 105, 108, 33, 0 }; +const uint8_t msgtxt_31[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_32[] = { +73, 116, 39, 115, 32, 110, 111, 119, 32, 111, 112, 101, 110, 0 }; +const uint8_t msgtxt_33[] = { +82, 105, 115, 107, 121, 33, 0 }; +const uint8_t msgtxt_34[] = { +72, 101, 32, 115, 116, 97, 98, 98, 101, 100, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_35[] = { +66, 117, 114, 114, 112, 44, 32, 116, 104, 97, 110, 107, 115, 33, 0 }; +const uint8_t msgtxt_36[] = { +84, 111, 32, 119, 104, 111, 109, 63, 0 }; +const uint8_t msgtxt_37[] = { +72, 101, 32, 119, 97, 107, 101, 115, 32, 97, 110, 100, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_38[] = { +72, 111, 119, 32, 99, 97, 110, 32, 73, 32, 114, 101, 112, 97, 121, 63, 0 }; +const uint8_t msgtxt_39[] = { +72, 101, 39, 115, 32, 117, 110, 99, 111, 110, 115, 99, 105, 111, 117, 115, 33, 0 }; +const uint8_t msgtxt_40[] = { +72, 101, 32, 97, 119, 97, 105, 116, 115, 32, 109, 121, 32, 111, 114, 100, 101, 114, 0 }; +const uint8_t msgtxt_41[] = { +65, 82, 78, 73, 68, 32, 109, 97, 107, 101, 115, 32, 97, 32, 77, 97, 103, 105, 99, 32, 65, 114, 114, 111, 119, 0 }; +const uint8_t msgtxt_42[] = { +84, 104, 101, 110, 32, 115, 99, 117, 116, 116, 108, 101, 115, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_43[] = { +72, 101, 39, 115, 32, 104, 101, 108, 112, 108, 101, 115, 115, 33, 0 }; +const uint8_t msgtxt_44[] = { +72, 101, 32, 115, 97, 121, 115, 39, 73, 39, 109, 32, 110, 111, 32, 77, 97, 103, 105, 99, 105, 97, 110, 33, 39, 0 }; +const uint8_t msgtxt_45[] = { +84, 111, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_46[] = { +84, 104, 101, 32, 103, 114, 97, 116, 105, 110, 103, 32, 98, 114, 111, 107, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +72, 101, 32, 100, 114, 111, 112, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_48[] = { +40, 85, 115, 101, 32, 50, 32, 119, 111, 114, 100, 115, 41, 0 }; +const uint8_t msgtxt_49[] = { +72, 101, 39, 115, 32, 115, 116, 117, 110, 110, 101, 100, 0 }; +const uint8_t msgtxt_50[] = { +84, 104, 101, 32, 109, 117, 108, 101, 32, 98, 111, 108, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_51[] = { +73, 116, 32, 100, 101, 112, 105, 99, 116, 115, 32, 97, 32, 70, 105, 114, 101, 45, 87, 97, 108, 107, 101, 114, 33, 0 }; +const uint8_t msgtxt_52[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_53[] = { +84, 104, 101, 32, 102, 108, 97, 109, 101, 115, 0 }; +const uint8_t msgtxt_54[] = { +119, 101, 97, 107, 101, 114, 32, 110, 111, 119, 0 }; +const uint8_t msgtxt_55[] = { +118, 101, 114, 121, 32, 104, 111, 116, 0 }; +const uint8_t msgtxt_56[] = { +115, 101, 101, 109, 0 }; +const uint8_t msgtxt_57[] = { +68, 101, 118, 111, 117, 114, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_58[] = { +73, 32, 119, 97, 115, 32, 115, 119, 97, 108, 108, 111, 119, 101, 100, 33, 0 }; +const uint8_t msgtxt_59[] = { +70, 105, 115, 104, 32, 99, 111, 117, 103, 104, 115, 32, 109, 101, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_60[] = { +83, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t msgtxt_61[] = { +115, 116, 111, 112, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_62[] = { +71, 114, 111, 117, 110, 100, 32, 116, 111, 111, 32, 104, 97, 114, 100, 33, 0 }; +const uint8_t msgtxt_63[] = { +73, 32, 115, 101, 101, 32, 97, 32, 112, 105, 99, 116, 117, 114, 101, 32, 111, 102, 32, 97, 32, 66, 101, 103, 103, 97, 114, 0 }; +const uint8_t msgtxt_64[] = { +72, 101, 32, 108, 101, 97, 118, 101, 115, 32, 109, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_65[] = { +73, 32, 100, 114, 111, 112, 112, 101, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_66[] = { +89, 101, 116, 33, 0 }; +const uint8_t msgtxt_67[] = { +73, 116, 32, 101, 120, 112, 108, 111, 100, 101, 115, 33, 0 }; +const uint8_t msgtxt_68[] = { +73, 39, 109, 32, 98, 108, 111, 119, 110, 32, 116, 111, 32, 98, 105, 116, 115, 33, 0 }; +const uint8_t msgtxt_69[] = { +73, 116, 39, 115, 32, 97, 32, 100, 105, 114, 103, 101, 33, 0 }; +const uint8_t msgtxt_70[] = { +76, 97, 110, 103, 117, 97, 103, 101, 33, 0 }; +const uint8_t msgtxt_71[] = { +86, 97, 110, 100, 97, 108, 33, 0 }; +const uint8_t msgtxt_72[] = { +73, 116, 39, 115, 32, 105, 110, 112, 101, 110, 101, 116, 114, 97, 98, 108, 101, 33, 0 }; +const uint8_t msgtxt_73[] = { +86, 101, 105, 108, 0 }; +const uint8_t msgtxt_74[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_75[] = { +88, 69, 82, 68, 79, 78, 32, 116, 104, 101, 32, 69, 86, 73, 76, 0 }; +const uint8_t msgtxt_76[] = { +84, 104, 101, 32, 65, 114, 114, 111, 119, 32, 104, 105, 116, 115, 0 }; +const uint8_t msgtxt_77[] = { +72, 101, 32, 100, 105, 101, 115, 32, 105, 110, 32, 97, 110, 32, 69, 118, 105, 108, 32, 103, 114, 101, 101, 110, 32, 99, 108, 111, 117, 100, 33, 0 }; +const uint8_t msgtxt_78[] = { +66, 82, 73, 76, 76, 73, 65, 78, 84, 33, 32, 89, 111, 117, 32, 100, 105, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_79[] = { +89, 111, 117, 32, 97, 114, 101, 32, 97, 32, 116, 114, 117, 101, 32, 72, 69, 82, 79, 33, 0 }; +const uint8_t msgtxt_80[] = { +72, 101, 97, 114, 115, 32, 109, 101, 0 }; +const uint8_t msgtxt_81[] = { +83, 101, 101, 115, 32, 109, 101, 0 }; +const uint8_t msgtxt_82[] = { +75, 105, 108, 108, 115, 32, 109, 101, 32, 119, 105, 116, 104, 32, 97, 110, 32, 69, 118, 105, 108, 32, 103, 108, 97, 110, 99, 101, 33, 0 }; +const uint8_t msgtxt_83[] = { +80, 114, 105, 115, 111, 110, 101, 114, 32, 98, 101, 108, 111, 119, 0 }; +const uint8_t msgtxt_84[] = { +84, 114, 121, 32, 74, 85, 77, 80, 0 }; +const uint8_t msgtxt_85[] = { +73, 32, 99, 97, 110, 32, 103, 101, 116, 32, 97, 32, 103, 111, 111, 100, 32, 115, 104, 111, 116, 32, 97, 116, 0 }; +const uint8_t msgtxt_86[] = { +72, 101, 32, 119, 97, 110, 116, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_87[] = { +66, 79, 79, 79, 79, 79, 79, 109, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 165, + 4, 19, + 56, 64, +/* AUTO 100 */ + 171, + 9, 1, 0, 1, + 1, 86, 2, 58, +/* AUTO 100 */ + 168, + 4, 17, 0, 4, + 59, +/* AUTO 100 */ + 165, + 4, 18, + 57, 64, +/* AUTO 100 */ + 168, + 7, 14, 0, 3, + 60, +/* AUTO 100 */ + 165, + 4, 28, + 56, 64, +/* AUTO 100 */ + 165, + 4, 21, + 56, 64, +/* AUTO 100 */ + 165, + 4, 22, + 57, 64, +/* AUTO 100 */ + 165, + 4, 28, + 56, 64, +/* AUTO 100 */ + 165, + 4, 25, + 56, 64, +/* AUTO 100 */ + 165, + 4, 8, + 57, 64, +/* AUTO 100 */ + 165, + 4, 51, + 56, 64, +/* AUTO 100 */ + 173, + 13, 72, 0, 72, 0, 72, + 74, 53, +/* AUTO 100 */ + 174, + 13, 40, 0, 1, 0, 1, + 81, 77, 81, +/* AUTO 100 */ + 182, + 1, 86, 7, 24, 0, 86, 0, 86, 0, 24, + 53, 62, 115, +/* AUTO 100 */ + 165, + 4, 44, + 57, 64, +/* AUTO 100 */ + 169, + 13, 40, 0, 1, + 81, 73, +/* AUTO 0 */ + 215, + 15, 0, 8, 6, 0, 37, 0, 88, 0, 40, + 72, 59, 102, 117, +/* AUTO 0 */ + 202, + 15, 0, 3, 88, + 117, 118, 61, +/* AUTO 0 */ + 202, + 3, 40, 15, 0, + 117, 118, 61, +/* AUTO 0 */ + 205, + 15, 0, 12, 40, 0, 40, + 59, 137, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 */ + 164, + 4, 65, + 63, +/* AUTO 100 */ + 172, + 4, 37, 2, 40, 0, 6, + 58, +/* AUTO 100 */ + 165, + 4, 61, + 57, 64, +/* AUTO 100 */ + 171, + 4, 61, 6, 77, + 125, 131, 132, 73, +/* AUTO 0 */ + 194, + 64, 64, 61, +}; +const uint8_t actions[] = { +/* JUMP ANY */ + 9, 50, 0, + 4, 10, 0, 11, + 54, 20, +/* JUMP ANY */ + 9, 50, 0, + 4, 22, 6, 45, + 5, 61, +/* JUMP ANY */ + 13, 50, 0, + 4, 22, 1, 45, 6, 78, + 17, 61, +/* JUMP ANY */ + 18, 50, 0, + 4, 22, 1, 45, 1, 78, 0, 10, + 54, 7, 73, +/* AUTO 0 */ + 200, + 0, 45, 0, 81, + 72, +/* JUMP ANY */ + 0, 50, 0, + 15, +/* GO BRID */ + 19, 1, 11, + 2, 4, 0, 14, 9, 2, 0, 2, + 54, 58, 4, 73, +/* AUTO 0 */ + 201, + 0, 15, 0, 12, + 62, 64, +/* GO BRID */ + 9, 1, 11, + 2, 4, 0, 14, + 54, 20, +/* GO CREV */ + 10, 1, 12, + 4, 12, 0, 13, + 54, 20, 64, +/* HOLD ROPE */ + 9, 21, 14, + 4, 14, 0, 3, + 58, 20, +/* CUT ROPE */ + 8, 23, 14, + 6, 3, 4, 14, + 19, +/* CUT ROPE */ + 12, 23, 14, + 1, 3, 7, 14, 3, 69, + 15, +/* CUT ROPE */ + 18, 23, 14, + 1, 3, 4, 14, 6, 42, 8, 3, + 6, 8, 61, +/* CUT ROPE */ + 23, 23, 14, + 1, 3, 4, 14, 1, 42, 8, 3, 0, 17, + 6, 88, 7, 54, +/* CUT ROPE */ + 13, 23, 14, + 1, 3, 4, 14, 9, 3, + 5, 61, +/* GET SHRU */ + 18, 10, 48, + 2, 61, 0, 61, 0, 42, 0, 42, + 72, 52, 20, +/* EXAM DOWN */ + 4, 5, 6, + 4, 10, + 3, +/* EAT WEED */ + 9, 33, 50, + 3, 62, 0, 4, + 58, 10, +/* EXAM SHRU */ + 4, 5, 48, + 3, 61, + 21, +/* EXAM GRIL */ + 4, 5, 15, + 4, 16, + 9, +/* GO ARCH */ + 8, 1, 63, + 2, 54, 0, 18, + 54, +/* DIG ANY */ + 17, 58, 0, + 4, 4, 14, 28, 0, 28, 0, 4, + 62, 23, +/* DIG ANY */ + 8, 58, 0, + 7, 4, 6, 36, + 112, +/* TURN WHEE */ + 21, 9, 27, + 4, 29, 8, 4, 1, 79, 0, 10, 0, 11, + 72, 12, +/* TURN WHEE */ + 13, 9, 27, + 4, 29, 8, 4, 6, 79, + 11, 111, +/* TURN WHEE */ + 8, 9, 27, + 4, 29, 9, 4, + 13, +/* WEAR UNIF */ + 13, 31, 72, + 1, 65, 0, 65, 0, 79, + 72, 20, +/* EXAM WARR */ + 22, 5, 66, + 3, 66, 14, 65, 14, 79, 0, 65, 0, 66, + 14, 23, 75, +/* WEAR HELM */ + 13, 31, 18, + 1, 15, 0, 15, 0, 78, + 72, 20, +/* WEAR CLOA */ + 13, 31, 51, + 1, 43, 0, 43, 0, 77, + 72, 20, +/* REMO UNIF */ + 13, 32, 72, + 1, 79, 0, 79, 0, 65, + 72, 20, +/* REMO HELM */ + 13, 32, 18, + 1, 78, 0, 78, 0, 15, + 72, 20, +/* REMO CLOA */ + 13, 32, 51, + 1, 77, 0, 77, 0, 43, + 72, 20, +/* HELP ANY */ + 3, 73, 0, + 26, 27, 28, 73, +/* AUTO 0 */ + 193, + 29, 30, +/* EXAM MUD */ + 17, 5, 56, + 4, 8, 14, 12, 0, 12, 0, 8, + 23, 62, +/* GO MUD */ + 9, 1, 56, + 2, 11, 0, 8, + 20, 54, +/* PULL LEVE */ + 17, 65, 16, + 2, 12, 14, 14, 0, 14, 0, 8, + 20, 62, +/* PULL LEVE */ + 8, 65, 16, + 2, 12, 2, 14, + 31, +/* GO OPEN */ + 14, 1, 42, + 4, 8, 2, 14, 0, 25, + 20, 54, 64, +/* EXAM WARR */ + 4, 5, 66, + 3, 66, + 14, +/* DROP UNIF */ + 4, 18, 72, + 1, 79, + 25, +/* DROP HELM */ + 4, 18, 18, + 1, 78, + 25, +/* DROP CLOA */ + 4, 18, 51, + 1, 77, + 25, +/* PUSH BUTT */ + 17, 74, 52, + 2, 44, 14, 22, 0, 22, 0, 46, + 62, 102, +/* LIGH LAMP */ + 18, 26, 13, + 3, 6, 1, 28, 0, 6, 0, 9, + 20, 72, 64, +/* LIGH LAMP */ + 8, 26, 13, + 3, 6, 6, 28, + 18, +/* UNLI LAMP */ + 13, 29, 13, + 3, 9, 0, 9, 0, 6, + 72, 20, +/* UNLO DOOR */ + 17, 38, 64, + 2, 83, 1, 19, 0, 80, 0, 83, + 72, 32, +/* GO DOOR */ + 9, 1, 64, + 2, 80, 0, 26, + 20, 54, +/* UNBO DOOR */ + 22, 76, 64, + 2, 63, 0, 63, 0, 76, 0, 82, 0, 55, + 72, 72, 20, +/* EXAM ALTA */ + 21, 5, 25, + 2, 22, 14, 59, 14, 75, 0, 59, 0, 46, + 62, 23, +/* GO DOOR */ + 9, 1, 64, + 2, 55, 0, 31, + 54, 20, +/* GO DOOR */ + 9, 1, 64, + 2, 76, 0, 30, + 54, 20, +/* EXAM GUAR */ + 4, 5, 28, + 4, 29, + 33, +/* KILL GUAR */ + 5, 13, 28, + 4, 29, + 34, 61, +/* EAT BREA */ + 9, 33, 29, + 3, 26, 0, 26, + 35, 59, +/* EAT CHEE */ + 9, 33, 31, + 3, 27, 0, 27, + 35, 59, +/* GIVE WEED */ + 5, 48, 50, + 3, 62, + 36, 48, +/* TO ARNI */ + 19, 77, 20, + 2, 17, 3, 62, 0, 5, 0, 62, + 58, 37, 38, 59, +/* EXAM ARNI */ + 8, 5, 20, + 2, 17, 9, 5, + 39, +/* EXAM ARNI */ + 8, 5, 20, + 2, 17, 8, 5, + 40, +/* MAKE ARRO */ + 20, 78, 7, + 2, 17, 8, 5, 3, 0, 3, 1, 3, 2, + 73, +/* AUTO 0 */ + 202, + 0, 0, 0, 68, + 41, 42, 72, +/* AUTO 0 */ + 206, + 0, 1, 0, 2, 0, 17, + 59, 59, 59, +/* EXAM TAPE */ + 18, 5, 62, + 2, 53, 14, 44, 0, 44, 0, 46, + 62, 51, 23, +/* EXAM TAPE */ + 4, 5, 62, + 2, 53, + 51, +/* MAKE ARRO */ + 8, 78, 7, + 2, 17, 9, 5, + 43, +/* MAKE ARRO */ + 8, 78, 7, + 2, 17, 8, 5, + 44, +/* TIE ROPE */ + 1, 45, 14, + 45, 48, +/* TO GRAT */ + 23, 77, 19, + 1, 69, 2, 16, 0, 69, 0, 86, 0, 16, + 20, 72, 59, 73, +/* AUTO 0 */ + 200, + 0, 85, 0, 24, + 62, +/* TO MULE */ + 21, 77, 24, + 3, 86, 2, 72, 4, 24, 0, 72, 0, 87, + 72, 73, +/* AUTO 0 */ + 196, + 0, 86, + 59, +/* PULL MULE */ + 23, 65, 24, + 2, 87, 0, 85, 0, 89, 0, 70, 0, 24, + 72, 62, 46, 73, +/* AUTO 0 */ + 199, + 0, 87, + 59, 50, 64, 64, +/* FEED MULE */ + 22, 47, 24, + 3, 26, 2, 21, 0, 21, 0, 72, 0, 26, + 72, 59, 20, +/* FEED MULE */ + 22, 47, 24, + 3, 27, 2, 21, 0, 21, 0, 72, 0, 27, + 72, 59, 20, +/* KILL ANIM */ + 23, 13, 21, + 2, 18, 0, 19, 0, 38, 0, 71, 0, 18, + 62, 47, 72, 49, +/* GO HOLE */ + 9, 1, 57, + 2, 89, 0, 23, + 54, 20, +/* DROP HELM */ + 8, 18, 18, + 1, 15, 0, 15, + 53, +/* DROP UNIF */ + 8, 18, 72, + 1, 65, 0, 65, + 53, +/* DROP CLOA */ + 8, 18, 51, + 1, 43, 0, 43, + 53, +/* LIGH CAND */ + 22, 26, 69, + 3, 28, 2, 59, 0, 23, 0, 59, 0, 75, + 53, 72, 102, +/* PRAY ANY */ + 9, 41, 0, + 2, 75, 0, 7, + 58, 102, +/* EXAM FLAM */ + 10, 5, 26, + 8, 7, 2, 23, + 103, 106, 104, +/* EXAM FLAM */ + 10, 5, 26, + 9, 7, 2, 23, + 103, 106, 105, +/* GO FLAM */ + 13, 1, 26, + 8, 7, 2, 23, 0, 56, + 54, 20, +/* GO FLAM */ + 10, 1, 26, + 9, 7, 2, 23, + 103, 107, 61, +/* GO BOAT */ + 9, 1, 43, + 2, 38, 0, 53, + 54, 20, +/* ROW BOAT */ + 15, 57, 43, + 1, 39, 4, 53, 0, 51, + 20, 88, 108, 54, +/* GO JETT */ + 9, 1, 46, + 2, 84, 0, 64, + 54, 20, +/* GO HUT */ + 9, 1, 33, + 2, 29, 0, 58, + 54, 20, +/* FILL PIPE */ + 22, 59, 34, + 3, 30, 3, 31, 0, 30, 0, 73, 0, 31, + 20, 72, 59, +/* LIGH PIPE */ + 17, 26, 34, + 1, 73, 1, 28, 0, 73, 0, 74, + 20, 72, +/* SMOK PIPE */ + 21, 63, 34, + 1, 74, 4, 51, 5, 67, 0, 67, 0, 51, + 20, 62, +/* SMOK PIPE */ + 15, 63, 34, + 1, 74, 2, 67, 0, 44, + 20, 88, 109, 73, +/* AUTO 0 */ + 201, + 0, 44, 0, 74, + 54, 59, +/* SMOK PIPE */ + 4, 63, 34, + 1, 74, + 20, +/* SMAS SKEL */ + 17, 60, 54, + 1, 57, 2, 46, 0, 46, 0, 64, + 72, 20, +/* GO TRAI */ + 14, 1, 40, + 4, 44, 13, 64, 0, 45, + 20, 54, 64, +/* GO TRAI */ + 9, 1, 40, + 4, 44, 14, 64, + 110, 111, +/* GO CAVE */ + 9, 1, 65, + 2, 56, 0, 40, + 20, 54, +/* DIG ANY */ + 17, 58, 0, + 2, 47, 1, 36, 0, 47, 0, 48, + 72, 20, +/* GO HOLE */ + 9, 1, 57, + 2, 48, 0, 36, + 54, 20, +/* EXAM CAIR */ + 17, 5, 36, + 4, 39, 14, 33, 0, 33, 0, 39, + 62, 23, +/* EXAM STON */ + 4, 5, 37, + 3, 33, + 113, +/* RUB STON */ + 18, 16, 37, + 1, 33, 14, 34, 0, 34, 0, 34, + 74, 53, 102, +/* RUB STON */ + 4, 16, 37, + 1, 33, + 31, +/* GIVE STON */ + 22, 48, 37, + 1, 33, 2, 34, 0, 34, 0, 1, 0, 35, + 62, 74, 73, +/* AUTO 0 */ + 206, + 0, 33, 0, 1, 0, 35, + 62, 53, 114, +/* DIG ANY */ + 21, 58, 0, + 1, 36, 4, 40, 14, 41, 0, 41, 0, 40, + 62, 23, +/* DIG ANY */ + 0, 58, 0, + 24, +/* PUSH BUTT */ + 4, 74, 52, + 2, 44, + 31, +/* TO MULE */ + 5, 77, 24, + 1, 69, + 15, 116, +/* LIGH FUSE */ + 18, 26, 45, + 2, 41, 3, 28, 0, 40, 0, 41, + 72, 20, 73, +/* AUTO 0 */ + 206, + 0, 1, 0, 3, 0, 1, + 81, 79, 81, +/* WAIT ANY */ + 1, 52, 0, + 20, 88, +/* GO HOLE */ + 9, 1, 57, + 2, 88, 0, 47, + 54, 20, +/* EXAM *I'm by a marsh */ + 4, 5, 87, + 3, 20, + 119, +/* GO CORR */ + 9, 1, 30, + 2, 90, 0, 63, + 54, 64, +/* EXAM VEIL */ + 4, 5, 68, + 2, 58, + 122, +/* GO VEIL */ + 5, 1, 68, + 2, 58, + 123, 111, +/* EXAM WIND */ + 5, 5, 58, + 4, 59, + 124, 125, +/* PLAY MUSI */ + 19, 53, 81, + 4, 50, 3, 20, 0, 58, 0, 90, + 72, 102, 64, 64, +/* FIRE XERD */ + 15, 39, 61, + 1, 35, 1, 68, 4, 60, + 126, 125, 127, 73, +/* AUTO 0 */ + 195, + 128, 129, 64, 63, +/* FIRE XERD */ + 15, 39, 61, + 4, 61, 1, 68, 1, 35, + 125, 130, 132, 73, +/* AUTO 0 */ + 194, + 64, 64, 61, +/* OPEN DOOR */ + 0, 37, 64, + 22, +/* EXAM GRAT */ + 5, 5, 19, + 2, 16, + 124, 133, +/* SAY ANY */ + 2, 42, 0, + 20, 85, 31, +/* EAT ANY */ + 0, 33, 0, + 22, +/* FLY KITE */ + 0, 79, 53, + 134, +/* EXAM SLIT */ + 5, 5, 59, + 4, 60, + 135, 125, +/* EXAM BEGG */ + 4, 5, 38, + 2, 34, + 136, +/* SAVE ANY */ + 0, 4, 0, + 71, +/* QUIT ANY */ + 0, 3, 0, + 63, +/* INVE ANY */ + 0, 2, 0, + 66, +/* FUCK ANY */ + 0, 71, 0, + 120, +/* EXAM ORGA */ + 17, 5, 60, + 4, 50, 14, 20, 0, 20, 0, 50, + 62, 23, +/* PRAY ANY */ + 0, 41, 0, + 31, +/* PLAY ANY */ + 0, 53, 0, + 22, +/* SMAS ANY */ + 0, 60, 0, + 121, +/* EXAM ANY */ + 0, 5, 0, + 16, +/* KILL ANY */ + 0, 13, 0, + 22, +/* GO ANY */ + 0, 1, 0, + 22, +/* SWIM ANY */ + 0, 56, 0, + 22, +/* CLIM ANY */ + 0, 67, 0, + 22, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* INVE */ + 73, 78, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* EXAM */ + 69, 88, 65, 77, + /* *INSP */ + 201, 78, 83, 80, + /* *LOOK */ + 204, 79, 79, 75, + /* *SEAR */ + 211, 69, 65, 82, + /* TURN */ + 84, 85, 82, 78, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *ACQU */ + 193, 67, 81, 85, + /* KILL */ + 75, 73, 76, 76, + /* *DEST */ + 196, 69, 83, 84, + /* *ATTA */ + 193, 84, 84, 65, + /* RUB */ + 82, 85, 66, 32, + /* *POLI */ + 208, 79, 76, 73, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DISC */ + 196, 73, 83, 67, + /* HOLD */ + 72, 79, 76, 68, + /* *GRAB */ + 199, 82, 65, 66, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* *SLIC */ + 211, 76, 73, 67, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* *BURN */ + 194, 85, 82, 78, + /* UNLI */ + 85, 78, 76, 73, + /* *EXTI */ + 197, 88, 84, 73, + /* WEAR */ + 87, 69, 65, 82, + /* REMO */ + 82, 69, 77, 79, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* *NIBB */ + 206, 73, 66, 66, + /* *DEVO */ + 196, 69, 86, 79, + /* OPEN */ + 79, 80, 69, 78, + /* UNLO */ + 85, 78, 76, 79, + /* FIRE */ + 70, 73, 82, 69, + /* *SHOO */ + 211, 72, 79, 79, + /* PRAY */ + 80, 82, 65, 89, + /* SAY */ + 83, 65, 89, 32, + /* *TALK */ + 212, 65, 76, 75, + /* *ASK */ + 193, 83, 75, 32, + /* TIE */ + 84, 73, 69, 32, + /* *WRAP */ + 215, 82, 65, 80, + /* FEED */ + 70, 69, 69, 68, + /* GIVE */ + 71, 73, 86, 69, + /* *OFFE */ + 207, 70, 70, 69, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* WAIT */ + 87, 65, 73, 84, + /* PLAY */ + 80, 76, 65, 89, + /* READ */ + 82, 69, 65, 68, + /* MOVE */ + 77, 79, 86, 69, + /* SWIM */ + 83, 87, 73, 77, + /* ROW */ + 82, 79, 87, 32, + /* DIG */ + 68, 73, 71, 32, + /* FILL */ + 70, 73, 76, 76, + /* SMAS */ + 83, 77, 65, 83, + /* *BREA */ + 194, 82, 69, 65, + /* *RUIN */ + 210, 85, 73, 78, + /* SMOK */ + 83, 77, 79, 75, + /* *PUFF */ + 208, 85, 70, 70, + /* PULL */ + 80, 85, 76, 76, + /* *TUG */ + 212, 85, 71, 32, + /* CLIM */ + 67, 76, 73, 77, + /* THRO */ + 84, 72, 82, 79, + /* *SLIN */ + 211, 76, 73, 78, + /* *CHUC */ + 195, 72, 85, 67, + /* FUCK */ + 70, 85, 67, 75, + /* *PISS */ + 208, 73, 83, 83, + /* HELP */ + 72, 69, 76, 80, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* UNBO */ + 85, 78, 66, 79, + /* TO */ + 84, 79, 32, 32, + /* MAKE */ + 77, 65, 75, 69, + /* FLY */ + 70, 76, 89, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORTH */ + 78, 79, 82, 84, + /* SOUTH */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* ARRO */ + 65, 82, 82, 79, + /* WILL */ + 87, 73, 76, 76, + /* *BRAN */ + 194, 82, 65, 78, + /* SWOR */ + 83, 87, 79, 82, + /* BRID */ + 66, 82, 73, 68, + /* CREV */ + 67, 82, 69, 86, + /* LAMP */ + 76, 65, 77, 80, + /* ROPE */ + 82, 79, 80, 69, + /* GRIL */ + 71, 82, 73, 76, + /* LEVE */ + 76, 69, 86, 69, + /* SLAB */ + 83, 76, 65, 66, + /* HELM */ + 72, 69, 76, 77, + /* GRAT */ + 71, 82, 65, 84, + /* ARNI */ + 65, 82, 78, 73, + /* ANIM */ + 65, 78, 73, 77, + /* KEY */ + 75, 69, 89, 32, + /* OFF */ + 79, 70, 70, 32, + /* MULE */ + 77, 85, 76, 69, + /* ALTA */ + 65, 76, 84, 65, + /* FLAM */ + 70, 76, 65, 77, + /* WHEE */ + 87, 72, 69, 69, + /* GUAR */ + 71, 85, 65, 82, + /* BREA */ + 66, 82, 69, 65, + /* CORR */ + 67, 79, 82, 82, + /* CHEE */ + 67, 72, 69, 69, + /* FLIN */ + 70, 76, 73, 78, + /* HUT */ + 72, 85, 84, 32, + /* PIPE */ + 80, 73, 80, 69, + /* TOBA */ + 84, 79, 66, 65, + /* CAIR */ + 67, 65, 73, 82, + /* STON */ + 83, 84, 79, 78, + /* BEGG */ + 66, 69, 71, 71, + /* BOW */ + 66, 79, 87, 32, + /* TRAI */ + 84, 82, 65, 73, + /* SHOV */ + 83, 72, 79, 86, + /* OPEN */ + 79, 80, 69, 78, + /* BOAT */ + 66, 79, 65, 84, + /* OARS */ + 79, 65, 82, 83, + /* FUSE */ + 70, 85, 83, 69, + /* JETT */ + 74, 69, 84, 84, + /* DYNA */ + 68, 89, 78, 65, + /* SHRU */ + 83, 72, 82, 85, + /* LEAV */ + 76, 69, 65, 86, + /* WEED */ + 87, 69, 69, 68, + /* CLOA */ + 67, 76, 79, 65, + /* BUTT */ + 66, 85, 84, 84, + /* KITE */ + 75, 73, 84, 69, + /* SKEL */ + 83, 75, 69, 76, + /* MOUN */ + 77, 79, 85, 78, + /* MUD */ + 77, 85, 68, 32, + /* HOLE */ + 72, 79, 76, 69, + /* WIND */ + 87, 73, 78, 68, + /* SLIT */ + 83, 76, 73, 84, + /* ORGA */ + 79, 82, 71, 65, + /* XERD */ + 88, 69, 82, 68, + /* TAPE */ + 84, 65, 80, 69, + /* ARCH */ + 65, 82, 67, 72, + /* DOOR */ + 68, 79, 79, 82, + /* CAVE */ + 67, 65, 86, 69, + /* WARR */ + 87, 65, 82, 82, + /* ROCK */ + 82, 79, 67, 75, + /* VEIL */ + 86, 69, 73, 76, + /* CAND */ + 67, 65, 78, 68, + /* BONE */ + 66, 79, 78, 69, + /* FISH */ + 70, 73, 83, 72, + /* UNIF */ + 85, 78, 73, 70, + /* MARS */ + 77, 65, 82, 83, + /* STAI */ + 83, 84, 65, 73, + /* LAKE */ + 76, 65, 75, 69, + /* FEAT */ + 70, 69, 65, 84, + /* GORG */ + 71, 79, 82, 71, + /* LEDG */ + 76, 69, 68, 71, + /* WATE */ + 87, 65, 84, 69, + /* BOUL */ + 66, 79, 85, 76, + /* MUSI */ + 77, 85, 83, 73, + /* *DIRG */ + 196, 73, 82, 71, + 0, +}; +const uint8_t automap[] = { + /* ARRO */ + 65, 82, 82, 79, + 0, + /* WILL */ + 87, 73, 76, 76, + 1, + /* FEAT */ + 70, 69, 65, 84, + 2, + /* SWOR */ + 83, 87, 79, 82, + 3, + /* LAMP */ + 76, 65, 77, 80, + 6, + /* LAMP */ + 76, 65, 77, 80, + 9, + /* HELM */ + 72, 69, 76, 77, + 15, + /* KEY */ + 75, 69, 89, 32, + 19, + /* MUSI */ + 77, 85, 83, 73, + 20, + /* BREA */ + 66, 82, 69, 65, + 26, + /* CHEE */ + 67, 72, 69, 69, + 27, + /* FLIN */ + 70, 76, 73, 78, + 28, + /* PIPE */ + 80, 73, 80, 69, + 30, + /* TOBA */ + 84, 79, 66, 65, + 31, + /* STON */ + 83, 84, 79, 78, + 33, + /* BOW */ + 66, 79, 87, 32, + 35, + /* SHOV */ + 83, 72, 79, 86, + 36, + /* OARS */ + 79, 65, 82, 83, + 39, + /* DYNA */ + 68, 89, 78, 65, + 40, + /* DYNA */ + 68, 89, 78, 65, + 41, + /* LEAV */ + 76, 69, 65, 86, + 42, + /* CLOA */ + 67, 76, 79, 65, + 43, + /* KITE */ + 75, 73, 84, 69, + 45, + /* ROCK */ + 82, 79, 67, 75, + 57, + /* WEED */ + 87, 69, 69, 68, + 62, + /* BONE */ + 66, 79, 78, 69, + 64, + /* UNIF */ + 85, 78, 73, 70, + 65, + /* ARRO */ + 65, 82, 82, 79, + 68, + /* ROPE */ + 82, 79, 80, 69, + 69, + /* PIPE */ + 80, 73, 80, 69, + 73, + /* PIPE */ + 80, 73, 80, 69, + 74, + /* KITE */ + 75, 73, 84, 69, + 81, + /* ROPE */ + 82, 79, 80, 69, + 86, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst05.c b/Applications/games/myst05.c new file mode 100644 index 00000000..c7963cd2 --- /dev/null +++ b/Applications/games/myst05.c @@ -0,0 +1,3408 @@ +#define NUM_OBJ 90 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 200; +const uint8_t lightfill = 200; +const uint8_t startcarried = 1; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 45; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 67, 41, 32, 49, 57, 56, 50, 32, 66, 46, 72, 79, 87, 65, 82, 84, 72, 0 }; +const uint8_t loctxt_1[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 102, 114, 101, 105, 103, 104, 116, 101, 114, 39, 115, 32, 115, 111, 99, 105, 97, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_2[] = { +99, 114, 101, 119, 109, 97, 110, 39, 115, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_3[] = { +110, 105, 99, 101, 32, 119, 97, 114, 109, 32, 98, 117, 110, 107, 0 }; +const uint8_t loctxt_4[] = { +99, 114, 101, 119, 109, 97, 110, 39, 115, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 99, 114, 101, 119, 109, 97, 110, 39, 115, 32, 98, 117, 110, 107, 0 }; +const uint8_t loctxt_6[] = { +108, 97, 114, 103, 101, 32, 97, 105, 114, 32, 118, 101, 110, 116, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 106, 117, 110, 99, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 114, 101, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 0 }; +const uint8_t loctxt_8[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 115, 104, 105, 112, 39, 115, 32, 66, 114, 105, 100, 103, 101, 0 }; +const uint8_t loctxt_9[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 65, 105, 114, 108, 111, 99, 107, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 105, 110, 115, 105, 100, 101, 32, 116, 104, 101, 32, 99, 111, 110, 116, 114, 111, 108, 32, 99, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t loctxt_11[] = { +112, 97, 115, 115, 97, 103, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 71, 97, 108, 108, 101, 121, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 67, 97, 112, 116, 97, 105, 110, 39, 115, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 67, 97, 112, 116, 97, 105, 110, 39, 115, 32, 98, 117, 110, 107, 0 }; +const uint8_t loctxt_15[] = { +108, 97, 114, 103, 101, 32, 109, 101, 116, 97, 108, 32, 112, 105, 112, 101, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 101, 109, 101, 114, 103, 101, 110, 99, 121, 32, 65, 105, 114, 108, 111, 99, 107, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 111, 117, 116, 32, 111, 110, 32, 116, 104, 101, 32, 72, 117, 108, 108, 0 }; +const uint8_t loctxt_18[] = { +83, 104, 117, 116, 116, 108, 101, 32, 67, 114, 97, 102, 116, 32, 98, 97, 121, 0 }; +const uint8_t loctxt_19[] = { +83, 104, 117, 116, 116, 108, 101, 32, 67, 114, 97, 102, 116, 0 }; +const uint8_t loctxt_20[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_21[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_22[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_23[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_24[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_25[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_26[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_27[] = { +109, 97, 122, 101, 32, 111, 102, 32, 118, 101, 110, 116, 105, 108, 97, 116, 105, 111, 110, 32, 100, 117, 99, 116, 115, 0 }; +const uint8_t loctxt_28[] = { +119, 111, 114, 107, 115, 104, 111, 112, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 117, 110, 100, 101, 114, 110, 101, 97, 116, 104, 32, 116, 104, 101, 32, 76, 97, 116, 104, 101, 0 }; +const uint8_t loctxt_30[] = { +115, 116, 111, 114, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_31[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 82, 101, 97, 99, 116, 111, 114, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 67, 82, 69, 65, 84, 85, 82, 69, 39, 83, 32, 104, 105, 100, 101, 111, 117, 116, 0 }; +const uint8_t loctxt_33[] = { +116, 111, 116, 97, 108, 108, 121, 32, 119, 114, 101, 99, 107, 101, 100, 32, 99, 97, 98, 105, 110, 0 }; +const uint8_t loctxt_34[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 98, 117, 110, 107, 0 }; +const uint8_t loctxt_35[] = { +99, 97, 98, 108, 101, 32, 114, 117, 110, 119, 97, 121, 0 }; +const uint8_t loctxt_36[] = { +99, 97, 114, 103, 111, 32, 115, 116, 111, 114, 97, 103, 101, 32, 104, 111, 108, 100, 0 }; +const uint8_t loctxt_37[] = { +108, 97, 114, 103, 101, 32, 99, 97, 103, 101, 0 }; +const uint8_t loctxt_38[] = { +99, 97, 114, 103, 111, 32, 115, 116, 111, 114, 97, 103, 101, 32, 104, 111, 108, 100, 0 }; +const uint8_t loctxt_39[] = { +108, 97, 114, 103, 101, 32, 99, 114, 97, 116, 101, 0 }; +const uint8_t loctxt_40[] = { +76, 97, 114, 100, 101, 114, 0 }; +const uint8_t loctxt_41[] = { +109, 101, 116, 97, 108, 32, 112, 97, 115, 115, 97, 103, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_42[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 106, 117, 110, 99, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 114, 101, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 0 }; +const uint8_t loctxt_43[] = { +109, 101, 116, 97, 108, 32, 112, 97, 115, 115, 97, 103, 101, 119, 97, 121, 0 }; +const uint8_t loctxt_44[] = { +101, 115, 114, 102, 111, 116, 100, 100, 116, 99, 111, 116, 103, 0 }; +const uint8_t loctxt_45[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 77, 65, 78, 85, 82, 69, 32, 116, 104, 105, 115, 32, 116, 105, 109, 101, 32, 33, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 2, 0, 4, 0, 0 } }, + { loctxt_2, { 1, 0, 0, 0, 0, 0 } }, + { loctxt_3, { 0, 0, 0, 0, 0, 2 } }, + { loctxt_4, { 0, 0, 1, 0, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 4 } }, + { loctxt_6, { 7, 0, 0, 0, 0, 4 } }, + { loctxt_7, { 0, 11, 8, 9, 0, 0 } }, + { loctxt_8, { 41, 7, 0, 0, 0, 0 } }, + { loctxt_9, { 0, 0, 7, 0, 0, 0 } }, + { loctxt_10, { 8, 0, 0, 0, 0, 0 } }, + { loctxt_11, { 7, 13, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 1, 42, 11, 0, 0 } }, + { loctxt_13, { 11, 0, 43, 42, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 13 } }, + { loctxt_15, { 0, 0, 0, 0, 16, 13 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 15 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_20, { 20, 20, 21, 20, 8, 20 } }, + { loctxt_21, { 21, 23, 21, 21, 33, 21 } }, + { loctxt_22, { 20, 24, 22, 22, 32, 22 } }, + { loctxt_23, { 23, 23, 23, 22, 28, 23 } }, + { loctxt_24, { 24, 24, 25, 24, 24, 24 } }, + { loctxt_25, { 23, 27, 25, 25, 25, 25 } }, + { loctxt_26, { 24, 26, 26, 30, 26, 26 } }, + { loctxt_27, { 27, 27, 27, 26, 27, 31 } }, + { loctxt_28, { 0, 0, 0, 0, 0, 25 } }, + { loctxt_29, { 28, 0, 0, 0, 0, 0 } }, + { loctxt_30, { 0, 0, 26, 0, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 24, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 22 } }, + { loctxt_33, { 0, 0, 0, 0, 0, 22 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 33 } }, + { loctxt_35, { 0, 0, 0, 36, 0, 33 } }, + { loctxt_36, { 38, 0, 35, 0, 0, 0 } }, + { loctxt_37, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_38, { 0, 36, 0, 0, 0, 0 } }, + { loctxt_39, { 0, 0, 0, 38, 0, 0 } }, + { loctxt_40, { 12, 0, 0, 0, 0, 0 } }, + { loctxt_41, { 42, 8, 0, 0, 0, 0 } }, + { loctxt_42, { 0, 41, 13, 12, 0, 0 } }, + { loctxt_43, { 0, 0, 28, 13, 0, 0 } }, + { loctxt_44, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_45, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 255, + 0, + 1, + 1, + 2, + 2, + 0, + 0, + 4, + 0, + 0, + 0, + 5, + 6, + 8, + 0, + 0, + 0, + 9, + 10, + 0, + 0, + 11, + 0, + 12, + 12, + 0, + 0, + 0, + 0, + 13, + 0, + 0, + 0, + 15, + 16, + 16, + 16, + 0, + 0, + 0, + 17, + 18, + 18, + 19, + 28, + 29, + 31, + 0, + 31, + 0, + 0, + 28, + 30, + 0, + 0, + 0, + 32, + 0, + 0, + 0, + 0, + 32, + 0, + 0, + 40, + 12, + 0, + 24, + 40, + 0, + 33, + 0, + 0, + 35, + 0, + 0, + 0, + 36, + 37, + 0, + 38, + 39, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +87, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_1[] = { +32, 0 }; +const uint8_t objtxt_2[] = { +67, 111, 117, 99, 104, 0 }; +const uint8_t objtxt_3[] = { +67, 108, 111, 115, 101, 100, 32, 115, 116, 101, 101, 108, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_4[] = { +67, 114, 101, 119, 109, 97, 110, 39, 115, 32, 66, 117, 110, 107, 0 }; +const uint8_t objtxt_5[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_6[] = { +67, 108, 111, 115, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_7[] = { +65, 117, 116, 111, 32, 100, 105, 115, 112, 101, 110, 115, 101, 32, 112, 105, 108, 108, 111, 119, 0 }; +const uint8_t objtxt_8[] = { +67, 114, 101, 119, 109, 97, 110, 39, 115, 32, 66, 117, 110, 107, 0 }; +const uint8_t objtxt_9[] = { +71, 108, 111, 119, 105, 110, 103, 32, 73, 108, 108, 117, 109, 105, 110, 97, 110, 116, 32, 82, 111, 100, 0 }; +const uint8_t objtxt_10[] = { +68, 117, 108, 108, 32, 73, 108, 108, 117, 109, 105, 110, 97, 110, 116, 32, 82, 111, 100, 0 }; +const uint8_t objtxt_11[] = { +0 }; +const uint8_t objtxt_12[] = { +76, 97, 114, 103, 101, 32, 65, 105, 114, 32, 118, 101, 110, 116, 0 }; +const uint8_t objtxt_13[] = { +68, 117, 115, 116, 0 }; +const uint8_t objtxt_14[] = { +67, 111, 110, 116, 114, 111, 108, 32, 67, 111, 110, 115, 111, 108, 101, 0 }; +const uint8_t objtxt_15[] = { +83, 109, 97, 108, 108, 32, 109, 101, 116, 97, 108, 32, 114, 105, 110, 103, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_16[] = { +79, 112, 101, 110, 32, 72, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_17[] = { +77, 101, 116, 97, 108, 32, 72, 111, 111, 107, 0 }; +const uint8_t objtxt_18[] = { +79, 82, 65, 78, 71, 69, 32, 66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_19[] = { +69, 108, 101, 99, 116, 114, 105, 99, 97, 108, 32, 101, 100, 103, 101, 32, 99, 111, 110, 110, 101, 99, 116, 111, 114, 0 }; +const uint8_t objtxt_20[] = { +67, 105, 114, 99, 117, 105, 116, 32, 66, 111, 97, 114, 100, 0 }; +const uint8_t objtxt_21[] = { +80, 108, 117, 103, 103, 101, 100, 32, 105, 110, 32, 67, 105, 114, 99, 117, 105, 116, 32, 66, 111, 97, 114, 100, 0 }; +const uint8_t objtxt_22[] = { +67, 108, 111, 115, 101, 100, 32, 115, 116, 101, 101, 108, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_23[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_24[] = { +79, 118, 101, 110, 0 }; +const uint8_t objtxt_25[] = { +76, 97, 114, 100, 101, 114, 0 }; +const uint8_t objtxt_26[] = { +70, 114, 117, 105, 116, 32, 99, 97, 107, 101, 0 }; +const uint8_t objtxt_27[] = { +68, 114, 117, 103, 103, 101, 100, 32, 70, 114, 117, 105, 116, 32, 99, 97, 107, 101, 0 }; +const uint8_t objtxt_28[] = { +66, 76, 65, 67, 75, 32, 66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_29[] = { +87, 72, 73, 84, 69, 32, 66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_30[] = { +67, 97, 112, 116, 97, 105, 110, 39, 115, 32, 66, 117, 110, 107, 0 }; +const uint8_t objtxt_31[] = { +77, 101, 116, 97, 108, 32, 80, 97, 110, 101, 108, 0 }; +const uint8_t objtxt_32[] = { +82, 101, 116, 97, 105, 110, 105, 110, 103, 32, 67, 108, 105, 112, 115, 0 }; +const uint8_t objtxt_33[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_34[] = { +68, 117, 115, 116, 0 }; +const uint8_t objtxt_35[] = { +82, 69, 68, 32, 66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_36[] = { +79, 112, 101, 110, 32, 105, 110, 110, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_37[] = { +67, 108, 111, 115, 101, 100, 32, 111, 117, 116, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_38[] = { +67, 108, 111, 115, 101, 100, 32, 105, 110, 110, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_39[] = { +79, 112, 101, 110, 32, 111, 117, 116, 101, 114, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_40[] = { +72, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_41[] = { +79, 112, 101, 110, 32, 104, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_42[] = { +83, 104, 117, 116, 116, 108, 101, 32, 67, 114, 97, 102, 116, 0 }; +const uint8_t objtxt_43[] = { +76, 101, 118, 101, 114, 0 }; +const uint8_t objtxt_44[] = { +89, 69, 76, 76, 79, 87, 32, 66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_45[] = { +67, 101, 110, 116, 114, 101, 32, 76, 97, 116, 104, 101, 0 }; +const uint8_t objtxt_46[] = { +84, 111, 111, 108, 32, 67, 111, 109, 112, 97, 114, 116, 109, 101, 110, 116, 0 }; +const uint8_t objtxt_47[] = { +72, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_48[] = { +83, 99, 114, 101, 119, 100, 114, 105, 118, 101, 114, 32, 66, 108, 97, 100, 101, 0 }; +const uint8_t objtxt_49[] = { +80, 105, 101, 99, 101, 32, 111, 102, 32, 87, 111, 111, 100, 0 }; +const uint8_t objtxt_50[] = { +82, 111, 117, 103, 104, 32, 77, 101, 116, 97, 108, 32, 66, 97, 114, 0 }; +const uint8_t objtxt_51[] = { +83, 99, 114, 101, 119, 100, 114, 105, 118, 101, 114, 0 }; +const uint8_t objtxt_52[] = { +83, 111, 99, 107, 101, 116, 0 }; +const uint8_t objtxt_53[] = { +76, 111, 99, 107, 101, 114, 0 }; +const uint8_t objtxt_54[] = { +83, 109, 97, 115, 104, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_55[] = { +83, 112, 97, 99, 101, 32, 83, 117, 105, 116, 0 }; +const uint8_t objtxt_56[] = { +83, 112, 97, 99, 101, 32, 83, 117, 105, 116, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_57[] = { +77, 97, 103, 110, 101, 116, 105, 99, 32, 66, 111, 111, 116, 115, 0 }; +const uint8_t objtxt_58[] = { +77, 97, 103, 110, 101, 116, 105, 99, 32, 66, 111, 111, 116, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_59[] = { +67, 82, 69, 65, 84, 85, 82, 69, 0 }; +const uint8_t objtxt_60[] = { +32, 0 }; +const uint8_t objtxt_61[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 67, 82, 69, 65, 84, 85, 82, 69, 0 }; +const uint8_t objtxt_62[] = { +67, 82, 69, 65, 84, 85, 82, 69, 0 }; +const uint8_t objtxt_63[] = { +87, 104, 105, 116, 101, 32, 84, 97, 98, 108, 101, 116, 115, 0 }; +const uint8_t objtxt_64[] = { +67, 97, 107, 101, 32, 77, 105, 120, 0 }; +const uint8_t objtxt_65[] = { +66, 97, 103, 32, 111, 102, 32, 70, 108, 111, 117, 114, 0 }; +const uint8_t objtxt_66[] = { +66, 111, 116, 116, 108, 101, 32, 111, 102, 32, 87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_67[] = { +80, 117, 100, 100, 108, 101, 32, 111, 102, 32, 87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_68[] = { +67, 97, 107, 101, 32, 84, 105, 110, 0 }; +const uint8_t objtxt_69[] = { +66, 97, 103, 32, 111, 102, 32, 82, 97, 105, 115, 105, 110, 115, 0 }; +const uint8_t objtxt_70[] = { +79, 112, 101, 110, 32, 115, 116, 101, 101, 108, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_71[] = { +87, 114, 101, 99, 107, 97, 103, 101, 0 }; +const uint8_t objtxt_72[] = { +66, 117, 110, 107, 0 }; +const uint8_t objtxt_73[] = { +83, 109, 97, 108, 108, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_74[] = { +76, 101, 110, 103, 116, 104, 32, 111, 102, 32, 67, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_75[] = { +82, 111, 117, 110, 100, 32, 66, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_76[] = { +77, 101, 116, 97, 108, 32, 71, 114, 105, 108, 108, 101, 0 }; +const uint8_t objtxt_77[] = { +67, 97, 98, 108, 101, 115, 0 }; +const uint8_t objtxt_78[] = { +83, 112, 101, 99, 105, 109, 101, 110, 32, 67, 97, 103, 101, 0 }; +const uint8_t objtxt_79[] = { +76, 111, 99, 107, 101, 100, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_80[] = { +79, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_81[] = { +72, 117, 103, 101, 32, 67, 114, 97, 116, 101, 0 }; +const uint8_t objtxt_82[] = { +83, 113, 117, 97, 114, 101, 32, 66, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_83[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_84[] = { +67, 114, 117, 109, 112, 108, 101, 100, 32, 78, 111, 116, 101, 0 }; +const uint8_t objtxt_85[] = { +67, 97, 107, 101, 32, 84, 105, 110, 32, 40, 119, 105, 116, 104, 32, 119, 97, 116, 101, 114, 32, 105, 110, 41, 0 }; +const uint8_t objtxt_86[] = { +72, 111, 108, 101, 0 }; +const uint8_t objtxt_87[] = { +79, 118, 101, 110, 32, 40, 110, 111, 119, 32, 102, 117, 110, 99, 116, 105, 111, 110, 97, 108, 41, 0 }; +const uint8_t objtxt_88[] = { +76, 97, 116, 104, 101, 32, 104, 111, 111, 107, 101, 100, 32, 117, 112, 32, 116, 111, 32, 112, 111, 119, 101, 114, 32, 115, 117, 112, 112, 108, 121, 0 }; +const uint8_t objtxt_89[] = { +0 }; +const uint8_t objtxt_90[] = { +0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, + objtxt_74, + objtxt_75, + objtxt_76, + objtxt_77, + objtxt_78, + objtxt_79, + objtxt_80, + objtxt_81, + objtxt_82, + objtxt_83, + objtxt_84, + objtxt_85, + objtxt_86, + objtxt_87, + objtxt_88, + objtxt_89, + objtxt_90, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 34, 69, 83, 67, 65, 80, 69, 32, 70, 82, 79, 77, 32, 80, 85, 76, 83, 65, 82, 32, 55, 34, 0 }; +const uint8_t msgtxt_2[] = { +98, 121, 32, 66, 114, 105, 97, 110, 32, 72, 111, 119, 97, 114, 116, 104, 32, 38, 32, 87, 104, 101, 114, 110, 101, 114, 32, 66, 97, 114, 110, 101, 115, 0 }; +const uint8_t msgtxt_3[] = { +68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 87, 104, 101, 114, 110, 101, 114, 39, 115, 32, 77, 111, 116, 104, 101, 114, 32, 45, 32, 77, 73, 76, 68, 82, 69, 68, 46, 0 }; +const uint8_t msgtxt_4[] = { +84, 101, 108, 108, 32, 109, 101, 32, 104, 111, 119, 32, 63, 0 }; +const uint8_t msgtxt_5[] = { +84, 114, 121, 32, 69, 88, 65, 77, 73, 78, 73, 78, 71, 32, 116, 104, 105, 110, 103, 115, 0 }; +const uint8_t msgtxt_6[] = { +83, 97, 121, 115, 32, 45, 0 }; +const uint8_t msgtxt_7[] = { +73, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_8[] = { +109, 111, 118, 101, 115, 0 }; +const uint8_t msgtxt_9[] = { +79, 46, 107, 46, 0 }; +const uint8_t msgtxt_10[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 32, 33, 0 }; +const uint8_t msgtxt_11[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 0 }; +const uint8_t msgtxt_12[] = { +73, 39, 118, 101, 32, 102, 111, 117, 110, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_13[] = { +67, 97, 110, 39, 116, 32, 117, 115, 101, 0 }; +const uint8_t msgtxt_14[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_15[] = { +87, 104, 101, 114, 101, 32, 63, 0 }; +const uint8_t msgtxt_16[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_17[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_18[] = { +71, 111, 32, 119, 97, 115, 104, 32, 121, 111, 117, 114, 32, 109, 111, 117, 116, 104, 32, 111, 117, 116, 33, 0 }; +const uint8_t msgtxt_19[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 0 }; +const uint8_t msgtxt_20[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_21[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_22[] = { +84, 104, 97, 110, 107, 115, 33, 0 }; +const uint8_t msgtxt_23[] = { +89, 111, 117, 32, 104, 97, 118, 101, 32, 69, 83, 67, 65, 80, 69, 68, 33, 0 }; +const uint8_t msgtxt_24[] = { +34, 80, 85, 76, 83, 65, 82, 32, 55, 32, 67, 114, 101, 119, 32, 111, 110, 108, 121, 34, 0 }; +const uint8_t msgtxt_25[] = { +65, 114, 116, 105, 102, 105, 99, 105, 97, 108, 32, 68, 97, 121, 108, 105, 103, 104, 116, 32, 104, 97, 115, 32, 101, 110, 100, 101, 100, 33, 0 }; +const uint8_t msgtxt_26[] = { +67, 82, 69, 65, 84, 85, 82, 69, 32, 114, 105, 112, 115, 32, 109, 121, 32, 104, 101, 97, 100, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_27[] = { +73, 32, 116, 105, 101, 32, 116, 104, 101, 32, 72, 97, 110, 107, 105, 101, 32, 97, 99, 114, 111, 115, 115, 32, 109, 121, 32, 102, 97, 99, 101, 0 }; +const uint8_t msgtxt_28[] = { +68, 117, 115, 116, 32, 114, 105, 115, 101, 115, 32, 97, 110, 100, 32, 67, 72, 79, 75, 69, 83, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_29[] = { +73, 32, 99, 97, 110, 39, 116, 32, 114, 101, 97, 99, 104, 32, 105, 116, 0 }; +const uint8_t msgtxt_30[] = { +105, 116, 32, 110, 101, 101, 100, 115, 32, 114, 101, 112, 97, 105, 114, 105, 110, 103, 0 }; +const uint8_t msgtxt_31[] = { +105, 116, 32, 102, 105, 116, 115, 32, 110, 101, 97, 116, 108, 121, 32, 105, 110, 32, 109, 121, 32, 104, 97, 110, 100, 0 }; +const uint8_t msgtxt_32[] = { +67, 108, 97, 110, 103, 45, 103, 45, 103, 45, 103, 0 }; +const uint8_t msgtxt_33[] = { +67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 83, 32, 33, 33, 0 }; +const uint8_t msgtxt_34[] = { +78, 111, 32, 65, 73, 82, 33, 0 }; +const uint8_t msgtxt_35[] = { +84, 104, 101, 32, 67, 82, 69, 65, 84, 85, 82, 69, 32, 106, 117, 115, 116, 32, 115, 108, 105, 116, 104, 101, 114, 101, 100, 32, 105, 110, 33, 0 }; +const uint8_t msgtxt_36[] = { +110, 111, 32, 112, 111, 105, 110, 116, 32, 105, 110, 32, 116, 104, 97, 116, 33, 0 }; +const uint8_t msgtxt_37[] = { +68, 79, 79, 82, 83, 32, 97, 114, 101, 32, 99, 108, 111, 115, 101, 100, 32, 45, 32, 73, 32, 67, 82, 65, 83, 72, 33, 0 }; +const uint8_t msgtxt_38[] = { +73, 32, 99, 97, 110, 39, 116, 32, 109, 111, 118, 101, 33, 0 }; +const uint8_t msgtxt_39[] = { +73, 39, 118, 101, 32, 109, 97, 100, 101, 32, 97, 32, 67, 65, 75, 69, 33, 0 }; +const uint8_t msgtxt_40[] = { +72, 79, 84, 32, 105, 110, 32, 116, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_41[] = { +84, 104, 101, 32, 67, 82, 69, 65, 84, 85, 82, 69, 32, 97, 116, 101, 32, 116, 104, 101, 32, 108, 111, 116, 33, 0 }; +const uint8_t msgtxt_42[] = { +73, 116, 115, 32, 111, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_43[] = { +85, 115, 101, 32, 97, 32, 67, 111, 108, 111, 117, 114, 0 }; +const uint8_t msgtxt_44[] = { +71, 114, 105, 108, 108, 32, 99, 111, 109, 101, 115, 32, 97, 119, 97, 121, 32, 119, 105, 116, 104, 32, 97, 32, 115, 116, 114, 111, 110, 103, 32, 112, 117, 108, 108, 33, 0 }; +const uint8_t msgtxt_45[] = { +116, 104, 97, 116, 32, 111, 110, 101, 32, 105, 115, 32, 108, 111, 111, 115, 101, 0 }; +const uint8_t msgtxt_46[] = { +87, 104, 101, 101, 101, 101, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +84, 104, 117, 100, 33, 32, 32, 73, 32, 102, 97, 108, 108, 32, 98, 97, 99, 107, 32, 100, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_48[] = { +105, 116, 39, 115, 32, 108, 97, 98, 101, 108, 108, 101, 100, 32, 34, 82, 65, 87, 32, 77, 65, 84, 69, 82, 73, 65, 76, 83, 34, 0 }; +const uint8_t msgtxt_49[] = { +68, 111, 111, 114, 32, 111, 112, 101, 110, 115, 32, 105, 110, 32, 102, 114, 111, 110, 116, 32, 111, 102, 32, 109, 101, 0 }; +const uint8_t msgtxt_50[] = { +68, 111, 111, 114, 32, 115, 108, 97, 109, 115, 32, 98, 101, 104, 105, 110, 100, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_51[] = { +73, 39, 109, 32, 110, 111, 116, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_52[] = { +76, 97, 116, 104, 101, 32, 119, 111, 114, 107, 115, 0 }; +const uint8_t msgtxt_53[] = { +97, 32, 82, 79, 85, 78, 68, 32, 104, 111, 108, 101, 0 }; +const uint8_t msgtxt_54[] = { +89, 111, 117, 32, 116, 104, 105, 110, 107, 32, 116, 104, 105, 115, 32, 105, 115, 32, 115, 111, 109, 101, 32, 115, 111, 114, 116, 32, 111, 102, 32, 103, 97, 109, 101, 63, 0 }; +const uint8_t msgtxt_55[] = { +46, 46, 46, 46, 97, 115, 32, 116, 104, 101, 32, 111, 110, 108, 121, 32, 115, 117, 114, 118, 105, 118, 105, 110, 103, 32, 109, 101, 109, 98, 101, 114, 32, 111, 102, 0 }; +const uint8_t msgtxt_56[] = { +116, 104, 101, 32, 80, 85, 76, 83, 65, 82, 32, 55, 32, 99, 114, 101, 119, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_57[] = { +105, 116, 39, 115, 32, 105, 110, 32, 109, 121, 32, 104, 97, 110, 100, 119, 114, 105, 116, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_58[] = { +90, 45, 122, 45, 122, 45, 122, 45, 122, 45, 122, 45, 122, 0 }; +const uint8_t msgtxt_59[] = { +65, 114, 116, 105, 102, 105, 99, 105, 97, 108, 32, 100, 97, 121, 108, 105, 103, 104, 116, 32, 104, 97, 115, 32, 98, 101, 103, 117, 110, 33, 0 }; +const uint8_t msgtxt_60[] = { +73, 32, 99, 111, 117, 108, 100, 32, 103, 101, 116, 32, 105, 110, 32, 116, 104, 101, 114, 101, 33, 0 }; +const uint8_t msgtxt_61[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_62[] = { +73, 116, 39, 115, 32, 67, 108, 111, 115, 101, 100, 33, 0 }; +const uint8_t msgtxt_63[] = { +73, 116, 32, 119, 105, 108, 108, 32, 110, 111, 116, 32, 99, 108, 111, 115, 101, 0 }; +const uint8_t msgtxt_64[] = { +73, 32, 102, 97, 108, 108, 32, 65, 115, 108, 101, 101, 112, 33, 33, 0 }; +const uint8_t msgtxt_65[] = { +73, 39, 109, 32, 66, 108, 97, 115, 116, 101, 100, 32, 105, 110, 116, 111, 32, 100, 101, 101, 112, 32, 115, 112, 97, 99, 101, 33, 0 }; +const uint8_t msgtxt_66[] = { +84, 104, 101, 32, 105, 110, 103, 114, 101, 100, 105, 101, 110, 116, 115, 32, 97, 114, 101, 32, 110, 111, 119, 32, 77, 105, 120, 101, 100, 33, 0 }; +const uint8_t msgtxt_67[] = { +97, 32, 67, 97, 98, 108, 101, 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_68[] = { +73, 32, 83, 116, 97, 114, 118, 101, 32, 116, 111, 32, 100, 101, 97, 116, 104, 33, 0 }; +const uint8_t msgtxt_69[] = { +73, 116, 32, 119, 105, 108, 108, 32, 116, 117, 114, 110, 33, 0 }; +const uint8_t msgtxt_70[] = { +85, 115, 101, 32, 97, 32, 115, 104, 97, 112, 101, 0 }; +const uint8_t msgtxt_71[] = { +105, 46, 101, 46, 32, 32, 34, 71, 69, 84, 32, 83, 81, 85, 65, 82, 69, 34, 0 }; +const uint8_t msgtxt_72[] = { +73, 32, 119, 111, 117, 108, 100, 32, 103, 101, 116, 32, 105, 110, 100, 105, 103, 101, 115, 116, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_73[] = { +83, 116, 105, 108, 108, 32, 104, 117, 110, 103, 114, 121, 44, 32, 105, 116, 32, 112, 114, 111, 99, 101, 101, 100, 115, 32, 116, 111, 32, 101, 97, 116, 32, 77, 69, 32, 33, 33, 0 }; +const uint8_t msgtxt_74[] = { +84, 104, 101, 110, 32, 102, 101, 108, 108, 32, 97, 115, 108, 101, 101, 112, 33, 0 }; +const uint8_t msgtxt_75[] = { +0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 167, + 9, 0, + 1, 2, 3, 86, +/* AUTO 100 */ + 175, + 9, 0, 0, 0, 32, 244, + 81, 79, 81, 73, +/* AUTO 0 */ + 206, + 0, 1, 0, 100, 0, 1, + 81, 79, 81, +/* AUTO 0 */ + 206, + 0, 2, 0, 50, 0, 2, + 81, 79, 81, +/* AUTO 0 */ + 201, + 0, 8, 0, 10, + 58, 58, +/* AUTO 0 */ + 206, + 0, 5, 0, 2, 0, 5, + 81, 79, 81, +/* AUTO 0 */ + 207, + 0, 3, 0, 0, 0, 3, + 81, 79, 81, 67, +/* AUTO 100 */ + 180, + 4, 3, 14, 5, 8, 4, 0, 5, 0, 6, + 72, +/* AUTO 100 */ + 166, + 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 202, + 19, 0, 0, 2, + 56, 58, 25, +/* AUTO 0 */ + 197, + 0, 1, + 81, 64, +/* AUTO 100 */ + 162, + 81, 77, 73, +/* AUTO 0 */ + 199, + 19, 0, + 35, 26, 61, 63, +/* AUTO 0 */ + 192, + 81, +/* AUTO 100 */ + 170, + 4, 20, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 21, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 22, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 23, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 24, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 25, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 26, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 170, + 4, 27, 0, 10, + 60, 56, 64, +/* AUTO 100 */ + 168, + 4, 8, 0, 10, + 58, +/* AUTO 100 */ + 168, + 4, 28, 0, 10, + 58, +/* AUTO 100 */ + 168, + 4, 30, 0, 10, + 58, +/* AUTO 100 */ + 168, + 4, 31, 0, 10, + 58, +/* AUTO 100 */ + 168, + 4, 33, 0, 10, + 58, +/* AUTO 100 */ + 169, + 4, 8, 9, 2, + 57, 64, +/* AUTO 100 */ + 169, + 4, 28, 9, 2, + 57, 64, +/* AUTO 100 */ + 169, + 4, 30, 9, 2, + 57, 64, +/* AUTO 100 */ + 169, + 4, 31, 9, 2, + 57, 64, +/* AUTO 100 */ + 165, + 4, 32, + 57, 64, +/* AUTO 100 */ + 169, + 4, 33, 9, 2, + 57, 64, +/* AUTO 100 */ + 170, + 9, 10, 0, 2, + 81, 77, 73, +/* AUTO 0 */ + 199, + 19, 0, + 35, 26, 61, 63, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 */ + 170, + 4, 17, 6, 58, + 115, 61, 63, +/* AUTO 100 */ + 174, + 0, 3, 0, 1, 0, 3, + 81, 82, 81, +/* AUTO 100 */ + 170, + 2, 79, 6, 73, + 118, 61, 63, +/* AUTO 100 */ + 170, + 2, 62, 0, 5, + 81, 77, 73, +/* AUTO 0 */ + 199, + 19, 0, + 88, 26, 61, 63, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* AUTO 100 */ + 178, + 5, 62, 0, 5, 0, 2, 0, 5, + 81, 79, 81, +/* AUTO 0 */ +/* AUTO 100 */ + 164, + 4, 45, + 63, +/* AUTO 10 */ + 135, 10, + 4, 6, + 88, 28, 61, 63, +}; +const uint8_t actions[] = { +/* EXAM ROD */ + 5, 65, 15, + 1, 10, + 14, 119, +/* EXAM COUC */ + 21, 65, 98, + 2, 2, 14, 84, 14, 73, 0, 73, 0, 1, + 62, 73, +/* AUTO 0 */ + 201, + 0, 84, 0, 1, + 62, 12, +/* MOVE COUC */ + 21, 115, 98, + 2, 2, 14, 10, 14, 9, 0, 10, 0, 1, + 62, 12, +/* CLOS DOOR */ + 14, 54, 8, + 2, 5, 0, 5, 0, 6, + 72, 9, 73, +/* AUTO 0 */ + 206, + 0, 7, 0, 3, 0, 4, + 62, 58, 21, +/* CLOS DOOR */ + 4, 54, 8, + 2, 23, + 113, +/* CLOS DOOR */ + 13, 54, 8, + 2, 80, 0, 79, 0, 80, + 72, 9, +/* GO BUNK */ + 9, 1, 10, + 2, 4, 0, 3, + 54, 9, +/* GO BUNK */ + 9, 1, 10, + 2, 72, 0, 34, + 54, 9, +/* GO BUNK */ + 9, 1, 10, + 2, 30, 0, 14, + 54, 9, +/* GO BUNK */ + 9, 1, 10, + 2, 8, 0, 5, + 54, 9, +/* MOVE PILL */ + 21, 115, 12, + 2, 7, 14, 20, 14, 21, 0, 20, 0, 3, + 62, 12, +/* MOVE PILL */ + 4, 115, 12, + 2, 7, + 11, +/* EXAM BUNK */ + 17, 65, 10, + 4, 5, 14, 17, 0, 17, 0, 5, + 62, 12, +/* EXAM BUNK */ + 21, 65, 10, + 4, 14, 14, 63, 8, 8, 0, 63, 0, 14, + 62, 12, +/* EXAM BUNK */ + 4, 65, 10, + 4, 3, + 11, +/* EXAM BUNK */ + 4, 65, 10, + 4, 34, + 11, +/* EXAM BLOC */ + 1, 65, 87, + 120, 121, +/* GO VENT */ + 9, 1, 13, + 2, 12, 0, 6, + 54, 9, +/* TURN BLOC */ + 1, 67, 87, + 120, 121, +/* AUTO 0 */ +/* EXAM CONT */ + 17, 65, 17, + 2, 14, 5, 28, 0, 28, 0, 8, + 62, 73, +/* AUTO 0 */ + 201, + 0, 29, 0, 8, + 62, 12, +/* EXAM CONT */ + 5, 65, 17, + 2, 28, + 14, 110, +/* GO CONT */ + 9, 1, 17, + 2, 14, 0, 10, + 54, 9, +/* FIT CIRC */ + 22, 100, 28, + 1, 20, 4, 10, 0, 20, 0, 21, 0, 21, + 72, 53, 9, +/* GET CIRC */ + 9, 10, 28, + 2, 20, 0, 20, + 52, 9, +/* GET CIRC */ + 18, 10, 28, + 2, 21, 0, 20, 0, 21, 0, 20, + 72, 52, 9, +/* PRES WHIT */ + 13, 103, 37, + 2, 29, 13, 21, 0, 5, + 58, 21, +/* PRES WHIT */ + 8, 103, 37, + 2, 29, 14, 21, + 20, +/* PRES BLAC */ + 4, 103, 36, + 2, 28, + 20, +/* PRES ORAN */ + 6, 103, 26, + 2, 18, + 115, 61, 63, +/* PRES RED */ + 16, 103, 45, + 2, 35, 1, 56, 8, 5, 1, 58, + 73, +/* AUTO 0 */ + 210, + 0, 36, 0, 38, 0, 37, 0, 39, + 72, 72, 9, +/* PRES RED */ + 8, 103, 45, + 2, 35, 9, 5, + 20, +/* PRES RED */ + 14, 103, 45, + 2, 35, 8, 5, 6, 56, + 34, 61, 63, +/* PRES RED */ + 14, 103, 45, + 2, 35, 8, 5, 6, 58, + 115, 61, 63, +/* PRES YELL */ + 10, 103, 51, + 2, 44, 8, 6, + 23, 33, 63, +/* PRES YELL */ + 10, 103, 51, + 2, 44, 9, 6, + 37, 61, 63, +/* EXAM FLOO */ + 21, 65, 19, + 4, 8, 14, 15, 14, 16, 0, 15, 0, 8, + 62, 12, +/* PULL RING */ + 4, 34, 22, + 2, 15, + 4, +/* USE HOOK */ + 21, 96, 24, + 2, 15, 1, 17, 14, 16, 0, 15, 0, 16, + 72, 12, +/* TURN ROD */ + 14, 67, 15, + 1, 10, 0, 9, 0, 10, + 72, 21, 64, +/* TURN ROD */ + 14, 67, 15, + 1, 9, 0, 9, 0, 10, + 72, 21, 64, +/* GO HATC */ + 8, 1, 23, + 2, 16, 0, 20, + 54, +/* GO HATC */ + 9, 1, 23, + 2, 41, 0, 18, + 54, 9, +/* SEAR WREC */ + 17, 22, 81, + 2, 71, 14, 72, 0, 72, 0, 33, + 62, 12, +/* EXAM CEIL */ + 21, 65, 78, + 4, 34, 14, 76, 14, 86, 0, 76, 0, 34, + 62, 12, +/* EXAM CEIL */ + 21, 65, 78, + 4, 14, 14, 31, 14, 33, 0, 31, 0, 14, + 62, 12, +/* REMO GRIL */ + 13, 6, 88, + 2, 76, 0, 76, 0, 86, + 72, 44, +/* JUMP ANY */ + 9, 43, 0, + 2, 86, 0, 35, + 54, 9, +/* JUMP ANY */ + 9, 43, 0, + 2, 33, 0, 15, + 54, 9, +/* JUMP ANY */ + 11, 43, 0, + 5, 86, 5, 33, + 46, 88, 88, 47, +/* AUTO 0 */ +/* AUTO 0 */ +/* PRES BUTT */ + 0, 103, 25, + 43, +/* GO CRAT */ + 9, 1, 90, + 2, 81, 0, 39, + 54, 9, +/* MAKE LATH */ + 19, 121, 52, + 2, 45, 1, 74, 0, 7, 0, 74, + 58, 59, 21, 73, +/* AUTO 0 */ + 206, + 0, 45, 0, 88, 0, 52, + 72, 59, 102, +/* TURN SQUA */ + 23, 67, 85, + 2, 88, 1, 82, 8, 7, 0, 82, 0, 75, + 72, 9, 21, 73, +/* AUTO 0 */ + 196, + 0, 75, + 53, +/* TURN SQUA */ + 5, 67, 85, + 9, 7, + 14, 117, +/* EXAM LATH */ + 5, 65, 52, + 2, 45, + 14, 30, +/* GO LATH */ + 9, 1, 52, + 4, 28, 0, 29, + 54, 9, +/* EXAM TOOL */ + 21, 65, 53, + 2, 46, 14, 48, 14, 51, 0, 48, 0, 29, + 62, 73, +/* AUTO 0 */ + 201, + 0, 50, 0, 29, + 62, 12, +/* GET WATE */ + 21, 10, 76, + 4, 12, 1, 68, 2, 67, 0, 68, 0, 85, + 72, 73, +/* AUTO 0 */ + 197, + 0, 67, + 59, 9, +/* SMAS LOCK */ + 4, 30, 64, + 2, 53, + 4, +/* USE HAMM */ + 22, 96, 55, + 2, 53, 1, 47, 14, 54, 0, 54, 0, 30, + 62, 9, 32, +/* USE HAMM */ + 5, 96, 55, + 5, 53, + 13, 84, +/* EXAM LOCK */ + 21, 65, 64, + 2, 54, 14, 55, 14, 56, 0, 55, 0, 30, + 62, 12, +/* AUTO 0 */ +/* EXAM PANE */ + 21, 65, 39, + 2, 31, 14, 32, 14, 33, 0, 32, 0, 14, + 62, 12, +/* MAKE SCRE */ + 22, 121, 61, + 1, 48, 1, 49, 0, 48, 0, 51, 0, 49, + 72, 59, 9, +/* REMO PANE */ + 23, 6, 39, + 2, 31, 1, 51, 0, 33, 0, 31, 0, 32, + 72, 59, 9, 12, +/* GO OUT */ + 8, 1, 46, + 2, 39, 0, 17, + 54, +/* PULL LEVE */ + 10, 34, 50, + 2, 43, 0, 6, + 58, 9, 21, +/* GO SHUT */ + 9, 1, 47, + 2, 42, 0, 19, + 54, 9, +/* OPEN DOOR */ + 13, 7, 8, + 2, 22, 0, 22, 0, 23, + 72, 9, +/* OPEN DOOR */ + 4, 7, 8, + 2, 3, + 16, +/* GO LARD */ + 9, 1, 33, + 2, 25, 0, 40, + 54, 9, +/* GO DOOR */ + 22, 1, 8, + 2, 23, 13, 3, 0, 70, 0, 3, 0, 12, + 72, 54, 9, +/* GO DOOR */ + 13, 1, 8, + 2, 23, 14, 3, 0, 12, + 54, 9, +/* GO DOOR */ + 4, 1, 8, + 2, 3, + 112, +/* GO DOOR */ + 9, 1, 8, + 2, 5, 0, 4, + 54, 9, +/* GO DOOR */ + 9, 1, 8, + 2, 36, 0, 15, + 54, 9, +/* GO DOOR */ + 9, 1, 8, + 2, 39, 0, 17, + 54, 9, +/* GO DOOR */ + 9, 1, 8, + 2, 70, 0, 12, + 54, 9, +/* GO DOOR */ + 9, 1, 8, + 2, 80, 0, 36, + 54, 9, +/* EMPT BOTT */ + 22, 45, 75, + 1, 66, 1, 68, 0, 68, 0, 85, 0, 66, + 72, 59, 9, +/* EMPT BOTT */ + 22, 45, 75, + 1, 66, 6, 68, 0, 66, 0, 67, 0, 67, + 72, 53, 9, +/* EMPT TIN */ + 18, 45, 77, + 1, 85, 0, 85, 0, 67, 0, 67, + 72, 53, 73, +/* AUTO 0 */ + 201, + 0, 67, 0, 68, + 75, 9, +/* MIX ANY */ + 16, 143, 0, + 12, 63, 3, 85, 3, 65, 3, 69, + 73, +/* AUTO 0 */ + 210, + 0, 85, 0, 64, 0, 65, 0, 69, + 72, 59, 59, +/* AUTO 0 */ + 198, + 0, 8, + 58, 9, 116, +/* MIX ANY */ + 16, 143, 0, + 3, 63, 3, 85, 3, 65, 3, 69, + 73, +/* AUTO 0 */ + 210, + 0, 85, 0, 64, 0, 65, 0, 69, + 72, 59, 59, +/* AUTO 0 */ + 203, + 0, 8, 0, 63, + 60, 59, 9, 116, +/* MAKE OVEN */ + 22, 121, 30, + 2, 24, 1, 75, 0, 24, 0, 87, 0, 75, + 72, 59, 9, +/* BAKE CAKE */ + 22, 144, 34, + 2, 87, 1, 64, 8, 8, 0, 64, 0, 26, + 72, 9, 39, +/* BAKE CAKE */ + 22, 144, 34, + 2, 87, 1, 64, 9, 8, 0, 64, 0, 27, + 72, 9, 39, +/* GO CAGE */ + 10, 1, 89, + 2, 78, 0, 37, + 54, 9, 50, +/* OPEN DOOR */ + 18, 7, 8, + 2, 79, 1, 73, 0, 79, 0, 80, + 72, 9, 49, +/* OPEN DOOR */ + 13, 7, 8, + 2, 6, 0, 5, 0, 6, + 72, 9, +/* READ SIGN */ + 5, 60, 92, + 2, 83, + 6, 24, +/* READ NOTE */ + 6, 60, 93, + 1, 84, + 6, 105, 106, +/* EXAM NOTE */ + 5, 65, 93, + 3, 84, + 14, 107, +/* EXAM CRAT */ + 4, 65, 90, + 2, 81, + 48, +/* EXAM WATC */ + 11, 65, 35, + 1, 0, 0, 3, + 81, 7, 78, 73, +/* AUTO 0 */ + 197, + 0, 3, + 8, 81, +/* WEAR BOOT */ + 4, 5, 67, + 1, 58, + 10, +/* WEAR BOOT */ + 13, 5, 67, + 1, 57, 0, 57, 0, 58, + 72, 9, +/* WEAR SUIT */ + 4, 5, 65, + 1, 56, + 10, +/* WEAR SUIT */ + 13, 5, 65, + 1, 55, 0, 55, 0, 56, + 72, 9, +/* REMO SUIT */ + 5, 6, 65, + 1, 56, + 14, 36, +/* REMO BOOT */ + 13, 6, 67, + 1, 58, 0, 58, 0, 57, + 72, 9, +/* REMO BOOT */ + 4, 6, 67, + 1, 57, + 51, +/* EXAM OVEN */ + 5, 65, 30, + 2, 24, + 14, 103, +/* EAT TABL */ + 7, 49, 71, + 1, 63, + 114, 26, 61, 63, +/* GIVE CAKE */ + 23, 40, 34, + 2, 62, 1, 27, 0, 62, 0, 61, 0, 27, + 72, 59, 41, 124, +/* GIVE CAKE */ + 15, 40, 34, + 1, 26, 2, 62, 0, 26, + 41, 123, 61, 63, +/* FEED CREA */ + 23, 16, 70, + 1, 27, 2, 62, 0, 62, 0, 61, 0, 27, + 72, 59, 41, 124, +/* FEED CREA */ + 11, 16, 70, + 1, 26, 2, 62, + 41, 123, 61, 63, +/* EAT CAKE */ + 7, 49, 34, + 1, 26, + 22, 88, 35, 73, +/* AUTO 0 */ + 195, + 88, 26, 61, 63, +/* EAT CAKE */ + 7, 49, 34, + 1, 27, + 114, 26, 61, 63, +/* EXAM OVEN */ + 4, 65, 30, + 2, 87, + 40, +/* GET WATE */ + 12, 10, 76, + 4, 12, 2, 67, 1, 68, + 73, +/* AUTO 0 */ + 206, + 0, 68, 0, 85, 0, 67, + 72, 59, 9, +/* SLEE ANY */ + 19, 134, 0, + 4, 3, 8, 15, 0, 1, 0, 100, + 81, 79, 9, 73, +/* AUTO 0 */ + 198, + 0, 1, + 81, 108, 88, +/* AUTO 0 */ + 199, + 0, 2, + 60, 109, 57, 64, +/* SLEE ANY */ + 3, 134, 0, + 114, 26, 61, 63, +/* SAVE ANY */ + 0, 4, 0, + 71, +/* QUIT ANY */ + 0, 3, 0, + 63, +/* FUCK ANY */ + 0, 91, 0, + 18, +/* SCOR ANY */ + 0, 9, 0, + 104, +/* INVE ANY */ + 0, 2, 0, + 66, +/* HELP ANY */ + 0, 132, 0, + 5, +/* MOVE ANY */ + 0, 115, 0, + 4, +/* CLOS ANY */ + 1, 54, 0, + 14, 36, +/* EXAM ANY */ + 0, 65, 0, + 11, +/* GO ANY */ + 0, 1, 0, + 15, +/* TIE ANY */ + 0, 37, 0, + 4, +/* SEAR ANY */ + 0, 22, 0, + 11, +/* TURN ANY */ + 1, 67, 0, + 14, 36, +/* SMAS ANY */ + 1, 30, 0, + 14, 36, +/* PULL ANY */ + 0, 34, 0, + 4, +/* USE ANY */ + 1, 96, 0, + 13, 85, +/* SAY ANY */ + 1, 87, 0, + 9, 85, +/* WAIT ANY */ + 3, 8, 0, + 9, 17, 88, 88, +/* GET BLOC */ + 1, 10, 87, + 120, 121, +/* DROP SUIT */ + 5, 18, 65, + 1, 56, + 16, 10, +/* DROP BOOT */ + 4, 18, 67, + 1, 58, + 16, +/* EAT ANY */ + 1, 49, 0, + 16, 122, +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ +/* AUTO 0 */ + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* INVE */ + 73, 78, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* WEAR */ + 87, 69, 65, 82, + /* REMO */ + 82, 69, 77, 79, + /* OPEN */ + 79, 80, 69, 78, + /* WAIT */ + 87, 65, 73, 84, + /* SCOR */ + 83, 67, 79, 82, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *OBTA */ + 207, 66, 84, 65, + /* *GRAB */ + 199, 82, 65, 66, + /* DIG */ + 68, 73, 71, 32, + /* CLIM */ + 67, 76, 73, 77, + /* FEED */ + 70, 69, 69, 68, + /* LOOK */ + 76, 79, 79, 75, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DEPO */ + 196, 69, 80, 79, + /* *DUMP */ + 196, 85, 77, 80, + /* SEAR */ + 83, 69, 65, 82, + /* *FRIS */ + 198, 82, 73, 83, + /* THRO */ + 84, 72, 82, 79, + /* *SLIN */ + 211, 76, 73, 78, + /* *CHUC */ + 195, 72, 85, 67, + /* *TOSS */ + 212, 79, 83, 83, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* SMAS */ + 83, 77, 65, 83, + /* *DEST */ + 196, 69, 83, 84, + /* *BREA */ + 194, 82, 69, 65, + /* *HIT */ + 200, 73, 84, 32, + /* PULL */ + 80, 85, 76, 76, + /* *TUG */ + 212, 85, 71, 32, + /* *DRAG */ + 196, 82, 65, 71, + /* TIE */ + 84, 73, 69, 32, + /* *FAST */ + 198, 65, 83, 84, + /* *WRAP */ + 215, 82, 65, 80, + /* GIVE */ + 71, 73, 86, 69, + /* *OFFE */ + 207, 70, 70, 69, + /* *PAY */ + 208, 65, 89, 32, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* EMPT */ + 69, 77, 80, 84, + /* *SPRI */ + 211, 80, 82, 73, + /* *POUR */ + 208, 79, 85, 82, + /* FILL */ + 70, 73, 76, 76, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* *DEVO */ + 196, 69, 86, 79, + /* UNLO */ + 85, 78, 76, 79, + /* LOCK */ + 76, 79, 67, 75, + /* CLOS */ + 67, 76, 79, 83, + /* HOLD */ + 72, 79, 76, 68, + /* *GRAS */ + 199, 82, 65, 83, + /* WAVE */ + 87, 65, 86, 69, + /* *GEST */ + 199, 69, 83, 84, + /* PLAY */ + 80, 76, 65, 89, + /* READ */ + 82, 69, 65, 68, + /* SWIM */ + 83, 87, 73, 77, + /* *PADD */ + 208, 65, 68, 68, + /* SMOK */ + 83, 77, 79, 75, + /* *PUFF */ + 208, 85, 70, 70, + /* EXAM */ + 69, 88, 65, 77, + /* *INSP */ + 201, 78, 83, 80, + /* TURN */ + 84, 85, 82, 78, + /* *ROTA */ + 210, 79, 84, 65, + /* *TWIS */ + 212, 87, 73, 83, + /* RUB */ + 82, 85, 66, 32, + /* *POLI */ + 208, 79, 76, 73, + /* *SHIN */ + 211, 72, 73, 78, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* *SLIC */ + 211, 76, 73, 67, + /* *HACK */ + 200, 65, 67, 75, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* *BURN */ + 194, 85, 82, 78, + /* *ON */ + 207, 78, 32, 32, + /* UNLI */ + 85, 78, 76, 73, + /* *EXTI */ + 197, 88, 84, 73, + /* *OFF */ + 207, 70, 70, 32, + /* FIRE */ + 70, 73, 82, 69, + /* *SHOO */ + 211, 72, 79, 79, + /* *BLAS */ + 194, 76, 65, 83, + /* SAY */ + 83, 65, 89, 32, + /* *SHOU */ + 211, 72, 79, 85, + /* *TALK */ + 212, 65, 76, 75, + /* ASK */ + 65, 83, 75, 32, + /* FUCK */ + 70, 85, 67, 75, + /* *PISS */ + 208, 73, 83, 83, + /* FORC */ + 70, 79, 82, 67, + /* *LEVE */ + 204, 69, 86, 69, + /* *PRIS */ + 208, 82, 73, 83, + /* USE */ + 85, 83, 69, 32, + /* *APPL */ + 193, 80, 80, 76, + /* *EXER */ + 197, 88, 69, 82, + /* *WITH */ + 215, 73, 84, 72, + /* FIT */ + 70, 73, 84, 32, + /* *INSE */ + 201, 78, 83, 69, + /* *PLUG */ + 208, 76, 85, 71, + /* PRES */ + 80, 82, 69, 83, + /* *PUSH */ + 208, 85, 83, 72, + /* TOUC */ + 84, 79, 85, 67, + /* *FEEL */ + 198, 69, 69, 76, + /* KICK */ + 75, 73, 67, 75, + /* *STAM */ + 211, 84, 65, 77, + /* SMEL */ + 83, 77, 69, 76, + /* *SNIF */ + 211, 78, 73, 70, + /* LIST */ + 76, 73, 83, 84, + /* *HEAR */ + 200, 69, 65, 82, + /* HIDE */ + 72, 73, 68, 69, + /* *CONC */ + 195, 79, 78, 67, + /* MOVE */ + 77, 79, 86, 69, + /* *SHIF */ + 211, 72, 73, 70, + /* FREE */ + 70, 82, 69, 69, + /* *RELE */ + 210, 69, 76, 69, + /* *UNTI */ + 213, 78, 84, 73, + /* *UNDO */ + 213, 78, 68, 79, + /* MAKE */ + 77, 65, 75, 69, + /* *BUIL */ + 194, 85, 73, 76, + /* *FIX */ + 198, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* STAB */ + 83, 84, 65, 66, + /* *POKE */ + 208, 79, 75, 69, + /* *PROD */ + 208, 82, 79, 68, + /* WRIT */ + 87, 82, 73, 84, + /* *JOT */ + 202, 79, 84, 32, + /* *NOTE */ + 206, 79, 84, 69, + /* PRAY */ + 80, 82, 65, 89, + /* HELP */ + 72, 69, 76, 80, + /* *HINT */ + 200, 73, 78, 84, + /* SLEE */ + 83, 76, 69, 69, + /* WAKE */ + 87, 65, 75, 69, + /* *AWAK */ + 193, 87, 65, 75, + /* *ROUS */ + 210, 79, 85, 83, + /* TRIM */ + 84, 82, 73, 77, + /* *SHAV */ + 211, 72, 65, 86, + /* *SCRA */ + 211, 67, 82, 65, + /* MELT */ + 77, 69, 76, 84, + /* THIN */ + 84, 72, 73, 78, + /* MIX */ + 77, 73, 88, 32, + /* BAKE */ + 66, 65, 75, 69, + /* CHAR */ + 67, 72, 65, 82, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* HANK */ + 72, 65, 78, 75, + /* DOOR */ + 68, 79, 79, 82, + /* *STEE */ + 211, 84, 69, 69, + /* BUNK */ + 66, 85, 78, 75, + /* *BED */ + 194, 69, 68, 32, + /* PILL */ + 80, 73, 76, 76, + /* VENT */ + 86, 69, 78, 84, + /* *AIR */ + 193, 73, 82, 32, + /* ROD */ + 82, 79, 68, 32, + /* DUST */ + 68, 85, 83, 84, + /* CONT */ + 67, 79, 78, 84, + /* *CONS */ + 195, 79, 78, 83, + /* FLOO */ + 70, 76, 79, 79, + /* *GROU */ + 199, 82, 79, 85, + /* *DECK */ + 196, 69, 67, 75, + /* RING */ + 82, 73, 78, 71, + /* HATC */ + 72, 65, 84, 67, + /* HOOK */ + 72, 79, 79, 75, + /* BUTT */ + 66, 85, 84, 84, + /* ORAN */ + 79, 82, 65, 78, + /* CONN */ + 67, 79, 78, 78, + /* CIRC */ + 67, 73, 82, 67, + /* *BOAR */ + 194, 79, 65, 82, + /* OVEN */ + 79, 86, 69, 78, + /* *STOV */ + 211, 84, 79, 86, + /* *COOK */ + 195, 79, 79, 75, + /* LARD */ + 76, 65, 82, 68, + /* CAKE */ + 67, 65, 75, 69, + /* WATC */ + 87, 65, 84, 67, + /* BLAC */ + 66, 76, 65, 67, + /* WHIT */ + 87, 72, 73, 84, + /* AWAY */ + 65, 87, 65, 89, + /* PANE */ + 80, 65, 78, 69, + /* *META */ + 205, 69, 84, 65, + /* CLIP */ + 67, 76, 73, 80, + /* *RETA */ + 210, 69, 84, 65, + /* HOLE */ + 72, 79, 76, 69, + /* *PIPE */ + 208, 73, 80, 69, + /* RED */ + 82, 69, 68, 32, + /* OUT */ + 79, 85, 84, 32, + /* SHUT */ + 83, 72, 85, 84, + /* *CRAF */ + 195, 82, 65, 70, + /* PULS */ + 80, 85, 76, 83, + /* LEVE */ + 76, 69, 86, 69, + /* YELL */ + 89, 69, 76, 76, + /* LATH */ + 76, 65, 84, 72, + /* TOOL */ + 84, 79, 79, 76, + /* *COMP */ + 195, 79, 77, 80, + /* HAMM */ + 72, 65, 77, 77, + /* WOOD */ + 87, 79, 79, 68, + /* *HAND */ + 200, 65, 78, 68, + /* BLAD */ + 66, 76, 65, 68, + /* BAR */ + 66, 65, 82, 32, + /* *ROUG */ + 210, 79, 85, 71, + /* SCRE */ + 83, 67, 82, 69, + /* FILE */ + 70, 73, 76, 69, + /* *TRIA */ + 212, 82, 73, 65, + /* LOCK */ + 76, 79, 67, 75, + /* SUIT */ + 83, 85, 73, 84, + /* *SPAC */ + 211, 80, 65, 67, + /* BOOT */ + 66, 79, 79, 84, + /* *MAGN */ + 205, 65, 71, 78, + /* GREE */ + 71, 82, 69, 69, + /* CREA */ + 67, 82, 69, 65, + /* TABL */ + 84, 65, 66, 76, + /* MIX */ + 77, 73, 88, 32, + /* FLOU */ + 70, 76, 79, 85, + /* RAIS */ + 82, 65, 73, 83, + /* BOTT */ + 66, 79, 84, 84, + /* WATE */ + 87, 65, 84, 69, + /* TIN */ + 84, 73, 78, 32, + /* CEIL */ + 67, 69, 73, 76, + /* *ROOF */ + 210, 79, 79, 70, + /* WALL */ + 87, 65, 76, 76, + /* WREC */ + 87, 82, 69, 67, + /* KEY */ + 75, 69, 89, 32, + /* CABL */ + 67, 65, 66, 76, + /* *WIRE */ + 215, 73, 82, 69, + /* SQUA */ + 83, 81, 85, 65, + /* ROUN */ + 82, 79, 85, 78, + /* BLOC */ + 66, 76, 79, 67, + /* GRIL */ + 71, 82, 73, 76, + /* CAGE */ + 67, 65, 71, 69, + /* CRAT */ + 67, 82, 65, 84, + /* *BOX */ + 194, 79, 88, 32, + /* SIGN */ + 83, 73, 71, 78, + /* NOTE */ + 78, 79, 84, 69, + /* GAME */ + 71, 65, 77, 69, + /* YOU */ + 89, 79, 85, 32, + /* OFF */ + 79, 70, 70, 32, + /* THAT */ + 84, 72, 65, 84, + /* COUC */ + 67, 79, 85, 67, + /* FING */ + 70, 73, 78, 71, + /* NOSE */ + 78, 79, 83, 69, + /* SOCK */ + 83, 79, 67, 75, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* WATC */ + 87, 65, 84, 67, + 0, + /* ROD */ + 82, 79, 68, 32, + 9, + /* ROD */ + 82, 79, 68, 32, + 10, + /* HOOK */ + 72, 79, 79, 75, + 17, + /* CIRC */ + 67, 73, 82, 67, + 20, + /* LARD */ + 76, 65, 82, 68, + 25, + /* CAKE */ + 67, 65, 75, 69, + 26, + /* CAKE */ + 67, 65, 75, 69, + 27, + /* HAMM */ + 72, 65, 77, 77, + 47, + /* BLAD */ + 66, 76, 65, 68, + 48, + /* WOOD */ + 87, 79, 79, 68, + 49, + /* BAR */ + 66, 65, 82, 32, + 50, + /* SCRE */ + 83, 67, 82, 69, + 51, + /* SUIT */ + 83, 85, 73, 84, + 55, + /* BOOT */ + 66, 79, 79, 84, + 57, + /* TABL */ + 84, 65, 66, 76, + 63, + /* MIX */ + 77, 73, 88, 32, + 64, + /* FLOU */ + 70, 76, 79, 85, + 65, + /* BOTT */ + 66, 79, 84, 84, + 66, + /* TIN */ + 84, 73, 78, 32, + 68, + /* RAIS */ + 82, 65, 73, 83, + 69, + /* KEY */ + 75, 69, 89, 32, + 73, + /* CABL */ + 67, 65, 66, 76, + 74, + /* ROUN */ + 82, 79, 85, 78, + 75, + /* SQUA */ + 83, 81, 85, 65, + 82, + /* NOTE */ + 78, 79, 84, 69, + 84, + /* TIN */ + 84, 73, 78, 32, + 85, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst06.c b/Applications/games/myst06.c new file mode 100644 index 00000000..ac02f92c --- /dev/null +++ b/Applications/games/myst06.c @@ -0,0 +1,2910 @@ +#define NUM_OBJ 65 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 150; +const uint8_t lightfill = 150; +const uint8_t startcarried = 3; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 36; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 49, 57, 56, 50, 32, 66, 46, 72, 111, 119, 97, 114, 116, 104, 0 }; +const uint8_t loctxt_1[] = { +102, 105, 101, 108, 100, 0 }; +const uint8_t loctxt_2[] = { +102, 105, 101, 108, 100, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 98, 121, 32, 116, 104, 101, 32, 114, 111, 97, 100, 115, 105, 100, 101, 0 }; +const uint8_t loctxt_4[] = { +76, 97, 121, 45, 98, 121, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 105, 110, 115, 105, 100, 101, 32, 109, 121, 32, 99, 97, 114, 0 }; +const uint8_t loctxt_6[] = { +115, 109, 97, 108, 108, 32, 101, 110, 99, 108, 111, 115, 117, 114, 101, 0 }; +const uint8_t loctxt_7[] = { +84, 101, 110, 116, 32, 101, 110, 116, 114, 97, 110, 99, 101, 0 }; +const uint8_t loctxt_8[] = { +67, 105, 114, 99, 117, 115, 32, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_9[] = { +83, 116, 111, 114, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 116, 114, 97, 112, 101, 122, 101, 32, 115, 116, 97, 110, 100, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 84, 114, 97, 112, 101, 122, 101, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 109, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 119, 97, 103, 111, 110, 0 }; +const uint8_t loctxt_13[] = { +67, 105, 114, 99, 117, 115, 32, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 84, 105, 103, 104, 116, 114, 111, 112, 101, 32, 115, 116, 97, 110, 100, 0 }; +const uint8_t loctxt_15[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 84, 105, 103, 104, 116, 114, 111, 112, 101, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 84, 105, 103, 104, 116, 114, 111, 112, 101, 32, 115, 116, 97, 110, 100, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 114, 101, 97, 114, 32, 111, 102, 32, 109, 121, 32, 67, 97, 114, 0 }; +const uint8_t loctxt_18[] = { +77, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 87, 97, 103, 111, 110, 0 }; +const uint8_t loctxt_19[] = { +115, 109, 97, 108, 108, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_20[] = { +76, 97, 114, 103, 101, 32, 84, 97, 110, 107, 0 }; +const uint8_t loctxt_21[] = { +77, 101, 115, 115, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_22[] = { +70, 105, 101, 108, 100, 0 }; +const uint8_t loctxt_23[] = { +67, 105, 114, 99, 117, 115, 32, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_24[] = { +67, 105, 114, 99, 117, 115, 32, 82, 105, 110, 103, 0 }; +const uint8_t loctxt_25[] = { +108, 97, 114, 103, 101, 32, 67, 97, 110, 110, 111, 110, 0 }; +const uint8_t loctxt_26[] = { +67, 105, 114, 99, 117, 115, 32, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_27[] = { +84, 105, 103, 101, 114, 39, 115, 32, 99, 97, 103, 101, 0 }; +const uint8_t loctxt_28[] = { +103, 108, 111, 111, 109, 121, 32, 112, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 101, 113, 117, 105, 112, 109, 101, 110, 116, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 98, 101, 104, 105, 110, 100, 32, 97, 32, 80, 97, 110, 101, 108, 0 }; +const uint8_t loctxt_31[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 97, 108, 99, 111, 118, 101, 0 }; +const uint8_t loctxt_32[] = { +67, 108, 111, 115, 101, 116, 0 }; +const uint8_t loctxt_33[] = { +83, 116, 111, 114, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_34[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 104, 105, 103, 104, 32, 80, 108, 97, 116, 102, 111, 114, 109, 0 }; +const uint8_t loctxt_35[] = { +115, 97, 102, 101, 116, 121, 32, 78, 101, 116, 0 }; +const uint8_t loctxt_36[] = { +42, 83, 101, 110, 100, 32, 105, 110, 32, 116, 104, 101, 32, 67, 108, 111, 119, 110, 115, 33, 32, 32, 73, 39, 109, 32, 68, 69, 65, 68, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 2, 6, 12, 0, 0 } }, + { loctxt_2, { 1, 0, 0, 0, 0, 0 } }, + { loctxt_3, { 0, 4, 0, 0, 0, 0 } }, + { loctxt_4, { 3, 17, 0, 0, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 22, 1, 0, 0 } }, + { loctxt_7, { 8, 0, 19, 9, 0, 0 } }, + { loctxt_8, { 23, 7, 13, 21, 0, 0 } }, + { loctxt_9, { 0, 0, 7, 33, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 0, 0, 8 } }, + { loctxt_11, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 1, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 26, 8, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 13 } }, + { loctxt_15, { 16, 14, 36, 36, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_17, { 4, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 12, 0, 0, 0 } }, + { loctxt_19, { 0, 0, 20, 7, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 19, 0, 0 } }, + { loctxt_21, { 0, 0, 8, 0, 0, 0 } }, + { loctxt_22, { 0, 0, 0, 6, 0, 0 } }, + { loctxt_23, { 0, 8, 0, 24, 0, 0 } }, + { loctxt_24, { 0, 0, 23, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 13, 0, 0 } }, + { loctxt_27, { 0, 0, 0, 26, 0, 0 } }, + { loctxt_28, { 0, 29, 0, 0, 27, 0 } }, + { loctxt_29, { 28, 0, 0, 0, 0, 0 } }, + { loctxt_30, { 29, 0, 0, 31, 0, 0 } }, + { loctxt_31, { 0, 0, 30, 0, 0, 0 } }, + { loctxt_32, { 0, 33, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 0, 9, 0, 0, 0 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_35, { 0, 0, 0, 0, 0, 26 } }, + { loctxt_36, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 4, + 0, + 0, + 0, + 6, + 12, + 0, + 18, + 0, + 0, + 0, + 22, + 0, + 0, + 9, + 0, + 0, + 0, + 33, + 0, + 32, + 21, + 0, + 8, + 0, + 0, + 8, + 13, + 26, + 19, + 20, + 0, + 0, + 27, + 0, + 0, + 0, + 0, + 30, + 0, + 31, + 14, + 0, + 16, + 0, + 10, + 24, + 25, + 0, + 23, + 0, + 255, + 0, + 16, + 0, + 0, + 1, + 2, + 255, + 255, + 3, + 34, + 0, + 33, + 29, + 17, +}; + + +const uint8_t objtxt_0[] = { +77, 121, 32, 67, 97, 114, 0 }; +const uint8_t objtxt_1[] = { +70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_2[] = { +68, 101, 97, 100, 32, 70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_3[] = { +83, 112, 97, 110, 110, 101, 114, 0 }; +const uint8_t objtxt_4[] = { +71, 101, 110, 101, 114, 97, 116, 111, 114, 0 }; +const uint8_t objtxt_5[] = { +68, 111, 111, 114, 0 }; +const uint8_t objtxt_6[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_7[] = { +76, 111, 99, 107, 101, 114, 0 }; +const uint8_t objtxt_8[] = { +66, 114, 111, 107, 101, 110, 32, 76, 111, 99, 107, 101, 114, 0 }; +const uint8_t objtxt_9[] = { +76, 73, 84, 32, 70, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t objtxt_10[] = { +72, 97, 99, 107, 115, 97, 119, 0 }; +const uint8_t objtxt_11[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_12[] = { +83, 116, 97, 114, 116, 105, 110, 103, 32, 72, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_13[] = { +72, 101, 97, 118, 121, 32, 73, 114, 111, 110, 32, 66, 97, 114, 115, 0 }; +const uint8_t objtxt_14[] = { +67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_15[] = { +79, 112, 101, 110, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_16[] = { +84, 104, 105, 110, 32, 83, 108, 105, 112, 112, 101, 114, 115, 0 }; +const uint8_t objtxt_17[] = { +83, 108, 105, 112, 112, 101, 114, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_18[] = { +67, 108, 111, 119, 110, 39, 115, 32, 67, 111, 115, 116, 117, 109, 101, 0 }; +const uint8_t objtxt_19[] = { +67, 108, 111, 119, 110, 39, 115, 32, 67, 111, 115, 116, 117, 109, 101, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_20[] = { +84, 114, 97, 105, 110, 101, 114, 39, 115, 32, 87, 104, 105, 112, 0 }; +const uint8_t objtxt_21[] = { +70, 114, 101, 101, 122, 101, 114, 0 }; +const uint8_t objtxt_22[] = { +70, 105, 115, 104, 0 }; +const uint8_t objtxt_23[] = { +80, 105, 108, 101, 32, 111, 102, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_24[] = { +83, 97, 102, 101, 116, 121, 32, 78, 101, 116, 0 }; +const uint8_t objtxt_25[] = { +83, 97, 102, 101, 116, 121, 32, 78, 101, 116, 32, 40, 101, 114, 101, 99, 116, 101, 100, 41, 0 }; +const uint8_t objtxt_26[] = { +76, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_27[] = { +76, 97, 100, 100, 101, 114, 0 }; +const uint8_t objtxt_28[] = { +67, 97, 103, 101, 0 }; +const uint8_t objtxt_29[] = { +76, 97, 114, 103, 101, 32, 84, 97, 110, 107, 0 }; +const uint8_t objtxt_30[] = { +87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_31[] = { +83, 101, 97, 45, 76, 105, 111, 110, 0 }; +const uint8_t objtxt_32[] = { +83, 110, 111, 114, 107, 101, 108, 0 }; +const uint8_t objtxt_33[] = { +83, 108, 101, 101, 112, 105, 110, 103, 32, 84, 105, 103, 101, 114, 0 }; +const uint8_t objtxt_34[] = { +65, 110, 103, 114, 121, 32, 84, 105, 103, 101, 114, 0 }; +const uint8_t objtxt_35[] = { +84, 114, 97, 112, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_36[] = { +66, 117, 116, 116, 111, 110, 0 }; +const uint8_t objtxt_37[] = { +79, 112, 101, 110, 32, 72, 97, 116, 99, 104, 0 }; +const uint8_t objtxt_38[] = { +84, 119, 111, 32, 84, 101, 114, 109, 105, 110, 97, 108, 115, 0 }; +const uint8_t objtxt_39[] = { +83, 104, 111, 114, 116, 101, 100, 32, 84, 101, 114, 109, 105, 110, 97, 108, 115, 0 }; +const uint8_t objtxt_40[] = { +66, 108, 117, 101, 112, 114, 105, 110, 116, 0 }; +const uint8_t objtxt_41[] = { +83, 116, 101, 101, 108, 32, 84, 105, 103, 104, 116, 114, 111, 112, 101, 0 }; +const uint8_t objtxt_42[] = { +83, 116, 101, 101, 108, 32, 67, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_43[] = { +77, 101, 116, 97, 108, 32, 66, 97, 114, 0 }; +const uint8_t objtxt_44[] = { +72, 111, 108, 101, 32, 105, 110, 32, 67, 97, 110, 118, 97, 115, 0 }; +const uint8_t objtxt_45[] = { +84, 114, 97, 112, 101, 122, 101, 0 }; +const uint8_t objtxt_46[] = { +72, 117, 103, 101, 32, 67, 97, 110, 110, 111, 110, 0 }; +const uint8_t objtxt_47[] = { +83, 109, 97, 108, 108, 32, 76, 101, 118, 101, 114, 0 }; +const uint8_t objtxt_48[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_49[] = { +67, 108, 111, 119, 110, 0 }; +const uint8_t objtxt_50[] = { +78, 111, 116, 101, 0 }; +const uint8_t objtxt_51[] = { +80, 101, 116, 114, 111, 108, 32, 67, 97, 110, 32, 40, 69, 109, 112, 116, 121, 41, 0 }; +const uint8_t objtxt_52[] = { +80, 101, 116, 114, 111, 108, 32, 67, 97, 110, 32, 40, 102, 117, 108, 108, 41, 0 }; +const uint8_t objtxt_53[] = { +84, 105, 103, 104, 116, 114, 111, 112, 101, 32, 97, 110, 99, 104, 111, 114, 97, 103, 101, 0 }; +const uint8_t objtxt_54[] = { +67, 114, 97, 115, 104, 32, 72, 101, 108, 109, 101, 116, 0 }; +const uint8_t objtxt_55[] = { +67, 114, 97, 115, 104, 32, 72, 101, 108, 109, 101, 116, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_56[] = { +67, 105, 114, 99, 117, 115, 32, 84, 101, 110, 116, 0 }; +const uint8_t objtxt_57[] = { +82, 111, 97, 100, 0 }; +const uint8_t objtxt_58[] = { +67, 97, 114, 32, 75, 101, 121, 115, 0 }; +const uint8_t objtxt_59[] = { +80, 101, 110, 107, 110, 105, 102, 101, 0 }; +const uint8_t objtxt_60[] = { +70, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_61[] = { +67, 97, 110, 118, 97, 115, 32, 114, 111, 111, 102, 0 }; +const uint8_t objtxt_62[] = { +78, 111, 116, 101, 0 }; +const uint8_t objtxt_63[] = { +67, 108, 111, 115, 101, 116, 0 }; +const uint8_t objtxt_64[] = { +67, 111, 110, 116, 114, 111, 108, 32, 80, 97, 110, 101, 108, 0 }; +const uint8_t objtxt_65[] = { +80, 101, 116, 114, 111, 108, 32, 102, 105, 108, 108, 101, 114, 32, 104, 111, 108, 101, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +82, 111, 108, 108, 32, 117, 112, 33, 32, 82, 111, 108, 108, 32, 117, 112, 33, 0 }; +const uint8_t msgtxt_2[] = { +84, 104, 101, 32, 67, 73, 82, 67, 85, 83, 32, 105, 115, 32, 105, 110, 32, 116, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_3[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_4[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_5[] = { +78, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_6[] = { +73, 116, 32, 115, 97, 121, 115, 58, 45, 0 }; +const uint8_t msgtxt_7[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_8[] = { +73, 116, 39, 115, 32, 111, 117, 116, 32, 111, 102, 32, 102, 117, 101, 108, 33, 0 }; +const uint8_t msgtxt_9[] = { +66, 45, 111, 45, 111, 45, 111, 45, 111, 45, 109, 45, 109, 33, 0 }; +const uint8_t msgtxt_10[] = { +83, 45, 112, 45, 108, 45, 97, 45, 97, 45, 116, 45, 116, 33, 33, 0 }; +const uint8_t msgtxt_11[] = { +73, 116, 39, 115, 32, 108, 111, 99, 107, 101, 100, 33, 0 }; +const uint8_t msgtxt_12[] = { +73, 39, 118, 101, 32, 110, 111, 32, 107, 101, 121, 115, 33, 0 }; +const uint8_t msgtxt_13[] = { +78, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_14[] = { +72, 97, 112, 112, 101, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_15[] = { +72, 101, 97, 118, 121, 32, 105, 114, 111, 110, 32, 98, 97, 114, 115, 32, 99, 114, 97, 115, 104, 32, 100, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_16[] = { +73, 39, 109, 32, 84, 114, 97, 112, 112, 101, 100, 33, 0 }; +const uint8_t msgtxt_17[] = { +79, 46, 107, 46, 0 }; +const uint8_t msgtxt_18[] = { +73, 32, 115, 109, 97, 115, 104, 32, 109, 121, 32, 104, 101, 97, 100, 32, 111, 110, 32, 108, 97, 110, 100, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_19[] = { +73, 39, 109, 32, 68, 69, 65, 68, 33, 0 }; +const uint8_t msgtxt_20[] = { +84, 104, 101, 32, 67, 104, 101, 115, 116, 32, 108, 105, 100, 32, 102, 108, 105, 101, 115, 32, 111, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_21[] = { +84, 104, 101, 32, 84, 105, 103, 101, 114, 0 }; +const uint8_t msgtxt_22[] = { +99, 111, 119, 101, 114, 115, 32, 97, 119, 97, 121, 33, 0 }; +const uint8_t msgtxt_23[] = { +84, 104, 101, 32, 83, 101, 97, 45, 76, 105, 111, 110, 32, 116, 111, 115, 115, 101, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_24[] = { +84, 104, 101, 32, 67, 108, 111, 119, 110, 32, 114, 117, 110, 115, 32, 97, 119, 97, 121, 32, 102, 114, 111, 109, 32, 109, 101, 0 }; +const uint8_t msgtxt_25[] = { +34, 89, 111, 117, 32, 109, 117, 115, 116, 32, 100, 101, 115, 116, 114, 111, 121, 32, 116, 104, 105, 115, 32, 112, 108, 97, 99, 101, 34, 0 }; +const uint8_t msgtxt_26[] = { +34, 87, 101, 32, 97, 114, 101, 32, 83, 112, 105, 114, 105, 116, 115, 32, 45, 32, 68, 111, 111, 109, 101, 100, 32, 98, 121, 32, 69, 118, 105, 108, 34, 0 }; +const uint8_t msgtxt_27[] = { +34, 68, 111, 111, 109, 101, 100, 32, 102, 111, 114, 101, 118, 101, 114, 32, 116, 111, 32, 116, 104, 105, 115, 32, 67, 105, 114, 99, 117, 115, 34, 0 }; +const uint8_t msgtxt_28[] = { +72, 101, 32, 112, 111, 105, 110, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 33, 0 }; +const uint8_t msgtxt_29[] = { +34, 68, 101, 116, 111, 110, 97, 116, 105, 111, 110, 32, 112, 114, 105, 109, 101, 100, 32, 119, 104, 101, 110, 32, 84, 101, 114, 109, 105, 110, 97, 108, 115, 34, 0 }; +const uint8_t msgtxt_30[] = { +34, 79, 110, 32, 99, 111, 110, 116, 114, 111, 108, 32, 112, 97, 110, 101, 108, 32, 97, 114, 101, 32, 115, 104, 111, 114, 116, 101, 100, 34, 0 }; +const uint8_t msgtxt_31[] = { +73, 32, 119, 97, 108, 107, 101, 100, 32, 111, 102, 102, 32, 116, 104, 101, 32, 84, 105, 103, 104, 116, 114, 111, 112, 101, 33, 0 }; +const uint8_t msgtxt_32[] = { +34, 65, 85, 84, 79, 45, 68, 69, 84, 79, 78, 65, 84, 73, 79, 78, 32, 80, 82, 73, 77, 69, 68, 34, 0 }; +const uint8_t msgtxt_33[] = { +66, 101, 108, 108, 115, 32, 97, 110, 100, 32, 115, 105, 114, 101, 110, 115, 32, 97, 114, 101, 32, 115, 111, 117, 110, 100, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_34[] = { +73, 32, 115, 108, 105, 112, 112, 101, 100, 32, 111, 102, 102, 32, 116, 104, 101, 32, 84, 105, 103, 104, 116, 114, 111, 112, 101, 33, 0 }; +const uint8_t msgtxt_35[] = { +87, 104, 101, 101, 101, 101, 101, 101, 33, 0 }; +const uint8_t msgtxt_36[] = { +73, 39, 109, 32, 115, 112, 108, 97, 116, 116, 101, 114, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 32, 116, 104, 101, 32, 67, 97, 110, 118, 97, 115, 33, 0 }; +const uint8_t msgtxt_37[] = { +73, 39, 109, 32, 119, 101, 97, 114, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_38[] = { +73, 32, 110, 101, 101, 100, 32, 80, 101, 116, 114, 111, 108, 33, 0 }; +const uint8_t msgtxt_39[] = { +71, 101, 110, 101, 114, 97, 116, 111, 114, 32, 119, 111, 110, 39, 116, 32, 115, 116, 97, 114, 116, 0 }; +const uint8_t msgtxt_40[] = { +71, 101, 110, 101, 114, 97, 116, 111, 114, 32, 115, 112, 108, 117, 116, 116, 101, 114, 115, 32, 105, 110, 116, 111, 32, 108, 105, 102, 101, 33, 0 }; +const uint8_t msgtxt_41[] = { +84, 104, 101, 32, 98, 97, 116, 116, 101, 114, 121, 32, 105, 115, 32, 102, 108, 97, 116, 33, 0 }; +const uint8_t msgtxt_42[] = { +73, 32, 100, 114, 105, 118, 101, 32, 97, 119, 97, 121, 32, 97, 116, 32, 102, 117, 108, 108, 32, 115, 112, 101, 101, 100, 0 }; +const uint8_t msgtxt_43[] = { +97, 110, 100, 32, 97, 118, 111, 105, 100, 32, 116, 104, 101, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 46, 32, 73, 32, 115, 117, 99, 99, 101, 101, 100, 101, 100, 33, 0 }; +const uint8_t msgtxt_44[] = { +67, 108, 111, 119, 110, 32, 115, 97, 121, 115, 58, 32, 34, 78, 111, 116, 32, 72, 101, 114, 101, 33, 34, 0 }; +const uint8_t msgtxt_45[] = { +67, 108, 111, 119, 110, 32, 104, 101, 108, 112, 115, 32, 109, 101, 32, 101, 114, 101, 99, 116, 32, 116, 104, 101, 32, 78, 101, 116, 0 }; +const uint8_t msgtxt_46[] = { +73, 116, 115, 32, 116, 111, 111, 32, 104, 101, 97, 118, 121, 33, 0 }; +const uint8_t msgtxt_47[] = { +34, 77, 65, 82, 86, 79, 32, 45, 32, 84, 72, 69, 32, 72, 85, 77, 65, 78, 32, 67, 65, 78, 78, 79, 78, 66, 65, 76, 76, 34, 0 }; +const uint8_t msgtxt_48[] = { +72, 117, 103, 101, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 0 }; +const uint8_t msgtxt_49[] = { +82, 105, 112, 115, 32, 109, 101, 32, 116, 111, 32, 112, 101, 105, 99, 101, 115, 33, 0 }; +const uint8_t msgtxt_50[] = { +34, 68, 69, 84, 79, 78, 65, 84, 73, 79, 78, 32, 73, 78, 0 }; +const uint8_t msgtxt_51[] = { +84, 85, 82, 78, 83, 34, 0 }; +const uint8_t msgtxt_52[] = { +67, 108, 111, 119, 110, 32, 114, 117, 110, 115, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_53[] = { +73, 39, 109, 32, 110, 111, 116, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_54[] = { +87, 104, 97, 116, 32, 97, 32, 102, 111, 117, 108, 32, 109, 111, 117, 116, 104, 32, 121, 111, 117, 32, 104, 97, 118, 101, 33, 0 }; +const uint8_t msgtxt_55[] = { +85, 115, 101, 32, 121, 111, 117, 114, 32, 119, 105, 116, 115, 32, 97, 110, 100, 32, 69, 88, 65, 77, 105, 110, 101, 32, 116, 104, 105, 110, 103, 115, 33, 0 }; +const uint8_t msgtxt_56[] = { +89, 111, 117, 32, 116, 104, 105, 110, 107, 32, 116, 104, 105, 115, 32, 105, 115, 32, 97, 32, 103, 97, 109, 101, 32, 63, 0 }; +const uint8_t msgtxt_57[] = { +85, 103, 104, 33, 0 }; +const uint8_t msgtxt_58[] = { +73, 39, 118, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 116, 111, 32, 99, 117, 116, 32, 105, 116, 32, 119, 105, 116, 104, 33, 0 }; +const uint8_t msgtxt_59[] = { +73, 116, 32, 102, 101, 108, 108, 32, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 33, 0 }; +const uint8_t msgtxt_60[] = { +73, 116, 39, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 108, 105, 116, 33, 0 }; +const uint8_t msgtxt_61[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 108, 105, 116, 33, 0 }; +const uint8_t msgtxt_62[] = { +84, 104, 101, 32, 119, 97, 121, 32, 105, 115, 32, 98, 97, 114, 114, 101, 100, 33, 0 }; +const uint8_t msgtxt_63[] = { +73, 116, 39, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 114, 117, 110, 110, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_64[] = { +73, 116, 32, 110, 101, 101, 100, 115, 32, 102, 105, 120, 105, 110, 103, 32, 45, 32, 97, 32, 99, 97, 98, 108, 101, 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_65[] = { +72, 101, 32, 108, 111, 111, 107, 115, 32, 104, 117, 110, 103, 114, 121, 33, 0 }; +const uint8_t msgtxt_66[] = { +89, 111, 117, 39, 114, 101, 32, 106, 111, 107, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_67[] = { +70, 111, 114, 99, 101, 100, 32, 105, 116, 32, 111, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_68[] = { +77, 121, 32, 116, 97, 110, 107, 32, 105, 115, 32, 110, 111, 119, 32, 102, 117, 108, 108, 33, 0 }; +const uint8_t msgtxt_69[] = { +73, 32, 99, 97, 110, 110, 111, 116, 32, 108, 101, 97, 118, 101, 32, 116, 104, 101, 32, 115, 112, 105, 114, 105, 116, 115, 32, 116, 111, 32, 115, 117, 102, 102, 101, 114, 33, 0 }; +const uint8_t msgtxt_70[] = { +84, 114, 121, 32, 116, 111, 32, 98, 101, 32, 115, 101, 114, 105, 111, 117, 115, 33, 0 }; +const uint8_t msgtxt_71[] = { +75, 101, 121, 115, 32, 100, 111, 110, 39, 116, 32, 102, 105, 116, 33, 0 }; +const uint8_t msgtxt_72[] = { +72, 111, 119, 32, 100, 101, 115, 116, 114, 117, 99, 116, 105, 118, 101, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 171, + 9, 1, 0, 1, + 1, 86, 2, 58, +/* AUTO 100 */ + 169, + 4, 7, 9, 2, + 56, 64, +/* AUTO 100 */ + 169, + 4, 7, 8, 2, + 57, 64, +/* AUTO 100 */ + 165, + 4, 1, + 57, 64, +/* AUTO 100 */ + 170, + 8, 3, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 203, + 19, 0, 7, 5, + 9, 48, 49, 61, +/* AUTO 0 */ + 199, + 16, 0, + 33, 32, 50, 78, +/* AUTO 0 */ + 201, + 16, 0, 0, 1, + 81, 51, +/* AUTO 100 */ + 168, + 4, 15, 0, 4, + 58, +/* AUTO 100 */ + 168, + 4, 16, 0, 4, + 60, +/* AUTO 100 */ + 168, + 4, 14, 0, 4, + 60, +/* AUTO 100 */ + 178, + 4, 15, 6, 17, 14, 25, 0, 4, + 60, 61, 34, +/* AUTO 100 */ + 177, + 4, 15, 6, 17, 13, 25, 0, 35, + 34, 54, +/* AUTO 100 */ + 174, + 4, 36, 8, 4, 14, 25, + 31, 61, 63, +/* AUTO 100 */ + 177, + 4, 36, 8, 4, 13, 25, 0, 35, + 31, 54, +/* AUTO 100 */ + 173, + 13, 25, 13, 49, 0, 49, + 59, 102, +/* AUTO 100 */ + 182, + 6, 19, 2, 49, 4, 23, 0, 49, 0, 8, + 88, 102, 62, +/* AUTO 100 */ + 172, + 1, 19, 14, 25, 0, 49, + 53, +/* AUTO 100 */ + 168, + 4, 36, 9, 4, + 63, +/* AUTO 100 */ + 179, + 4, 7, 8, 2, 14, 13, 0, 13, + 53, 64, 15, 16, +/* AUTO 100 */ + 172, + 8, 16, 14, 2, 0, 2, + 53, +/* AUTO 100 */ + 182, + 6, 19, 2, 49, 4, 8, 0, 49, 0, 23, + 88, 102, 62, +/* AUTO 100 */ + 172, + 4, 16, 14, 42, 0, 41, + 53, +/* AUTO 100 */ + 172, + 4, 14, 14, 42, 0, 41, + 53, +}; +const uint8_t actions[] = { +/* CUT HOLE */ + 21, 41, 76, + 4, 34, 14, 44, 1, 59, 0, 44, 0, 61, + 72, 17, +/* GET HELM */ + 9, 10, 71, + 2, 54, 0, 54, + 52, 17, +/* GET HELM */ + 4, 10, 71, + 1, 55, + 37, +/* GET COST */ + 9, 10, 51, + 2, 18, 0, 18, + 52, 17, +/* GET COST */ + 4, 10, 51, + 1, 19, + 37, +/* GET SLIP */ + 9, 10, 14, + 2, 16, 0, 16, + 52, 17, +/* GET SLIP */ + 4, 10, 14, + 1, 17, + 37, +/* DROP HELM */ + 4, 18, 71, + 1, 55, + 37, +/* DROP HELM */ + 9, 18, 71, + 1, 54, 0, 54, + 53, 17, +/* DROP HELM */ + 4, 18, 71, + 6, 54, + 103, +/* DROP SLIP */ + 4, 18, 14, + 1, 17, + 37, +/* DROP SLIP */ + 9, 18, 14, + 1, 16, 0, 16, + 53, 17, +/* DROP SLIP */ + 4, 18, 14, + 6, 16, + 103, +/* DROP COST */ + 4, 18, 51, + 1, 19, + 37, +/* DROP COST */ + 9, 18, 51, + 1, 18, 0, 18, + 53, 17, +/* DROP COST */ + 4, 18, 51, + 6, 18, + 103, +/* GO TENT */ + 13, 1, 7, + 2, 56, 14, 13, 0, 7, + 54, 17, +/* GO ROAD */ + 9, 1, 92, + 4, 2, 0, 3, + 54, 17, +/* GO CAR */ + 13, 1, 20, + 1, 58, 2, 0, 0, 5, + 54, 17, +/* GO TIGH */ + 9, 1, 64, + 2, 41, 0, 15, + 54, 17, +/* CLIM LADD */ + 9, 51, 60, + 4, 13, 0, 14, + 54, 17, +/* CLIM LADD */ + 9, 51, 60, + 4, 8, 0, 10, + 54, 17, +/* EREC NET */ + 8, 62, 59, + 7, 26, 5, 49, + 7, +/* EREC NET */ + 12, 62, 59, + 1, 24, 2, 49, 7, 26, + 44, +/* EREC NET */ + 12, 62, 59, + 1, 24, 4, 26, 5, 49, + 46, +/* EXAM ROPE */ + 14, 34, 58, + 3, 23, 0, 23, 0, 24, + 72, 3, 4, +/* GET NET */ + 9, 10, 59, + 2, 24, 0, 24, + 52, 17, +/* DROP NET */ + 9, 18, 59, + 1, 24, 0, 24, + 53, 17, +/* CUT TIGH */ + 8, 41, 64, + 2, 59, 6, 10, + 108, +/* CUT TIGH */ + 23, 41, 64, + 2, 41, 1, 10, 0, 41, 0, 42, 0, 13, + 59, 62, 17, 109, +/* EREC NET */ + 23, 62, 59, + 3, 24, 2, 49, 4, 26, 0, 24, 0, 25, + 59, 53, 64, 45, +/* WEAR SLIP */ + 13, 26, 14, + 1, 16, 0, 16, 0, 17, + 72, 17, +/* WEAR COST */ + 13, 26, 51, + 1, 18, 0, 18, 0, 19, + 72, 17, +/* WEAR HELM */ + 13, 26, 71, + 1, 54, 0, 54, 0, 55, + 72, 17, +/* LIGH FLAS */ + 13, 78, 29, + 1, 1, 0, 1, 0, 9, + 72, 17, +/* LIGH FLAS */ + 4, 78, 29, + 13, 9, + 110, +/* UNLI FLAS */ + 14, 79, 29, + 3, 9, 0, 9, 0, 1, + 72, 17, 64, +/* UNLI FLAS */ + 4, 79, 29, + 14, 9, + 111, +/* OPEN BOOT */ + 23, 24, 22, + 4, 17, 14, 3, 1, 58, 0, 3, 0, 1, + 53, 53, 3, 4, +/* OPEN BOOT */ + 8, 24, 22, + 4, 17, 6, 58, + 12, +/* DROP TENT */ + 8, 18, 7, + 4, 7, 2, 13, + 112, +/* DROP TENT */ + 9, 18, 7, + 4, 7, 0, 1, + 54, 17, +/* OPEN CHES */ + 5, 24, 15, + 2, 14, + 13, 14, +/* KICK CHES */ + 13, 94, 15, + 4, 9, 9, 8, 0, 8, + 20, 58, +/* DROP CAR */ + 9, 18, 20, + 4, 5, 0, 4, + 54, 17, +/* GO FIEL */ + 9, 1, 83, + 4, 3, 0, 2, + 54, 17, +/* DIG ANY */ + 4, 48, 0, + 6, 11, + 7, +/* DIG ANY */ + 14, 48, 0, + 4, 22, 14, 12, 0, 12, + 53, 3, 4, +/* DIG ANY */ + 0, 48, 0, + 7, +/* STAR GENE */ + 9, 45, 35, + 4, 6, 6, 12, + 7, 39, +/* STAR GENE */ + 4, 45, 35, + 8, 2, + 113, +/* STAR GENE */ + 8, 45, 35, + 4, 6, 9, 5, + 114, +/* STAR GENE */ + 8, 45, 35, + 4, 6, 8, 6, + 38, +/* STAR GENE */ + 23, 45, 35, + 4, 6, 1, 12, 8, 5, 9, 6, 0, 2, + 58, 17, 64, 40, +/* LIGH FLAS */ + 4, 78, 29, + 13, 2, + 41, +/* PUSH BUTT */ + 15, 83, 82, + 2, 36, 14, 37, 0, 37, + 53, 4, 14, 64, +/* PUSH BUTT */ + 9, 83, 82, + 2, 36, 13, 37, + 13, 14, +/* SHOR TERM */ + 23, 64, 42, + 2, 38, 1, 3, 0, 38, 0, 39, 0, 3, + 17, 72, 59, 73, +/* AUTO 0 */ + 211, + 0, 3, 0, 1, 0, 25, 0, 1, + 58, 81, 79, 81, +/* READ BLUE */ + 7, 33, 39, + 1, 40, + 17, 6, 29, 30, +/* READ NOTE */ + 7, 33, 94, + 1, 62, + 6, 25, 26, 27, +/* EXAM CLOW */ + 15, 34, 69, + 2, 49, 14, 62, 0, 62, + 53, 3, 4, 28, +/* EXAM CLOW */ + 4, 34, 69, + 2, 49, + 28, +/* SWIM ANY */ + 15, 65, 0, + 4, 20, 14, 31, 0, 31, + 17, 3, 4, 53, +/* SWIM ANY */ + 4, 65, 0, + 4, 20, + 17, +/* EXAM SEA- */ + 8, 34, 47, + 2, 31, 14, 32, + 115, +/* FEED SEA- */ + 14, 30, 47, + 1, 22, 0, 22, 0, 32, + 59, 53, 23, +/* EXAM PANE */ + 14, 34, 41, + 4, 29, 14, 36, 0, 36, + 53, 3, 4, +/* EXAM PANE */ + 9, 34, 41, + 4, 29, 13, 36, + 3, 5, +/* GO HATC */ + 9, 1, 81, + 2, 37, 0, 30, + 17, 54, +/* EXAM TIGE */ + 4, 34, 62, + 4, 27, + 116, +/* MOVE TIGE */ + 23, 92, 62, + 4, 27, 9, 7, 0, 33, 0, 34, 0, 35, + 72, 53, 88, 73, +/* AUTO 0 */ + 195, + 88, 21, 49, 61, +/* CRAC WHIP */ + 9, 50, 54, + 1, 20, 7, 27, + 5, 14, +/* CRAC WHIP */ + 22, 50, 54, + 1, 20, 9, 7, 4, 27, 0, 7, 0, 35, + 58, 53, 73, +/* AUTO 0 */ + 203, + 0, 33, 0, 34, + 72, 17, 21, 22, +/* GO TRAP */ + 9, 1, 63, + 2, 35, 0, 28, + 54, 17, +/* EXAM CANN */ + 19, 34, 73, + 2, 46, 14, 48, 0, 48, 0, 54, + 53, 53, 3, 4, +/* READ SIGN */ + 5, 33, 95, + 2, 48, + 6, 47, +/* GO CANN */ + 9, 1, 73, + 4, 24, 0, 25, + 54, 17, +/* PULL LEVE */ + 19, 81, 74, + 2, 47, 1, 55, 13, 44, 0, 2, + 9, 88, 54, 35, +/* PULL LEVE */ + 15, 81, 74, + 2, 47, 13, 44, 6, 55, + 9, 88, 18, 61, +/* PULL LEVE */ + 11, 81, 74, + 2, 47, 14, 44, + 9, 88, 36, 61, +/* CUT CANV */ + 21, 41, 75, + 4, 34, 14, 44, 1, 59, 0, 44, 0, 61, + 72, 17, +/* EXAM CHES */ + 22, 34, 15, + 2, 14, 14, 16, 14, 17, 8, 8, 0, 16, + 53, 3, 4, +/* GO TANK */ + 9, 1, 46, + 2, 29, 0, 20, + 17, 54, +/* EXAM REFR */ + 14, 34, 18, + 2, 21, 14, 22, 0, 22, + 53, 3, 4, +/* EXAM GENE */ + 9, 34, 35, + 4, 6, 9, 5, + 3, 114, +/* FIX GENE */ + 22, 95, 35, + 9, 5, 1, 42, 1, 3, 0, 5, 0, 42, + 17, 58, 59, +/* GO TRAP */ + 9, 1, 63, + 2, 45, 0, 11, + 17, 54, +/* SWIN TRAP */ + 18, 57, 63, + 4, 11, 17, 45, 0, 34, 0, 45, + 35, 54, 53, +/* SWIN TRAP */ + 18, 57, 63, + 4, 11, 18, 45, 0, 10, 0, 45, + 35, 54, 53, +/* JUMP ANY */ + 11, 66, 0, + 4, 16, 14, 25, + 35, 88, 10, 61, +/* JUMP ANY */ + 14, 66, 0, + 4, 16, 13, 25, 0, 35, + 35, 88, 54, +/* JUMP ANY */ + 11, 66, 0, + 4, 14, 14, 25, + 35, 88, 10, 61, +/* JUMP ANY */ + 14, 66, 0, + 4, 14, 13, 25, 0, 35, + 35, 88, 54, +/* JUMP ANY */ + 11, 66, 0, + 4, 10, 14, 25, + 35, 88, 10, 61, +/* JUMP ANY */ + 14, 66, 0, + 4, 10, 13, 25, 0, 35, + 35, 88, 54, +/* JUMP ANY */ + 11, 66, 0, + 4, 34, 14, 25, + 35, 88, 10, 61, +/* JUMP ANY */ + 14, 66, 0, + 4, 34, 13, 25, 0, 35, + 35, 88, 54, +/* JUMP ANY */ + 0, 66, 0, + 7, +/* GO DOOR */ + 8, 1, 11, + 2, 5, 6, 43, + 11, +/* OPEN DOOR */ + 18, 24, 11, + 2, 5, 1, 43, 0, 5, 0, 6, + 17, 117, 72, +/* GO DOOR */ + 9, 1, 11, + 2, 6, 0, 18, + 17, 54, +/* EXAM LOCK */ + 4, 34, 16, + 2, 7, + 11, +/* EXAM LOCK */ + 14, 34, 16, + 2, 8, 14, 10, 0, 10, + 53, 3, 4, +/* OPEN LOCK */ + 17, 24, 16, + 2, 7, 1, 43, 0, 7, 0, 8, + 72, 117, +/* OPEN LOCK */ + 8, 24, 16, + 2, 7, 6, 43, + 12, +/* SYPH PETR */ + 21, 56, 24, + 2, 4, 1, 51, 1, 32, 0, 51, 0, 52, + 72, 17, +/* DRIV CAR */ + 9, 43, 20, + 4, 5, 9, 9, + 7, 38, +/* DRIV CAR */ + 15, 43, 20, + 4, 5, 8, 9, 8, 3, + 9, 42, 43, 63, +/* FILL TANK */ + 23, 54, 46, + 4, 17, 1, 52, 0, 9, 0, 52, 0, 51, + 17, 58, 72, 118, +/* KICK CHES */ + 9, 94, 15, + 2, 14, 8, 8, + 13, 14, +/* GO CLOS */ + 9, 1, 56, + 2, 63, 0, 32, + 17, 54, +/* GO CAGE */ + 9, 1, 61, + 2, 28, 0, 27, + 17, 54, +/* GET ROPE */ + 9, 10, 58, + 2, 23, 0, 23, + 52, 17, +/* DROP ROPE */ + 8, 18, 58, + 1, 23, 0, 23, + 53, +/* GO TENT */ + 4, 1, 7, + 13, 13, + 112, +/* DRIV CAR */ + 12, 43, 20, + 4, 5, 8, 9, 9, 3, + 119, +/* REMO SLIP */ + 13, 28, 14, + 1, 17, 0, 16, 0, 17, + 72, 17, +/* REMO COST */ + 13, 28, 51, + 1, 19, 0, 18, 0, 19, + 72, 17, +/* REMO HELM */ + 13, 28, 71, + 1, 55, 0, 54, 0, 55, + 72, 17, +/* GO HOLE */ + 4, 1, 76, + 4, 17, + 120, +/* UNLO DOOR */ + 8, 25, 11, + 4, 12, 1, 58, + 121, +/* GO WATE */ + 4, 1, 48, + 4, 20, + 17, +/* SMAS ANY */ + 0, 74, 0, + 122, +/* FILL CAN */ + 4, 54, 93, + 1, 51, + 38, +/* SCOR ANY */ + 0, 9, 0, + 106, +/* QUIT ANY */ + 0, 7, 0, + 63, +/* INVE ANY */ + 0, 23, 0, + 66, +/* SAVE ANY */ + 0, 8, 0, + 71, +/* EXAM ANY */ + 1, 34, 0, + 3, 5, +/* GO ANY */ + 0, 1, 0, + 7, +/* FUCK ANY */ + 0, 85, 0, + 104, +/* SAY ANY */ + 3, 58, 0, + 17, 85, 5, 14, +/* OPEN ANY */ + 0, 24, 0, + 7, +/* EAT ANY */ + 0, 67, 0, + 107, +/* HELP ANY */ + 0, 6, 0, + 105, +/* KICK ANY */ + 0, 94, 0, + 122, +/* KILL ANY */ + 0, 72, 0, + 7, +/* CLIM ANY */ + 0, 51, 0, + 7, +/* READ ANY */ + 0, 33, 0, + 7, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *WALK */ + 215, 65, 76, 75, + /* *RUN */ + 210, 85, 78, 32, + /* *PROC */ + 208, 82, 79, 67, + /* HELP */ + 72, 69, 76, 80, + /* QUIT */ + 81, 85, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* SCOR */ + 83, 67, 79, 82, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *PICK */ + 208, 73, 67, 75, + /* *GRAB */ + 199, 82, 65, 66, + /* *SEIZ */ + 211, 69, 73, 90, + /* *HOLD */ + 200, 79, 76, 68, + /* *OBTA */ + 207, 66, 84, 65, + /* *SNAT */ + 211, 78, 65, 84, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DEPO */ + 196, 69, 80, 79, + /* *PUT */ + 208, 85, 84, 32, + /* *THRO */ + 212, 72, 82, 79, + /* INVE */ + 73, 78, 86, 69, + /* OPEN */ + 79, 80, 69, 78, + /* UNLO */ + 85, 78, 76, 79, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* FEED */ + 70, 69, 69, 68, + /* GIVE */ + 71, 73, 86, 69, + /* *OFFE */ + 207, 70, 70, 69, + /* READ */ + 82, 69, 65, 68, + /* EXAM */ + 69, 88, 65, 77, + /* *LOOK */ + 204, 79, 79, 75, + /* *INSP */ + 201, 78, 83, 80, + /* *PERU */ + 208, 69, 82, 85, + /* *SEAR */ + 211, 69, 65, 82, + /* SAW */ + 83, 65, 87, 32, + /* *HACK */ + 200, 65, 67, 75, + /* CUT */ + 67, 85, 84, 32, + /* *SLIC */ + 211, 76, 73, 67, + /* DRIV */ + 68, 82, 73, 86, + /* *STEE */ + 211, 84, 69, 69, + /* STAR */ + 83, 84, 65, 82, + /* TURN */ + 84, 85, 82, 78, + /* *CRAN */ + 195, 82, 65, 78, + /* DIG */ + 68, 73, 71, 32, + /* *SHOV */ + 211, 72, 79, 86, + /* CRAC */ + 67, 82, 65, 67, + /* CLIM */ + 67, 76, 73, 77, + /* *ASCE */ + 193, 83, 67, 69, + /* FIRE */ + 70, 73, 82, 69, + /* FILL */ + 70, 73, 76, 76, + /* *REPL */ + 210, 69, 80, 76, + /* SYPH */ + 83, 89, 80, 72, + /* SWIN */ + 83, 87, 73, 78, + /* SAY */ + 83, 65, 89, 32, + /* *ASK */ + 193, 83, 75, 32, + /* *REMA */ + 210, 69, 77, 65, + /* *TALK */ + 212, 65, 76, 75, + /* EREC */ + 69, 82, 69, 67, + /* EMPT */ + 69, 77, 80, 84, + /* SHOR */ + 83, 72, 79, 82, + /* SWIM */ + 83, 87, 73, 77, + /* JUMP */ + 74, 85, 77, 80, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* *NIBB */ + 206, 73, 66, 66, + /* MAKE */ + 77, 65, 75, 69, + /* *MANU */ + 205, 65, 78, 85, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* SMAS */ + 83, 77, 65, 83, + /* *BREA */ + 194, 82, 69, 65, + /* *DEST */ + 196, 69, 83, 84, + /* *RUIN */ + 210, 85, 73, 78, + /* LIGH */ + 76, 73, 71, 72, + /* UNLI */ + 85, 78, 76, 73, + /* *EXTI */ + 197, 88, 84, 73, + /* PULL */ + 80, 85, 76, 76, + /* *TUG */ + 212, 85, 71, 32, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* FUCK */ + 70, 85, 67, 75, + /* *PISS */ + 208, 73, 83, 83, + /* *SHIT */ + 211, 72, 73, 84, + /* *BOLL */ + 194, 79, 76, 76, + /* *BAST */ + 194, 65, 83, 84, + /* *CUNT */ + 195, 85, 78, 84, + /* *BUGG */ + 194, 85, 71, 71, + /* MOVE */ + 77, 79, 86, 69, + /* *SHIF */ + 211, 72, 73, 70, + /* KICK */ + 75, 73, 67, 75, + /* FIX */ + 70, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* *MEND */ + 205, 69, 78, 68, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* TENT */ + 84, 69, 78, 84, + /* *CIRC */ + 195, 73, 82, 67, + /* *MARQ */ + 205, 65, 82, 81, + /* WAGO */ + 87, 65, 71, 79, + /* DOOR */ + 68, 79, 79, 82, + /* HACK */ + 72, 65, 67, 75, + /* *SAW */ + 211, 65, 87, 32, + /* SLIP */ + 83, 76, 73, 80, + /* CHES */ + 67, 72, 69, 83, + /* LOCK */ + 76, 79, 67, 75, + /* *CUPB */ + 195, 85, 80, 66, + /* REFR */ + 82, 69, 70, 82, + /* *FREE */ + 198, 82, 69, 69, + /* CAR */ + 67, 65, 82, 32, + /* *AUTO */ + 193, 85, 84, 79, + /* BOOT */ + 66, 79, 79, 84, + /* *TRUN */ + 212, 82, 85, 78, + /* PETR */ + 80, 69, 84, 82, + /* *GASO */ + 199, 65, 83, 79, + /* *FUEL */ + 198, 85, 69, 76, + /* SPAN */ + 83, 80, 65, 78, + /* *WREN */ + 215, 82, 69, 78, + /* FLAS */ + 70, 76, 65, 83, + /* *TORC */ + 212, 79, 82, 67, + /* *LAMP */ + 204, 65, 77, 80, + /* KEYS */ + 75, 69, 89, 83, + /* GAUG */ + 71, 65, 85, 71, + /* *METE */ + 205, 69, 84, 69, + /* GENE */ + 71, 69, 78, 69, + /* SHOV */ + 83, 72, 79, 86, + /* HAND */ + 72, 65, 78, 68, + /* *STAR */ + 211, 84, 65, 82, + /* BLUE */ + 66, 76, 85, 69, + /* ALCO */ + 65, 76, 67, 79, + /* PANE */ + 80, 65, 78, 69, + /* TERM */ + 84, 69, 82, 77, + /* *ELEC */ + 197, 76, 69, 67, + /* EQUI */ + 69, 81, 85, 73, + /* PASS */ + 80, 65, 83, 83, + /* TANK */ + 84, 65, 78, 75, + /* SEA- */ + 83, 69, 65, 45, + /* WATE */ + 87, 65, 84, 69, + /* SNOR */ + 83, 78, 79, 82, + /* BARS */ + 66, 65, 82, 83, + /* COST */ + 67, 79, 83, 84, + /* *OUTF */ + 207, 85, 84, 70, + /* *CLOT */ + 195, 76, 79, 84, + /* WHIP */ + 87, 72, 73, 80, + /* *TRAI */ + 212, 82, 65, 73, + /* CLOS */ + 67, 76, 79, 83, + /* FISH */ + 70, 73, 83, 72, + /* ROPE */ + 82, 79, 80, 69, + /* NET */ + 78, 69, 84, 32, + /* LADD */ + 76, 65, 68, 68, + /* CAGE */ + 67, 65, 71, 69, + /* TIGE */ + 84, 73, 71, 69, + /* TRAP */ + 84, 82, 65, 80, + /* TIGH */ + 84, 73, 71, 72, + /* CABL */ + 67, 65, 66, 76, + /* *HAWS */ + 200, 65, 87, 83, + /* TRAP */ + 84, 82, 65, 80, + /* *SWIN */ + 211, 87, 73, 78, + /* CLOW */ + 67, 76, 79, 87, + /* *JEST */ + 202, 69, 83, 84, + /* HELM */ + 72, 69, 76, 77, + /* *CRAS */ + 195, 82, 65, 83, + /* CANN */ + 67, 65, 78, 78, + /* LEVE */ + 76, 69, 86, 69, + /* CANV */ + 67, 65, 78, 86, + /* HOLE */ + 72, 79, 76, 69, + /* BAR */ + 66, 65, 82, 32, + /* *CROW */ + 195, 82, 79, 87, + /* LAYB */ + 76, 65, 89, 66, + /* STAN */ + 83, 84, 65, 78, + /* HATC */ + 72, 65, 84, 67, + /* BUTT */ + 66, 85, 84, 84, + /* FIEL */ + 70, 73, 69, 76, + /* OFF */ + 79, 70, 70, 32, + /* *YOU */ + 217, 79, 85, 32, + /* AROU */ + 65, 82, 79, 85, + /* *ROUN */ + 210, 79, 85, 78, + /* RING */ + 82, 73, 78, 71, + /* PENK */ + 80, 69, 78, 75, + /* *KNIF */ + 203, 78, 73, 70, + /* GAME */ + 71, 65, 77, 69, + /* ROAD */ + 82, 79, 65, 68, + /* CAN */ + 67, 65, 78, 32, + /* NOTE */ + 78, 79, 84, 69, + /* SIGN */ + 83, 73, 71, 78, + /* ANCH */ + 65, 78, 67, 72, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* FLAS */ + 70, 76, 65, 83, + 1, + /* FLAS */ + 70, 76, 65, 83, + 2, + /* SPAN */ + 83, 80, 65, 78, + 3, + /* FLAS */ + 70, 76, 65, 83, + 9, + /* HACK */ + 72, 65, 67, 75, + 10, + /* SHOV */ + 83, 72, 79, 86, + 11, + /* HAND */ + 72, 65, 78, 68, + 12, + /* WHIP */ + 87, 72, 73, 80, + 20, + /* FISH */ + 70, 73, 83, 72, + 22, + /* SNOR */ + 83, 78, 79, 82, + 32, + /* BLUE */ + 66, 76, 85, 69, + 40, + /* CABL */ + 67, 65, 66, 76, + 42, + /* BAR */ + 66, 65, 82, 32, + 43, + /* NOTE */ + 78, 79, 84, 69, + 50, + /* CAN */ + 67, 65, 78, 32, + 51, + /* CAN */ + 67, 65, 78, 32, + 52, + /* KEYS */ + 75, 69, 89, 83, + 58, + /* PENK */ + 80, 69, 78, 75, + 59, + /* NOTE */ + 78, 79, 84, 69, + 62, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst07.c b/Applications/games/myst07.c new file mode 100644 index 00000000..8d9fbc7e --- /dev/null +++ b/Applications/games/myst07.c @@ -0,0 +1,2862 @@ +#define NUM_OBJ 65 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 200; +const uint8_t lightfill = 200; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 54; +const uint8_t treasures = 10; +const uint8_t lastloc = 59; +const uint8_t startloc = 10; +const uint8_t loctxt_0[] = { +40, 99, 41, 32, 49, 57, 56, 50, 32, 66, 46, 72, 46, 0 }; +const uint8_t loctxt_1[] = { +75, 105, 116, 99, 104, 101, 110, 0 }; +const uint8_t loctxt_2[] = { +67, 97, 115, 116, 108, 101, 32, 67, 111, 117, 114, 116, 121, 97, 114, 100, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 103, 114, 97, 115, 115, 121, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 103, 114, 97, 115, 115, 121, 32, 112, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 77, 111, 117, 110, 116, 97, 105, 110, 115, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 77, 111, 117, 110, 116, 97, 105, 110, 115, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 77, 111, 117, 110, 116, 97, 105, 110, 115, 0 }; +const uint8_t loctxt_8[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 108, 105, 112, 32, 111, 102, 32, 97, 32, 67, 104, 97, 115, 109, 0 }; +const uint8_t loctxt_9[] = { +119, 97, 114, 109, 32, 67, 97, 118, 101, 0 }; +const uint8_t loctxt_10[] = { +42, 73, 32, 102, 101, 101, 108, 32, 97, 32, 115, 117, 114, 103, 101, 32, 111, 102, 32, 115, 116, 114, 97, 110, 103, 101, 32, 80, 111, 119, 101, 114, 0 }; +const uint8_t loctxt_11[] = { +118, 105, 101, 119, 105, 110, 103, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_12[] = { +119, 101, 97, 112, 111, 110, 115, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_13[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 65, 114, 101, 110, 97, 0 }; +const uint8_t loctxt_15[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_16[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_17[] = { +76, 105, 111, 110, 115, 32, 67, 97, 103, 101, 0 }; +const uint8_t loctxt_18[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_19[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 69, 109, 112, 101, 114, 111, 114, 39, 115, 32, 98, 111, 120, 0 }; +const uint8_t loctxt_20[] = { +71, 108, 97, 100, 105, 97, 116, 111, 114, 39, 115, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_21[] = { +42, 73, 32, 102, 101, 101, 108, 32, 97, 32, 115, 117, 114, 103, 101, 32, 111, 102, 32, 115, 116, 114, 97, 110, 103, 101, 32, 80, 111, 119, 101, 114, 0 }; +const uint8_t loctxt_22[] = { +115, 116, 111, 110, 101, 32, 72, 117, 116, 0 }; +const uint8_t loctxt_23[] = { +115, 116, 111, 110, 101, 45, 97, 103, 101, 32, 86, 105, 108, 108, 97, 103, 101, 0 }; +const uint8_t loctxt_24[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 71, 108, 97, 99, 105, 101, 114, 0 }; +const uint8_t loctxt_25[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 73, 99, 101, 45, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_26[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 112, 97, 116, 104, 0 }; +const uint8_t loctxt_27[] = { +115, 116, 111, 110, 101, 32, 67, 105, 114, 99, 108, 101, 0 }; +const uint8_t loctxt_28[] = { +115, 116, 114, 97, 119, 32, 72, 117, 116, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 32, 102, 101, 101, 108, 32, 97, 32, 115, 117, 114, 103, 101, 32, 111, 102, 32, 115, 116, 114, 97, 110, 103, 101, 32, 80, 111, 119, 101, 114, 0 }; +const uint8_t loctxt_30[] = { +77, 105, 110, 101, 32, 121, 97, 114, 100, 0 }; +const uint8_t loctxt_31[] = { +83, 116, 111, 114, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 80, 105, 116, 104, 101, 97, 100, 0 }; +const uint8_t loctxt_33[] = { +77, 105, 110, 101, 32, 99, 97, 103, 101, 0 }; +const uint8_t loctxt_34[] = { +77, 105, 110, 101, 32, 99, 97, 103, 101, 0 }; +const uint8_t loctxt_35[] = { +77, 105, 110, 101, 32, 99, 97, 103, 101, 0 }; +const uint8_t loctxt_36[] = { +77, 105, 110, 101, 32, 99, 97, 103, 101, 0 }; +const uint8_t loctxt_37[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 97, 98, 97, 110, 100, 111, 110, 101, 100, 32, 71, 97, 108, 108, 101, 114, 121, 0 }; +const uint8_t loctxt_38[] = { +80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_39[] = { +80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_40[] = { +80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_41[] = { +83, 116, 111, 114, 101, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_42[] = { +68, 105, 115, 112, 108, 97, 121, 32, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_43[] = { +114, 111, 99, 107, 121, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_44[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 67, 104, 97, 115, 109, 0 }; +const uint8_t loctxt_45[] = { +104, 111, 116, 32, 80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_46[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 68, 114, 97, 103, 111, 110, 39, 115, 32, 108, 97, 105, 114, 0 }; +const uint8_t loctxt_47[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_48[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_49[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_50[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_51[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_52[] = { +84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_53[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 105, 99, 101, 32, 84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_54[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 105, 99, 101, 32, 86, 97, 117, 108, 116, 0 }; +const uint8_t loctxt_55[] = { +42, 73, 39, 109, 32, 111, 110, 32, 115, 111, 109, 101, 32, 111, 108, 100, 32, 115, 116, 111, 110, 101, 32, 83, 116, 101, 112, 115, 0 }; +const uint8_t loctxt_56[] = { +114, 111, 99, 107, 32, 104, 101, 119, 110, 32, 84, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_57[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 114, 111, 99, 107, 32, 65, 108, 116, 97, 114, 0 }; +const uint8_t loctxt_58[] = { +42, 73, 39, 109, 32, 111, 110, 32, 109, 121, 32, 104, 111, 109, 101, 32, 80, 108, 97, 110, 101, 116, 0 }; +const uint8_t loctxt_59[] = { +42, 73, 32, 116, 104, 105, 110, 107, 32, 73, 32, 98, 108, 101, 119, 32, 105, 116, 32, 33, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 2, 0, 0, 0 } }, + { loctxt_2, { 3, 0, 10, 0, 0, 0 } }, + { loctxt_3, { 4, 2, 0, 0, 0, 0 } }, + { loctxt_4, { 7, 3, 6, 5, 0, 0 } }, + { loctxt_5, { 0, 0, 4, 0, 0, 0 } }, + { loctxt_6, { 0, 0, 0, 4, 0, 0 } }, + { loctxt_7, { 43, 4, 0, 0, 0, 0 } }, + { loctxt_8, { 0, 43, 0, 0, 0, 0 } }, + { loctxt_9, { 45, 0, 0, 44, 0, 0 } }, + { loctxt_10, { 0, 0, 11, 2, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 10, 0, 12 } }, + { loctxt_12, { 13, 0, 0, 0, 11, 0 } }, + { loctxt_13, { 14, 12, 16, 0, 0, 0 } }, + { loctxt_14, { 18, 13, 16, 15, 0, 0 } }, + { loctxt_15, { 0, 0, 14, 0, 0, 0 } }, + { loctxt_16, { 52, 13, 20, 14, 0, 0 } }, + { loctxt_17, { 0, 15, 0, 0, 0, 0 } }, + { loctxt_18, { 0, 14, 47, 0, 19, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 18 } }, + { loctxt_20, { 0, 0, 0, 16, 0, 0 } }, + { loctxt_21, { 50, 0, 22, 0, 0, 0 } }, + { loctxt_22, { 0, 0, 23, 21, 0, 0 } }, + { loctxt_23, { 24, 26, 28, 22, 0, 0 } }, + { loctxt_24, { 0, 23, 0, 0, 0, 0 } }, + { loctxt_25, { 0, 24, 0, 0, 0, 0 } }, + { loctxt_26, { 23, 27, 29, 0, 0, 0 } }, + { loctxt_27, { 26, 0, 0, 0, 0, 0 } }, + { loctxt_28, { 0, 0, 0, 23, 0, 0 } }, + { loctxt_29, { 0, 0, 30, 26, 0, 0 } }, + { loctxt_30, { 0, 31, 32, 29, 0, 0 } }, + { loctxt_31, { 30, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 33, 0, 0, 30, 0, 0 } }, + { loctxt_33, { 0, 32, 0, 0, 0, 0 } }, + { loctxt_34, { 0, 0, 38, 0, 0, 0 } }, + { loctxt_35, { 0, 0, 39, 0, 0, 0 } }, + { loctxt_36, { 0, 0, 40, 0, 0, 0 } }, + { loctxt_37, { 0, 38, 0, 0, 0, 0 } }, + { loctxt_38, { 37, 0, 0, 34, 0, 0 } }, + { loctxt_39, { 0, 0, 0, 35, 0, 0 } }, + { loctxt_40, { 0, 0, 42, 36, 0, 0 } }, + { loctxt_41, { 0, 0, 0, 39, 0, 0 } }, + { loctxt_42, { 0, 0, 0, 40, 0, 0 } }, + { loctxt_43, { 8, 7, 0, 0, 0, 0 } }, + { loctxt_44, { 9, 0, 0, 0, 0, 0 } }, + { loctxt_45, { 0, 9, 46, 0, 0, 0 } }, + { loctxt_46, { 0, 45, 0, 0, 0, 0 } }, + { loctxt_47, { 47, 47, 48, 18, 0, 0 } }, + { loctxt_48, { 48, 51, 49, 47, 0, 0 } }, + { loctxt_49, { 49, 50, 49, 48, 0, 0 } }, + { loctxt_50, { 49, 21, 50, 51, 0, 0 } }, + { loctxt_51, { 48, 51, 50, 52, 0, 0 } }, + { loctxt_52, { 52, 16, 51, 52, 0, 0 } }, + { loctxt_53, { 0, 25, 0, 54, 0, 0 } }, + { loctxt_54, { 0, 0, 53, 0, 0, 0 } }, + { loctxt_55, { 0, 0, 0, 0, 27, 56 } }, + { loctxt_56, { 0, 0, 0, 57, 55, 0 } }, + { loctxt_57, { 0, 0, 56, 0, 0, 0 } }, + { loctxt_58, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_59, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 1, + 2, + 2, + 3, + 0, + 5, + 0, + 6, + 0, + 7, + 8, + 0, + 9, + 0, + 11, + 12, + 13, + 14, + 15, + 17, + 0, + 0, + 0, + 19, + 19, + 0, + 20, + 28, + 31, + 33, + 34, + 35, + 36, + 37, + 41, + 42, + 0, + 42, + 0, + 48, + 0, + 0, + 46, + 17, + 0, + 54, + 0, + 0, + 0, + 57, + 24, + 0, + 39, + 0, + 44, + 0, + 0, + 0, + 57, + 10, + 21, + 29, + 23, + 0, + 58, +}; + + +const uint8_t objtxt_0[] = { +32, 0 }; +const uint8_t objtxt_1[] = { +83, 109, 97, 108, 108, 32, 67, 97, 110, 0 }; +const uint8_t objtxt_2[] = { +71, 108, 111, 119, 105, 110, 103, 32, 66, 114, 97, 122, 105, 101, 114, 0 }; +const uint8_t objtxt_3[] = { +83, 116, 117, 100, 100, 101, 100, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_4[] = { +82, 111, 99, 107, 115, 0 }; +const uint8_t objtxt_5[] = { +42, 79, 114, 110, 97, 116, 101, 32, 68, 97, 103, 103, 101, 114, 42, 0 }; +const uint8_t objtxt_6[] = { +67, 114, 101, 118, 105, 99, 101, 0 }; +const uint8_t objtxt_7[] = { +70, 108, 105, 110, 116, 0 }; +const uint8_t objtxt_8[] = { +83, 99, 114, 101, 101, 0 }; +const uint8_t objtxt_9[] = { +76, 73, 84, 32, 108, 97, 109, 112, 0 }; +const uint8_t objtxt_10[] = { +80, 97, 116, 104, 0 }; +const uint8_t objtxt_11[] = { +67, 104, 97, 114, 114, 101, 100, 32, 84, 114, 101, 101, 0 }; +const uint8_t objtxt_12[] = { +77, 101, 116, 97, 108, 32, 98, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_13[] = { +66, 108, 97, 99, 107, 101, 110, 101, 100, 32, 83, 107, 101, 108, 101, 116, 111, 110, 0 }; +const uint8_t objtxt_14[] = { +42, 71, 111, 108, 100, 32, 65, 109, 117, 108, 101, 116, 42, 0 }; +const uint8_t objtxt_15[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_16[] = { +83, 104, 111, 114, 116, 32, 83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_17[] = { +42, 76, 97, 114, 103, 101, 32, 82, 117, 98, 121, 42, 0 }; +const uint8_t objtxt_18[] = { +70, 101, 114, 111, 99, 105, 111, 117, 115, 32, 76, 105, 111, 110, 0 }; +const uint8_t objtxt_19[] = { +87, 111, 111, 100, 101, 110, 32, 71, 114, 105, 108, 108, 0 }; +const uint8_t objtxt_20[] = { +76, 105, 111, 110, 115, 0 }; +const uint8_t objtxt_21[] = { +73, 114, 111, 110, 32, 107, 101, 121, 0 }; +const uint8_t objtxt_22[] = { +42, 66, 111, 120, 32, 111, 102, 32, 69, 109, 101, 114, 97, 108, 100, 115, 42, 0 }; +const uint8_t objtxt_23[] = { +42, 83, 105, 108, 118, 101, 114, 32, 67, 104, 97, 108, 105, 99, 101, 42, 0 }; +const uint8_t objtxt_24[] = { +84, 104, 101, 32, 69, 109, 112, 101, 114, 111, 114, 0 }; +const uint8_t objtxt_25[] = { +73, 109, 112, 101, 114, 105, 97, 108, 32, 71, 117, 97, 114, 100, 115, 0 }; +const uint8_t objtxt_26[] = { +42, 73, 120, 105, 111, 110, 32, 83, 104, 105, 101, 108, 100, 42, 0 }; +const uint8_t objtxt_27[] = { +76, 101, 97, 116, 104, 101, 114, 32, 83, 104, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_28[] = { +80, 108, 97, 105, 116, 101, 100, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_29[] = { +82, 117, 115, 116, 121, 32, 76, 97, 109, 112, 0 }; +const uint8_t objtxt_30[] = { +78, 117, 109, 98, 101, 114, 101, 100, 32, 98, 117, 116, 116, 111, 110, 115, 0 }; +const uint8_t objtxt_31[] = { +78, 117, 109, 98, 101, 114, 101, 100, 32, 98, 117, 116, 116, 111, 110, 115, 0 }; +const uint8_t objtxt_32[] = { +78, 117, 109, 98, 101, 114, 101, 100, 32, 98, 117, 116, 116, 111, 110, 115, 0 }; +const uint8_t objtxt_33[] = { +78, 117, 109, 98, 101, 114, 101, 100, 32, 98, 117, 116, 116, 111, 110, 115, 0 }; +const uint8_t objtxt_34[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_35[] = { +42, 69, 98, 111, 110, 121, 32, 83, 112, 101, 97, 114, 42, 0 }; +const uint8_t objtxt_36[] = { +71, 117, 97, 114, 100, 0 }; +const uint8_t objtxt_37[] = { +42, 67, 114, 121, 115, 116, 97, 108, 32, 83, 99, 105, 109, 105, 116, 97, 114, 42, 0 }; +const uint8_t objtxt_38[] = { +68, 105, 115, 112, 108, 97, 121, 32, 67, 97, 98, 105, 110, 101, 116, 0 }; +const uint8_t objtxt_39[] = { +42, 82, 101, 100, 32, 68, 105, 97, 109, 111, 110, 100, 42, 0 }; +const uint8_t objtxt_40[] = { +71, 108, 97, 100, 105, 97, 116, 111, 114, 0 }; +const uint8_t objtxt_41[] = { +69, 109, 112, 116, 121, 32, 67, 97, 110, 0 }; +const uint8_t objtxt_42[] = { +67, 108, 111, 116, 104, 32, 115, 116, 114, 105, 112, 0 }; +const uint8_t objtxt_43[] = { +70, 105, 114, 101, 45, 98, 114, 101, 97, 116, 104, 105, 110, 103, 32, 68, 114, 97, 103, 111, 110, 0 }; +const uint8_t objtxt_44[] = { +42, 73, 118, 111, 114, 121, 32, 83, 116, 97, 116, 117, 101, 116, 116, 101, 42, 0 }; +const uint8_t objtxt_45[] = { +82, 117, 115, 116, 121, 32, 76, 97, 109, 112, 0 }; +const uint8_t objtxt_46[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_47[] = { +71, 97, 117, 110, 116, 108, 101, 116, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_48[] = { +83, 116, 111, 110, 101, 32, 83, 108, 97, 98, 0 }; +const uint8_t objtxt_49[] = { +83, 116, 111, 110, 101, 32, 83, 116, 101, 112, 115, 0 }; +const uint8_t objtxt_50[] = { +71, 97, 117, 110, 116, 108, 101, 116, 115, 0 }; +const uint8_t objtxt_51[] = { +73, 99, 101, 32, 67, 97, 118, 101, 0 }; +const uint8_t objtxt_52[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_53[] = { +68, 111, 111, 114, 0 }; +const uint8_t objtxt_54[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_55[] = { +68, 97, 110, 103, 108, 105, 110, 103, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_56[] = { +84, 105, 101, 100, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_57[] = { +66, 108, 97, 99, 107, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_58[] = { +73, 99, 101, 32, 84, 117, 110, 110, 101, 108, 0 }; +const uint8_t objtxt_59[] = { +83, 116, 111, 110, 101, 32, 65, 108, 116, 97, 114, 0 }; +const uint8_t objtxt_60[] = { +86, 97, 103, 117, 101, 32, 83, 104, 97, 112, 101, 115, 0 }; +const uint8_t objtxt_61[] = { +86, 97, 103, 117, 101, 32, 83, 104, 97, 112, 101, 115, 0 }; +const uint8_t objtxt_62[] = { +86, 97, 103, 117, 101, 32, 83, 104, 97, 112, 101, 115, 0 }; +const uint8_t objtxt_63[] = { +72, 117, 116, 115, 0 }; +const uint8_t objtxt_64[] = { +80, 111, 111, 108, 32, 111, 102, 32, 79, 105, 108, 0 }; +const uint8_t objtxt_65[] = { +67, 104, 101, 101, 114, 105, 110, 103, 32, 67, 114, 111, 119, 100, 115, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, +}; +const uint8_t msgtxt_0[] = { +32, 0 }; +const uint8_t msgtxt_1[] = { +32, 0 }; +const uint8_t msgtxt_2[] = { +70, 69, 65, 83, 73, 66, 73, 76, 73, 84, 89, 32, 69, 88, 80, 69, 82, 73, 77, 69, 78, 84, 0 }; +const uint8_t msgtxt_3[] = { +66, 121, 32, 66, 46, 72, 111, 119, 97, 114, 116, 104, 32, 38, 32, 87, 46, 66, 97, 114, 110, 101, 115, 0 }; +const uint8_t msgtxt_4[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_5[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 115, 101, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_7[] = { +84, 114, 121, 32, 69, 88, 65, 77, 105, 110, 105, 110, 103, 32, 116, 104, 105, 110, 103, 115, 33, 0 }; +const uint8_t msgtxt_8[] = { +72, 111, 119, 63, 0 }; +const uint8_t msgtxt_9[] = { +84, 111, 32, 119, 104, 101, 114, 101, 63, 0 }; +const uint8_t msgtxt_10[] = { +65, 116, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_11[] = { +40, 85, 115, 101, 32, 50, 32, 119, 111, 114, 100, 115, 41, 0 }; +const uint8_t msgtxt_12[] = { +85, 115, 101, 32, 97, 32, 78, 85, 77, 66, 69, 82, 0 }; +const uint8_t msgtxt_13[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_14[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_15[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_16[] = { +73, 116, 39, 115, 32, 108, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_17[] = { +73, 116, 39, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t msgtxt_18[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_19[] = { +83, 97, 121, 115, 59, 0 }; +const uint8_t msgtxt_20[] = { +42, 84, 82, 69, 65, 83, 85, 82, 69, 42, 32, 83, 116, 111, 114, 101, 0 }; +const uint8_t msgtxt_21[] = { +65, 32, 115, 111, 102, 116, 32, 118, 111, 105, 99, 101, 32, 119, 104, 105, 115, 112, 101, 114, 115, 32, 45, 0 }; +const uint8_t msgtxt_22[] = { +85, 108, 116, 105, 109, 97, 116, 101, 32, 87, 97, 114, 114, 105, 111, 114, 44, 32, 0 }; +const uint8_t msgtxt_23[] = { +71, 97, 116, 104, 101, 114, 32, 116, 104, 101, 32, 42, 84, 114, 101, 97, 115, 117, 114, 101, 115, 42, 32, 111, 102, 32, 111, 117, 114, 0 }; +const uint8_t msgtxt_24[] = { +65, 110, 99, 105, 101, 110, 116, 32, 67, 117, 108, 116, 117, 114, 101, 32, 111, 114, 32, 119, 101, 32, 97, 114, 101, 32, 68, 79, 79, 77, 69, 68, 33, 0 }; +const uint8_t msgtxt_25[] = { +80, 104, 101, 119, 32, 33, 32, 72, 101, 97, 118, 121, 33, 0 }; +const uint8_t msgtxt_26[] = { +73, 116, 32, 108, 111, 111, 107, 115, 32, 109, 101, 99, 104, 97, 110, 105, 99, 97, 108, 0 }; +const uint8_t msgtxt_27[] = { +73, 116, 39, 115, 32, 118, 97, 110, 105, 115, 104, 101, 100, 33, 0 }; +const uint8_t msgtxt_28[] = { +105, 115, 32, 117, 115, 101, 108, 101, 115, 115, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_29[] = { +84, 104, 101, 32, 105, 99, 101, 32, 105, 115, 32, 109, 101, 108, 116, 105, 110, 103, 0 }; +const uint8_t msgtxt_30[] = { +49, 44, 50, 44, 51, 44, 52, 32, 97, 110, 100, 32, 53, 0 }; +const uint8_t msgtxt_31[] = { +73, 39, 109, 32, 98, 97, 100, 108, 121, 32, 98, 117, 114, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_32[] = { +32, 0 }; +const uint8_t msgtxt_33[] = { +32, 0 }; +const uint8_t msgtxt_34[] = { +84, 104, 101, 32, 82, 111, 112, 101, 32, 104, 97, 110, 103, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 101, 100, 103, 101, 0 }; +const uint8_t msgtxt_35[] = { +84, 104, 101, 32, 114, 111, 112, 101, 32, 105, 115, 32, 116, 105, 101, 100, 33, 0 }; +const uint8_t msgtxt_36[] = { +73, 32, 99, 97, 117, 115, 101, 100, 32, 97, 110, 32, 97, 118, 97, 108, 97, 110, 99, 104, 101, 33, 0 }; +const uint8_t msgtxt_37[] = { +65, 114, 101, 110, 39, 116, 32, 121, 111, 117, 32, 116, 104, 101, 32, 115, 116, 114, 97, 110, 103, 101, 32, 111, 110, 101, 32, 33, 0 }; +const uint8_t msgtxt_38[] = { +76, 105, 111, 110, 115, 32, 105, 103, 110, 111, 114, 101, 32, 109, 101, 32, 102, 111, 114, 32, 116, 104, 101, 32, 109, 111, 109, 101, 110, 116, 0 }; +const uint8_t msgtxt_39[] = { +84, 104, 105, 115, 32, 105, 115, 32, 110, 101, 105, 116, 104, 101, 114, 32, 116, 104, 101, 32, 116, 105, 109, 101, 32, 110, 111, 114, 32, 112, 108, 97, 99, 101, 0 }; +const uint8_t msgtxt_40[] = { +84, 104, 101, 32, 73, 109, 112, 101, 114, 105, 97, 108, 32, 71, 117, 97, 114, 100, 32, 97, 116, 116, 97, 99, 107, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_41[] = { +84, 104, 101, 32, 69, 109, 112, 101, 114, 111, 114, 32, 112, 114, 97, 105, 115, 101, 115, 32, 109, 121, 32, 99, 111, 117, 114, 97, 103, 101, 0 }; +const uint8_t msgtxt_42[] = { +72, 101, 39, 115, 32, 103, 105, 118, 101, 110, 32, 109, 101, 32, 97, 32, 112, 114, 105, 122, 101, 33, 0 }; +const uint8_t msgtxt_43[] = { +66, 82, 73, 76, 76, 73, 65, 78, 84, 33, 32, 87, 101, 32, 97, 114, 101, 32, 83, 65, 86, 69, 68, 33, 0 }; +const uint8_t msgtxt_44[] = { +77, 105, 110, 101, 32, 99, 97, 103, 101, 32, 112, 108, 117, 110, 103, 101, 115, 32, 100, 111, 119, 110, 32, 116, 104, 101, 32, 115, 104, 97, 102, 116, 33, 0 }; +const uint8_t msgtxt_45[] = { +65, 97, 114, 114, 103, 103, 103, 103, 104, 32, 33, 33, 0 }; +const uint8_t msgtxt_46[] = { +76, 105, 111, 110, 115, 32, 114, 117, 115, 104, 32, 111, 117, 116, 32, 97, 110, 100, 32, 109, 97, 117, 108, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +97, 32, 112, 114, 105, 100, 101, 32, 111, 102, 32, 76, 105, 111, 110, 115, 0 }; +const uint8_t msgtxt_48[] = { +32, 0 }; +const uint8_t msgtxt_49[] = { +71, 108, 97, 100, 105, 97, 116, 111, 114, 32, 116, 104, 114, 111, 119, 115, 32, 109, 101, 32, 100, 111, 119, 110, 32, 97, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t msgtxt_50[] = { +105, 116, 32, 104, 97, 115, 32, 111, 105, 108, 32, 105, 110, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_51[] = { +71, 117, 97, 114, 100, 32, 112, 114, 101, 118, 101, 110, 116, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_52[] = { +76, 105, 111, 110, 32, 114, 105, 112, 115, 32, 109, 101, 32, 97, 112, 97, 114, 116, 33, 0 }; +const uint8_t msgtxt_53[] = { +70, 105, 101, 114, 121, 32, 98, 114, 101, 97, 116, 104, 32, 119, 97, 115, 104, 101, 115, 32, 111, 118, 101, 114, 32, 109, 101, 0 }; +const uint8_t msgtxt_54[] = { +76, 97, 110, 103, 117, 97, 103, 101, 0 }; +const uint8_t msgtxt_55[] = { +76, 111, 111, 107, 115, 32, 118, 97, 108, 117, 97, 98, 108, 101, 0 }; +const uint8_t msgtxt_56[] = { +105, 116, 39, 115, 32, 118, 101, 114, 121, 32, 104, 111, 116, 0 }; +const uint8_t msgtxt_57[] = { +73, 116, 39, 115, 32, 101, 110, 103, 114, 97, 118, 101, 100, 32, 83, 84, 82, 73, 75, 69, 32, 72, 69, 82, 69, 0 }; +const uint8_t msgtxt_58[] = { +72, 85, 82, 82, 89, 45, 68, 79, 32, 78, 79, 84, 32, 70, 65, 73, 76, 33, 0 }; +const uint8_t msgtxt_59[] = { +65, 77, 46, 46, 46, 84, 32, 46, 78, 46, 32, 46, 73, 65, 46, 46, 46, 68, 0 }; +const uint8_t msgtxt_60[] = { +97, 32, 119, 111, 114, 110, 32, 105, 110, 115, 99, 114, 105, 112, 116, 105, 111, 110, 0 }; +const uint8_t msgtxt_61[] = { +105, 116, 115, 32, 119, 105, 99, 107, 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 0 }; +const uint8_t msgtxt_62[] = { +87, 104, 121, 63, 0 }; +const uint8_t msgtxt_63[] = { +105, 116, 32, 115, 116, 114, 105, 107, 101, 115, 32, 115, 112, 97, 114, 107, 115, 0 }; +const uint8_t msgtxt_64[] = { +73, 116, 39, 115, 32, 76, 101, 97, 116, 104, 101, 114, 0 }; +const uint8_t msgtxt_65[] = { +105, 116, 39, 115, 32, 98, 117, 114, 110, 116, 32, 97, 116, 32, 111, 110, 101, 32, 101, 110, 100, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 167, + 9, 0, + 1, 2, 3, 73, +/* AUTO 0 */ + 195, + 21, 22, 23, 73, +/* AUTO 0 */ + 193, + 24, 73, +/* AUTO 0 */ + 207, + 0, 1, 0, 30, 0, 1, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 2, 0, 3, 0, 2, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 3, 0, 4, 0, 3, + 81, 79, 81, 67, +/* AUTO 100 */ + 170, + 4, 17, 0, 2, + 81, 77, 73, +/* AUTO 0 */ + 198, + 19, 0, + 45, 102, 61, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 */ + 170, + 1, 2, 6, 47, + 31, 61, 63, +/* AUTO 100 */ + 180, + 4, 54, 2, 5, 2, 14, 2, 17, 0, 20, + 58, +/* AUTO 100 */ + 180, + 4, 54, 2, 26, 2, 41, 2, 37, 0, 21, + 58, +/* AUTO 100 */ + 180, + 4, 54, 2, 39, 2, 44, 2, 22, 0, 22, + 58, +/* AUTO 100 */ + 172, + 4, 54, 2, 23, 0, 23, + 58, +/* AUTO 100 */ + 183, + 8, 20, 8, 21, 8, 22, 8, 23, 0, 58, + 54, 64, 43, 63, +/* AUTO 100 */ + 169, + 7, 39, 8, 15, + 57, 64, +/* AUTO 100 */ + 169, + 7, 40, 8, 15, + 57, 64, +/* AUTO 100 */ + 169, + 4, 41, 9, 15, + 56, 64, +/* AUTO 100 */ + 169, + 4, 42, 9, 15, + 56, 64, +/* AUTO 100 */ + 169, + 4, 39, 9, 15, + 56, 64, +/* AUTO 100 */ + 169, + 4, 40, 9, 15, + 56, 64, +/* AUTO 100 */ + 166, + 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 207, + 19, 0, 0, 30, 0, 1, + 21, 108, 79, 81, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 */ + 171, + 2, 18, 6, 27, + 102, 88, 61, 63, +/* AUTO 100 */ + 170, + 2, 43, 0, 3, + 81, 77, 73, +/* AUTO 0 */ + 198, + 19, 0, + 103, 31, 61, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* AUTO 100 */ + 164, + 4, 59, + 63, +}; +const uint8_t actions[] = { +/* INVE ANY */ + 0, 3, 0, + 66, +/* PUSH 1 */ + 4, 48, 43, + 4, 33, + 15, +/* PUSH 1 */ + 9, 48, 43, + 4, 34, 0, 33, + 54, 14, +/* PUSH 1 */ + 9, 48, 43, + 4, 35, 0, 33, + 54, 14, +/* PUSH 1 */ + 9, 48, 43, + 4, 36, 0, 33, + 54, 14, +/* PUSH 2 */ + 9, 48, 44, + 4, 33, 0, 34, + 54, 14, +/* PUSH 2 */ + 4, 48, 44, + 4, 34, + 15, +/* PUSH 2 */ + 9, 48, 44, + 4, 35, 0, 34, + 54, 14, +/* PUSH 2 */ + 9, 48, 44, + 4, 36, 0, 34, + 54, 14, +/* PUSH 3 */ + 6, 48, 45, + 4, 33, + 45, 44, 61, +/* PUSH 3 */ + 6, 48, 45, + 4, 34, + 45, 44, 61, +/* PUSH 3 */ + 6, 48, 45, + 4, 35, + 45, 44, 61, +/* PUSH 3 */ + 6, 48, 45, + 4, 36, + 45, 44, 61, +/* PUSH 4 */ + 9, 48, 46, + 4, 33, 0, 36, + 54, 14, +/* PUSH 4 */ + 9, 48, 46, + 4, 34, 0, 36, + 54, 14, +/* PUSH 4 */ + 9, 48, 46, + 4, 35, 0, 36, + 54, 14, +/* PUSH 4 */ + 4, 48, 46, + 4, 36, + 15, +/* PUSH 5 */ + 9, 48, 69, + 4, 33, 0, 35, + 54, 14, +/* PUSH 5 */ + 9, 48, 69, + 4, 34, 0, 35, + 54, 14, +/* PUSH 5 */ + 4, 48, 69, + 4, 35, + 15, +/* PUSH 5 */ + 9, 48, 69, + 4, 36, 0, 35, + 54, 14, +/* PUSH BUTT */ + 0, 48, 42, + 12, +/* EXAM BUTT */ + 5, 14, 42, + 4, 33, + 19, 30, +/* EXAM BUTT */ + 5, 14, 42, + 4, 34, + 19, 30, +/* EXAM BUTT */ + 5, 14, 42, + 4, 35, + 19, 30, +/* EXAM BUTT */ + 5, 14, 42, + 4, 36, + 19, 30, +/* GET ROPE */ + 9, 10, 40, + 2, 28, 0, 28, + 52, 4, +/* GET ROPE */ + 14, 10, 40, + 2, 56, 0, 28, 0, 56, + 52, 55, 4, +/* GET ROPE */ + 4, 10, 40, + 2, 55, + 35, +/* DROP ROPE */ + 9, 18, 40, + 1, 28, 0, 28, + 53, 4, +/* TIE ROPE */ + 5, 51, 40, + 1, 28, + 9, 11, +/* TO TREE */ + 23, 22, 17, + 1, 28, 4, 8, 0, 28, 0, 56, 0, 28, + 53, 72, 4, 34, +/* CLIM ROPE */ + 9, 52, 40, + 2, 56, 0, 44, + 54, 4, +/* CLIM ROPE */ + 9, 52, 40, + 2, 55, 0, 8, + 54, 4, +/* DIG ANY */ + 0, 13, 0, + 8, +/* USE SHOV */ + 22, 41, 47, + 1, 34, 4, 27, 14, 48, 0, 48, 0, 27, + 62, 4, 6, +/* MOVE SLAB */ + 19, 50, 66, + 2, 48, 14, 49, 0, 49, 0, 27, + 62, 4, 25, 6, +/* USE SHOV */ + 22, 41, 47, + 4, 4, 1, 34, 14, 22, 0, 22, 0, 4, + 62, 4, 6, +/* USE SHOV */ + 16, 41, 47, + 4, 4, 13, 22, 1, 34, 14, 21, + 73, +/* AUTO 0 */ + 202, + 0, 21, 0, 4, + 62, 4, 6, +/* USE SHOV */ + 17, 41, 47, + 4, 48, 1, 34, 2, 40, 0, 16, + 54, 49, +/* USE SHOV */ + 16, 41, 47, + 4, 48, 1, 34, 5, 40, 14, 57, + 73, +/* AUTO 0 */ + 202, + 0, 57, 0, 48, + 62, 4, 6, +/* GO STEP */ + 9, 1, 73, + 2, 49, 0, 55, + 54, 4, +/* WEAR GAUN */ + 13, 55, 72, + 1, 50, 0, 50, 0, 47, + 72, 4, +/* GET GAUN */ + 9, 10, 72, + 2, 50, 0, 50, + 52, 4, +/* DROP GAUN */ + 9, 18, 72, + 1, 50, 0, 50, + 53, 4, +/* DROP GAUN */ + 18, 18, 72, + 1, 47, 0, 47, 0, 50, 0, 50, + 72, 53, 4, +/* GO CAVE */ + 9, 1, 75, + 2, 51, 0, 25, + 54, 4, +/* WAIT ANY */ + 15, 7, 0, + 4, 25, 2, 2, 14, 58, + 4, 88, 88, 73, +/* AUTO 0 */ + 202, + 0, 58, 0, 25, + 62, 29, 6, +/* WAIT ANY */ + 23, 7, 0, + 4, 53, 2, 2, 14, 42, 0, 42, 0, 53, + 62, 4, 29, 6, +/* GET BRAZ */ + 13, 10, 8, + 2, 2, 1, 47, 0, 2, + 52, 4, +/* GET BRAZ */ + 10, 10, 8, + 2, 2, 6, 47, + 4, 31, 61, +/* DROP BRAZ */ + 9, 18, 8, + 1, 2, 0, 2, + 53, 4, +/* GO TUNN */ + 9, 1, 76, + 2, 58, 0, 53, + 54, 4, +/* OPEN DOOR */ + 21, 28, 9, + 2, 3, 1, 21, 14, 52, 0, 3, 0, 52, + 72, 4, +/* OPEN DOOR */ + 21, 28, 9, + 2, 53, 1, 57, 14, 54, 0, 53, 0, 54, + 72, 4, +/* CLOS DOOR */ + 0, 30, 9, + 8, +/* READ SIGN */ + 6, 17, 77, + 2, 46, + 4, 19, 20, +/* EXAM SKEL */ + 18, 14, 19, + 2, 13, 14, 14, 0, 14, 0, 9, + 62, 4, 6, +/* EXAM CREV */ + 18, 14, 12, + 2, 6, 14, 7, 0, 7, 0, 5, + 62, 4, 6, +/* EXAM SCRE */ + 6, 14, 14, + 2, 8, + 4, 36, 61, +/* EXAM ROCK */ + 18, 14, 10, + 2, 4, 14, 5, 0, 5, 0, 3, + 62, 4, 6, +/* EXAM TREE */ + 18, 14, 17, + 2, 11, 14, 12, 0, 12, 0, 8, + 62, 4, 6, +/* EXAM CAN */ + 6, 14, 7, + 1, 1, + 4, 13, 50, +/* EMPT CAN */ + 23, 34, 7, + 1, 1, 0, 1, 0, 41, 0, 64, 0, 64, + 4, 72, 74, 53, +/* FIX LAMP */ + 22, 39, 15, + 1, 29, 1, 42, 0, 29, 0, 45, 0, 42, + 72, 55, 4, +/* FILL LAMP */ + 18, 44, 15, + 1, 45, 1, 1, 0, 1, 0, 41, + 72, 4, 73, +/* AUTO 0 */ + 196, + 0, 7, + 58, +/* LIGH LAMP */ + 16, 23, 15, + 1, 45, 8, 7, 1, 7, 1, 12, + 73, +/* AUTO 0 */ + 201, + 0, 45, 0, 9, + 72, 4, +/* UNLI LAMP */ + 13, 24, 15, + 1, 9, 0, 9, 0, 45, + 72, 4, +/* KILL GUAR */ + 14, 26, 35, + 2, 36, 1, 5, 0, 36, + 55, 4, 27, +/* EXAM CABI */ + 8, 14, 53, + 2, 38, 2, 36, + 51, +/* EXAM CABI */ + 22, 14, 53, + 2, 38, 14, 36, 14, 39, 0, 39, 0, 42, + 62, 4, 6, +/* PRAY ANY */ + 16, 43, 0, + 4, 57, 14, 37, 1, 14, 1, 39, + 73, +/* AUTO 0 */ + 202, + 0, 37, 0, 57, + 62, 4, 6, +/* EXAM EMPE */ + 9, 14, 33, + 2, 24, 13, 18, + 40, 61, +/* EXAM EMPE */ + 23, 14, 33, + 2, 24, 14, 18, 14, 26, 0, 26, 0, 19, + 62, 4, 41, 42, +/* KILL LION */ + 18, 26, 25, + 2, 18, 1, 27, 1, 37, 0, 18, + 55, 4, 27, +/* KILL GLAD */ + 14, 26, 57, + 2, 40, 1, 16, 0, 40, + 55, 4, 27, +/* KILL SELF */ + 1, 26, 70, + 4, 61, +/* KILL DRAG */ + 22, 26, 61, + 2, 43, 1, 26, 1, 35, 0, 43, 0, 23, + 72, 4, 27, +/* WAIT ANY */ + 3, 7, 0, + 18, 88, 88, 15, +/* HELP ANY */ + 0, 6, 0, + 7, +/* QUIT ANY */ + 1, 4, 0, + 4, 63, +/* SAVE ANY */ + 1, 8, 0, + 4, 71, +/* SCOR ANY */ + 1, 5, 0, + 4, 65, +/* FUCK ANY */ + 1, 45, 0, + 13, 104, +/* RAPE ANY */ + 0, 47, 0, + 37, +/* LOOK ANY */ + 1, 54, 0, + 4, 5, +/* EXAM BRAZ */ + 5, 14, 8, + 3, 2, + 13, 106, +/* EXAM DOOR */ + 5, 14, 9, + 2, 3, + 4, 16, +/* EXAM DOOR */ + 5, 14, 9, + 2, 52, + 4, 17, +/* EXAM DAGG */ + 4, 14, 11, + 3, 5, + 105, +/* EXAM WIND */ + 6, 14, 21, + 2, 15, + 4, 13, 47, +/* EXAM GRIL */ + 6, 14, 26, + 2, 19, + 4, 13, 47, +/* OPEN GRIL */ + 7, 28, 26, + 2, 19, + 4, 45, 46, 61, +/* EXAM DOOR */ + 5, 14, 9, + 2, 53, + 4, 16, +/* GO DOOR */ + 9, 1, 9, + 2, 52, 0, 1, + 54, 4, +/* USE ANY */ + 1, 41, 0, + 84, 28, +/* SAY ANY */ + 1, 25, 0, + 4, 85, +/* EXAM DOOR */ + 5, 14, 9, + 2, 54, + 4, 17, +/* EXAM ALTA */ + 5, 14, 78, + 4, 57, + 13, 110, +/* READ INSC */ + 5, 17, 79, + 4, 57, + 19, 109, +/* EXAM BLOC */ + 5, 14, 18, + 1, 12, + 13, 107, +/* EXAM LAMP */ + 5, 14, 15, + 1, 29, + 13, 111, +/* GO DOOR */ + 9, 1, 9, + 2, 54, 0, 41, + 54, 4, +/* GO WIND */ + 10, 1, 21, + 2, 15, 0, 17, + 54, 4, 38, +/* EXAM FLIN */ + 5, 14, 13, + 1, 7, + 13, 113, +/* EXAM AMUL */ + 4, 14, 20, + 1, 14, + 105, +/* EXAM RUBY */ + 4, 14, 24, + 1, 17, + 105, +/* EXAM LION */ + 4, 14, 25, + 2, 18, + 26, +/* EXAM EMER */ + 4, 14, 29, + 1, 22, + 105, +/* EXAM CHAL */ + 4, 14, 31, + 1, 23, + 105, +/* EXAM GUAR */ + 4, 14, 35, + 2, 36, + 26, +/* EXAM IXIO */ + 4, 14, 36, + 1, 26, + 105, +/* EXAM LEAT */ + 5, 14, 38, + 1, 27, + 13, 114, +/* EXAM SPEA */ + 4, 14, 49, + 1, 35, + 105, +/* EXAM CRYS */ + 4, 14, 51, + 1, 37, + 105, +/* EXAM RED */ + 4, 14, 55, + 1, 39, + 105, +/* EXAM GLAD */ + 4, 14, 57, + 2, 40, + 26, +/* EXAM CLOT */ + 5, 14, 58, + 1, 42, + 13, 115, +/* EXAM DRAG */ + 4, 14, 61, + 2, 43, + 26, +/* EXAM STAT */ + 4, 14, 62, + 1, 44, + 105, +/* EXAM ANY */ + 0, 14, 0, + 5, +/* GO ANY */ + 0, 1, 0, + 9, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* INVE */ + 73, 78, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* SCOR */ + 83, 67, 79, 82, + /* HELP */ + 72, 69, 76, 80, + /* WAIT */ + 87, 65, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* AWB */ + 65, 87, 66, 32, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* DIG */ + 68, 73, 71, 32, + /* EXAM */ + 69, 88, 65, 77, + /* *SEAR */ + 211, 69, 65, 82, + /* *INSP */ + 201, 78, 83, 80, + /* READ */ + 82, 69, 65, 68, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DUMP */ + 196, 85, 77, 80, + /* AT */ + 65, 84, 32, 32, + /* TO */ + 84, 79, 32, 32, + /* LIGH */ + 76, 73, 71, 72, + /* UNLI */ + 85, 78, 76, 73, + /* SAY */ + 83, 65, 89, 32, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* CLOS */ + 67, 76, 79, 83, + /* *LOCK */ + 204, 79, 67, 75, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* EMPT */ + 69, 77, 80, 84, + /* *POUR */ + 208, 79, 85, 82, + /* EAT */ + 69, 65, 84, 32, + /* MAKE */ + 77, 65, 75, 69, + /* *BUIL */ + 194, 85, 73, 76, + /* FIX */ + 70, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* USE */ + 85, 83, 69, 32, + /* *WITH */ + 215, 73, 84, 72, + /* PRAY */ + 80, 82, 65, 89, + /* FILL */ + 70, 73, 76, 76, + /* FUCK */ + 70, 85, 67, 75, + /* *PISS */ + 208, 73, 83, 83, + /* RAPE */ + 82, 65, 80, 69, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* MOVE */ + 77, 79, 86, 69, + /* TIE */ + 84, 73, 69, 32, + /* CLIM */ + 67, 76, 73, 77, + /* REMO */ + 82, 69, 77, 79, + /* LOOK */ + 76, 79, 79, 75, + /* WEAR */ + 87, 69, 65, 82, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* CAN */ + 67, 65, 78, 32, + /* BRAZ */ + 66, 82, 65, 90, + /* DOOR */ + 68, 79, 79, 82, + /* ROCK */ + 82, 79, 67, 75, + /* DAGG */ + 68, 65, 71, 71, + /* CREV */ + 67, 82, 69, 86, + /* FLIN */ + 70, 76, 73, 78, + /* SCRE */ + 83, 67, 82, 69, + /* LAMP */ + 76, 65, 77, 80, + /* PATH */ + 80, 65, 84, 72, + /* TREE */ + 84, 82, 69, 69, + /* BLOC */ + 66, 76, 79, 67, + /* SKEL */ + 83, 75, 69, 76, + /* AMUL */ + 65, 77, 85, 76, + /* WIND */ + 87, 73, 78, 68, + /* SHOR */ + 83, 72, 79, 82, + /* *SWOR */ + 211, 87, 79, 82, + /* RUBY */ + 82, 85, 66, 89, + /* LION */ + 76, 73, 79, 78, + /* GRIL */ + 71, 82, 73, 76, + /* KEY */ + 75, 69, 89, 32, + /* *IRON */ + 201, 82, 79, 78, + /* EMER */ + 69, 77, 69, 82, + /* *BOX */ + 194, 79, 88, 32, + /* CHAL */ + 67, 72, 65, 76, + /* *SILV */ + 211, 73, 76, 86, + /* EMPE */ + 69, 77, 80, 69, + /* IMPE */ + 73, 77, 80, 69, + /* GUAR */ + 71, 85, 65, 82, + /* IXIO */ + 73, 88, 73, 79, + /* RULE */ + 82, 85, 76, 69, + /* LEAT */ + 76, 69, 65, 84, + /* *SHIE */ + 211, 72, 73, 69, + /* ROPE */ + 82, 79, 80, 69, + /* *PLAI */ + 208, 76, 65, 73, + /* BUTT */ + 66, 85, 84, 84, + /* 1 */ + 49, 32, 32, 32, + /* 2 */ + 50, 32, 32, 32, + /* 3 */ + 51, 32, 32, 32, + /* 4 */ + 52, 32, 32, 32, + /* SHOV */ + 83, 72, 79, 86, + /* HUTS */ + 72, 85, 84, 83, + /* SPEA */ + 83, 80, 69, 65, + /* *EBON */ + 197, 66, 79, 78, + /* CRYS */ + 67, 82, 89, 83, + /* *SCIM */ + 211, 67, 73, 77, + /* CABI */ + 67, 65, 66, 73, + /* *DISP */ + 196, 73, 83, 80, + /* RED */ + 82, 69, 68, 32, + /* *DIAM */ + 196, 73, 65, 77, + /* GLAD */ + 71, 76, 65, 68, + /* CLOT */ + 67, 76, 79, 84, + /* *WICK */ + 215, 73, 67, 75, + /* *STRI */ + 211, 84, 82, 73, + /* DRAG */ + 68, 82, 65, 71, + /* STAT */ + 83, 84, 65, 84, + /* *IVOR */ + 201, 86, 79, 82, + /* PRAY */ + 80, 82, 65, 89, + /* HELL */ + 72, 69, 76, 76, + /* SLAB */ + 83, 76, 65, 66, + /* STON */ + 83, 84, 79, 78, + /* GAME */ + 71, 65, 77, 69, + /* 5 */ + 53, 32, 32, 32, + /* SELF */ + 83, 69, 76, 70, + /* BLAC */ + 66, 76, 65, 67, + /* GAUN */ + 71, 65, 85, 78, + /* STEP */ + 83, 84, 69, 80, + /* ICE */ + 73, 67, 69, 32, + /* CAVE */ + 67, 65, 86, 69, + /* TUNN */ + 84, 85, 78, 78, + /* SIGN */ + 83, 73, 71, 78, + /* ALTA */ + 65, 76, 84, 65, + /* INSC */ + 73, 78, 83, 67, + 0, +}; +const uint8_t automap[] = { + /* CAN */ + 67, 65, 78, 32, + 1, + /* DAGG */ + 68, 65, 71, 71, + 5, + /* FLIN */ + 70, 76, 73, 78, + 7, + /* LAMP */ + 76, 65, 77, 80, + 9, + /* BLOC */ + 66, 76, 79, 67, + 12, + /* AMUL */ + 65, 77, 85, 76, + 14, + /* SHOR */ + 83, 72, 79, 82, + 16, + /* RUBY */ + 82, 85, 66, 89, + 17, + /* KEY */ + 75, 69, 89, 32, + 21, + /* EMER */ + 69, 77, 69, 82, + 22, + /* CHAL */ + 67, 72, 65, 76, + 23, + /* IXIO */ + 73, 88, 73, 79, + 26, + /* LEAT */ + 76, 69, 65, 84, + 27, + /* LAMP */ + 76, 65, 77, 80, + 29, + /* SHOV */ + 83, 72, 79, 86, + 34, + /* SPEA */ + 83, 80, 69, 65, + 35, + /* CRYS */ + 67, 82, 89, 83, + 37, + /* RED */ + 82, 69, 68, 32, + 39, + /* CAN */ + 67, 65, 78, 32, + 41, + /* CLOT */ + 67, 76, 79, 84, + 42, + /* STAT */ + 83, 84, 65, 84, + 44, + /* LAMP */ + 76, 65, 77, 80, + 45, + /* BLAC */ + 66, 76, 65, 67, + 57, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst08.c b/Applications/games/myst08.c new file mode 100644 index 00000000..792dbc7a --- /dev/null +++ b/Applications/games/myst08.c @@ -0,0 +1,3027 @@ +#define NUM_OBJ 49 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 7; +const uint8_t treasures = 4; +const uint8_t lastloc = 40; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +83, 84, 79, 82, 69, 82, 79, 79, 77, 46, 32, 32, 67, 65, 78, 39, 84, 32, 71, 69, 84, 32, 72, 69, 82, 69, 0 }; +const uint8_t loctxt_1[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 84, 104, 114, 111, 110, 101, 45, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_2[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_3[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_4[] = { +67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_5[] = { +80, 114, 105, 110, 99, 101, 115, 115, 39, 32, 66, 101, 100, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_6[] = { +68, 114, 101, 115, 115, 105, 110, 103, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_7[] = { +82, 111, 121, 97, 108, 32, 84, 114, 101, 97, 115, 117, 114, 101, 32, 67, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_8[] = { +80, 97, 108, 97, 99, 101, 32, 67, 111, 114, 114, 105, 100, 111, 114, 0 }; +const uint8_t loctxt_9[] = { +42, 73, 39, 109, 32, 105, 110, 115, 105, 100, 101, 32, 116, 104, 101, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t loctxt_10[] = { +68, 97, 114, 107, 32, 70, 111, 114, 101, 115, 116, 0 }; +const uint8_t loctxt_11[] = { +116, 97, 108, 108, 32, 84, 114, 101, 101, 116, 111, 112, 0 }; +const uint8_t loctxt_12[] = { +116, 97, 108, 108, 32, 84, 114, 101, 101, 116, 111, 112, 0 }; +const uint8_t loctxt_13[] = { +68, 97, 114, 107, 32, 70, 111, 114, 101, 115, 116, 0 }; +const uint8_t loctxt_14[] = { +99, 97, 118, 101, 32, 101, 110, 116, 114, 97, 110, 99, 101, 0 }; +const uint8_t loctxt_15[] = { +83, 116, 105, 110, 107, 105, 110, 103, 32, 67, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 82, 111, 99, 107, 121, 32, 76, 101, 100, 103, 101, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 32, 112, 97, 116, 104, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 82, 97, 103, 105, 110, 103, 32, 84, 111, 114, 114, 101, 110, 116, 0 }; +const uint8_t loctxt_19[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 109, 111, 117, 110, 116, 97, 105, 110, 32, 116, 114, 97, 105, 108, 0 }; +const uint8_t loctxt_20[] = { +70, 97, 114, 109, 45, 89, 97, 114, 100, 0 }; +const uint8_t loctxt_21[] = { +76, 97, 114, 103, 101, 32, 72, 101, 110, 32, 72, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_22[] = { +42, 73, 39, 109, 32, 105, 110, 32, 111, 112, 101, 110, 32, 87, 111, 111, 100, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_23[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 87, 111, 111, 100, 115, 0 }; +const uint8_t loctxt_24[] = { +78, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 32, 98, 121, 32, 97, 32, 83, 104, 97, 102, 116, 0 }; +const uint8_t loctxt_25[] = { +110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_26[] = { +110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_27[] = { +110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_28[] = { +110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_29[] = { +86, 97, 117, 108, 116, 101, 100, 32, 99, 104, 97, 109, 98, 101, 114, 32, 98, 121, 32, 97, 32, 87, 101, 108, 108, 45, 83, 104, 97, 102, 116, 0 }; +const uint8_t loctxt_30[] = { +76, 105, 98, 114, 97, 114, 121, 0 }; +const uint8_t loctxt_31[] = { +83, 116, 117, 100, 121, 32, 119, 105, 116, 104, 32, 97, 32, 100, 111, 111, 114, 32, 105, 110, 32, 110, 111, 114, 116, 104, 32, 87, 97, 108, 108, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 116, 39, 115, 32, 116, 104, 101, 32, 87, 105, 122, 97, 114, 100, 39, 115, 32, 76, 97, 105, 114, 0 }; +const uint8_t loctxt_33[] = { +68, 85, 83, 84, 66, 73, 78, 0 }; +const uint8_t loctxt_34[] = { +110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_35[] = { +83, 109, 101, 108, 108, 121, 32, 99, 97, 118, 101, 0 }; +const uint8_t loctxt_36[] = { +42, 73, 39, 109, 32, 97, 116, 32, 97, 32, 68, 101, 97, 100, 45, 69, 110, 100, 0 }; +const uint8_t loctxt_37[] = { +110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_38[] = { +42, 73, 39, 109, 32, 105, 110, 32, 111, 112, 101, 110, 32, 87, 111, 111, 100, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_39[] = { +42, 73, 39, 109, 32, 105, 110, 32, 111, 112, 101, 110, 32, 87, 111, 111, 100, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_40[] = { +42, 65, 108, 108, 32, 108, 105, 118, 101, 100, 32, 104, 97, 112, 112, 105, 108, 121, 46, 46, 121, 111, 117, 39, 114, 101, 32, 106, 111, 107, 105, 110, 103, 32, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 2, 6, 0, 0 } }, + { loctxt_2, { 3, 2, 2, 8, 0, 0 } }, + { loctxt_3, { 0, 1, 8, 4, 0, 0 } }, + { loctxt_4, { 3, 1, 3, 5, 5, 0 } }, + { loctxt_5, { 0, 0, 0, 0, 0, 4 } }, + { loctxt_6, { 0, 0, 1, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_8, { 2, 0, 3, 2, 0, 0 } }, + { loctxt_9, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_10, { 10, 10, 13, 10, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 0, 10 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 13 } }, + { loctxt_13, { 13, 14, 13, 10, 0, 0 } }, + { loctxt_14, { 13, 15, 0, 0, 0, 0 } }, + { loctxt_15, { 14, 0, 0, 35, 0, 0 } }, + { loctxt_16, { 0, 0, 37, 0, 0, 0 } }, + { loctxt_17, { 0, 18, 0, 0, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_20, { 19, 0, 0, 0, 0, 0 } }, + { loctxt_21, { 20, 0, 0, 0, 0, 0 } }, + { loctxt_22, { 21, 39, 23, 38, 0, 0 } }, + { loctxt_23, { 22, 0, 0, 0, 0, 0 } }, + { loctxt_24, { 0, 0, 0, 23, 0, 27 } }, + { loctxt_25, { 26, 28, 25, 25, 0, 0 } }, + { loctxt_26, { 27, 25, 27, 26, 0, 0 } }, + { loctxt_27, { 26, 37, 26, 26, 0, 0 } }, + { loctxt_28, { 27, 34, 28, 25, 0, 0 } }, + { loctxt_29, { 0, 0, 30, 0, 0, 27 } }, + { loctxt_30, { 31, 0, 0, 29, 0, 0 } }, + { loctxt_31, { 0, 30, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_34, { 26, 37, 25, 28, 0, 0 } }, + { loctxt_35, { 36, 0, 15, 0, 0, 0 } }, + { loctxt_36, { 0, 35, 0, 0, 0, 0 } }, + { loctxt_37, { 27, 34, 37, 16, 0, 0 } }, + { loctxt_38, { 39, 38, 22, 39, 0, 0 } }, + { loctxt_39, { 22, 38, 38, 38, 0, 0 } }, + { loctxt_40, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 6, + 4, + 5, + 17, + 18, + 18, + 18, + 20, + 21, + 22, + 22, + 23, + 23, + 10, + 30, + 0, + 0, + 0, + 0, + 8, + 0, + 15, + 0, + 12, + 0, + 0, + 19, + 0, + 0, + 19, + 20, + 0, + 0, + 0, + 32, + 31, + 0, + 7, + 0, +}; + + +const uint8_t objtxt_0[] = { +32, 0 }; +const uint8_t objtxt_1[] = { +65, 32, 82, 117, 98, 121, 32, 82, 111, 100, 0 }; +const uint8_t objtxt_2[] = { +83, 73, 71, 78, 32, 42, 32, 84, 114, 101, 97, 115, 117, 114, 101, 32, 105, 115, 32, 83, 97, 102, 101, 32, 72, 101, 114, 101, 32, 42, 0 }; +const uint8_t objtxt_3[] = { +42, 71, 111, 108, 100, 101, 110, 32, 83, 99, 101, 112, 116, 114, 101, 42, 0 }; +const uint8_t objtxt_4[] = { +67, 111, 110, 116, 101, 110, 116, 101, 100, 32, 67, 104, 105, 99, 107, 101, 110, 115, 32, 105, 110, 32, 78, 101, 115, 116, 32, 66, 111, 120, 101, 115, 0 }; +const uint8_t objtxt_5[] = { +73, 114, 111, 110, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_6[] = { +84, 114, 97, 112, 100, 111, 111, 114, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_7[] = { +73, 114, 111, 110, 45, 98, 111, 117, 110, 100, 32, 87, 97, 110, 100, 0 }; +const uint8_t objtxt_8[] = { +84, 104, 101, 32, 75, 105, 110, 103, 32, 108, 111, 111, 107, 105, 110, 103, 32, 100, 105, 115, 116, 114, 97, 117, 103, 104, 116, 0 }; +const uint8_t objtxt_9[] = { +83, 112, 101, 99, 116, 97, 99, 108, 101, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_10[] = { +79, 105, 108, 45, 80, 97, 105, 110, 116, 105, 110, 103, 0 }; +const uint8_t objtxt_11[] = { +83, 116, 114, 97, 110, 103, 101, 32, 83, 112, 101, 99, 116, 97, 99, 108, 101, 115, 0 }; +const uint8_t objtxt_12[] = { +83, 116, 97, 105, 114, 99, 97, 115, 101, 0 }; +const uint8_t objtxt_13[] = { +83, 104, 101, 101, 112, 115, 107, 105, 110, 32, 82, 117, 103, 0 }; +const uint8_t objtxt_14[] = { +67, 104, 105, 99, 107, 101, 110, 0 }; +const uint8_t objtxt_15[] = { +72, 117, 110, 103, 114, 121, 45, 108, 111, 111, 107, 105, 110, 103, 32, 70, 111, 120, 0 }; +const uint8_t objtxt_16[] = { +66, 97, 103, 32, 111, 102, 32, 67, 111, 114, 110, 0 }; +const uint8_t objtxt_17[] = { +82, 105, 99, 107, 101, 116, 121, 32, 66, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_18[] = { +65, 32, 70, 97, 114, 109, 101, 114, 32, 40, 99, 111, 117, 110, 116, 105, 110, 103, 32, 104, 105, 115, 32, 67, 104, 105, 99, 107, 101, 110, 115, 41, 0 }; +const uint8_t objtxt_19[] = { +70, 108, 111, 99, 107, 32, 111, 102, 32, 104, 117, 110, 103, 114, 121, 32, 67, 104, 105, 99, 107, 101, 110, 115, 0 }; +const uint8_t objtxt_20[] = { +72, 117, 110, 116, 101, 114, 115, 0 }; +const uint8_t objtxt_21[] = { +66, 97, 121, 105, 110, 103, 32, 104, 111, 117, 110, 100, 115, 0 }; +const uint8_t objtxt_22[] = { +86, 105, 120, 101, 110, 0 }; +const uint8_t objtxt_23[] = { +70, 111, 120, 99, 117, 98, 115, 0 }; +const uint8_t objtxt_24[] = { +83, 104, 111, 118, 101, 108, 0 }; +const uint8_t objtxt_25[] = { +65, 110, 32, 65, 110, 99, 105, 101, 110, 116, 32, 66, 111, 111, 107, 0 }; +const uint8_t objtxt_26[] = { +83, 116, 114, 105, 112, 32, 111, 102, 32, 80, 97, 114, 99, 104, 109, 101, 110, 116, 0 }; +const uint8_t objtxt_27[] = { +42, 74, 101, 119, 101, 108, 108, 101, 100, 32, 79, 114, 98, 42, 0 }; +const uint8_t objtxt_28[] = { +65, 110, 32, 111, 114, 110, 97, 116, 101, 32, 69, 108, 118, 105, 115, 104, 32, 83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_29[] = { +65, 32, 102, 105, 110, 101, 32, 99, 104, 97, 105, 110, 0 }; +const uint8_t objtxt_30[] = { +65, 32, 76, 111, 99, 107, 101, 100, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_31[] = { +65, 32, 76, 105, 110, 101, 110, 32, 67, 104, 101, 115, 116, 0 }; +const uint8_t objtxt_32[] = { +65, 32, 82, 101, 112, 117, 108, 115, 105, 118, 101, 32, 83, 108, 105, 109, 121, 32, 71, 111, 98, 108, 105, 110, 0 }; +const uint8_t objtxt_33[] = { +65, 32, 110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 0 }; +const uint8_t objtxt_34[] = { +82, 97, 118, 101, 110, 39, 115, 32, 78, 101, 115, 116, 0 }; +const uint8_t objtxt_35[] = { +65, 32, 115, 109, 97, 108, 108, 32, 100, 111, 111, 114, 32, 40, 110, 111, 119, 32, 118, 105, 115, 105, 98, 108, 101, 41, 0 }; +const uint8_t objtxt_36[] = { +42, 84, 104, 101, 32, 66, 101, 97, 117, 116, 105, 102, 117, 108, 32, 80, 114, 105, 110, 99, 101, 115, 115, 42, 0 }; +const uint8_t objtxt_37[] = { +65, 32, 82, 105, 99, 107, 101, 116, 121, 32, 66, 114, 105, 100, 103, 101, 0 }; +const uint8_t objtxt_38[] = { +65, 32, 83, 116, 101, 101, 112, 32, 112, 97, 116, 104, 0 }; +const uint8_t objtxt_39[] = { +65, 32, 72, 97, 112, 112, 121, 32, 70, 97, 114, 109, 101, 114, 0 }; +const uint8_t objtxt_40[] = { +65, 32, 108, 97, 114, 103, 101, 32, 114, 111, 99, 107, 32, 98, 108, 111, 99, 107, 105, 110, 103, 32, 116, 104, 101, 32, 112, 97, 116, 104, 0 }; +const uint8_t objtxt_41[] = { +65, 32, 108, 97, 114, 103, 101, 32, 104, 101, 110, 32, 104, 111, 117, 115, 101, 0 }; +const uint8_t objtxt_42[] = { +84, 101, 114, 114, 105, 102, 105, 101, 100, 32, 67, 104, 105, 99, 107, 101, 110, 115, 32, 40, 116, 104, 101, 121, 32, 115, 101, 101, 32, 116, 104, 101, 32, 70, 111, 120, 41, 0 }; +const uint8_t objtxt_43[] = { +79, 112, 101, 110, 32, 84, 114, 97, 112, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_44[] = { +42, 82, 111, 121, 97, 108, 32, 67, 114, 111, 119, 110, 42, 0 }; +const uint8_t objtxt_45[] = { +69, 118, 105, 108, 32, 65, 107, 121, 114, 122, 32, 40, 72, 117, 114, 116, 105, 110, 103, 32, 116, 104, 101, 32, 80, 114, 105, 110, 99, 101, 115, 115, 41, 0 }; +const uint8_t objtxt_46[] = { +65, 32, 77, 101, 110, 97, 99, 105, 110, 103, 32, 83, 116, 111, 110, 101, 32, 84, 114, 111, 108, 108, 0 }; +const uint8_t objtxt_47[] = { +83, 99, 111, 114, 99, 104, 101, 100, 32, 83, 116, 97, 116, 117, 101, 32, 111, 102, 32, 97, 32, 84, 114, 111, 108, 108, 0 }; +const uint8_t objtxt_48[] = { +82, 101, 103, 97, 108, 105, 97, 32, 115, 99, 97, 116, 116, 101, 114, 101, 100, 32, 97, 108, 108, 32, 97, 114, 111, 117, 110, 100, 0 }; +const uint8_t objtxt_49[] = { +84, 104, 101, 32, 71, 114, 97, 116, 101, 102, 117, 108, 32, 75, 105, 110, 103, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, +}; +const uint8_t msgtxt_0[] = { +40, 99, 41, 32, 49, 57, 56, 51, 32, 66, 46, 72, 111, 119, 97, 114, 116, 104, 32, 38, 32, 67, 46, 74, 46, 32, 79, 103, 100, 101, 110, 0 }; +const uint8_t msgtxt_1[] = { +84, 104, 101, 32, 75, 105, 110, 103, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_2[] = { +39, 83, 97, 118, 101, 32, 116, 104, 101, 32, 80, 114, 105, 110, 99, 101, 115, 115, 32, 38, 32, 102, 105, 110, 100, 32, 116, 104, 101, 32, 74, 101, 119, 101, 108, 115, 0 }; +const uint8_t msgtxt_3[] = { +73, 32, 104, 105, 100, 32, 116, 104, 101, 32, 112, 97, 114, 99, 104, 109, 101, 110, 116, 32, 105, 110, 32, 116, 104, 101, 32, 98, 111, 111, 107, 33, 0 }; +const uint8_t msgtxt_4[] = { +89, 111, 117, 114, 32, 114, 101, 119, 97, 114, 100, 32, 119, 105, 108, 108, 32, 98, 101, 32, 32, 80, 114, 105, 99, 101, 108, 101, 115, 115, 33, 34, 0 }; +const uint8_t msgtxt_5[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_6[] = { +84, 104, 101, 114, 101, 39, 115, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 109, 105, 115, 115, 105, 110, 103, 0 }; +const uint8_t msgtxt_7[] = { +84, 104, 101, 32, 115, 105, 100, 101, 115, 32, 97, 114, 101, 32, 108, 111, 111, 115, 101, 0 }; +const uint8_t msgtxt_8[] = { +73, 116, 32, 104, 97, 110, 103, 115, 32, 98, 121, 32, 97, 32, 102, 105, 110, 101, 32, 99, 104, 97, 105, 110, 0 }; +const uint8_t msgtxt_9[] = { +73, 116, 39, 115, 32, 69, 109, 112, 116, 121, 0 }; +const uint8_t msgtxt_10[] = { +65, 32, 118, 111, 105, 99, 101, 0 }; +const uint8_t msgtxt_11[] = { +115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_12[] = { +34, 82, 65, 86, 69, 78, 83, 32, 71, 117, 97, 114, 100, 32, 116, 104, 101, 32, 84, 114, 101, 97, 115, 117, 114, 101, 115, 34, 0 }; +const uint8_t msgtxt_13[] = { +73, 116, 39, 115, 32, 116, 111, 111, 32, 115, 109, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_14[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_15[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_16[] = { +83, 108, 97, 118, 101, 114, 105, 110, 103, 32, 84, 114, 111, 108, 108, 32, 112, 114, 111, 99, 101, 101, 100, 115, 32, 116, 111, 32, 101, 97, 116, 32, 77, 69, 33, 0 }; +const uint8_t msgtxt_17[] = { +84, 114, 111, 108, 108, 32, 103, 114, 105, 109, 97, 99, 101, 115, 46, 46, 97, 110, 100, 32, 98, 97, 114, 115, 32, 116, 104, 101, 32, 119, 97, 121, 0 }; +const uint8_t msgtxt_18[] = { +73, 116, 39, 115, 32, 79, 112, 101, 110, 0 }; +const uint8_t msgtxt_19[] = { +73, 116, 39, 115, 32, 76, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_20[] = { +85, 117, 117, 103, 103, 104, 46, 46, 73, 32, 99, 97, 110, 32, 106, 117, 115, 116, 32, 115, 113, 117, 101, 101, 122, 101, 32, 98, 121, 32, 116, 104, 101, 32, 84, 114, 111, 108, 108, 0 }; +const uint8_t msgtxt_21[] = { +65, 32, 84, 97, 112, 101, 115, 116, 114, 121, 32, 104, 97, 110, 103, 115, 32, 111, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 0 }; +const uint8_t msgtxt_22[] = { +67, 104, 97, 105, 110, 32, 99, 108, 105, 112, 115, 32, 110, 101, 97, 116, 108, 121, 32, 111, 110, 32, 115, 112, 101, 99, 115, 33, 0 }; +const uint8_t msgtxt_23[] = { +76, 105, 103, 104, 116, 32, 105, 115, 32, 66, 108, 105, 110, 100, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_24[] = { +84, 104, 101, 121, 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 112, 101, 99, 105, 97, 108, 32, 115, 112, 101, 99, 115, 33, 0 }; +const uint8_t msgtxt_25[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 115, 105, 99, 107, 101, 110, 105, 110, 103, 32, 99, 114, 117, 110, 99, 104, 32, 111, 102, 32, 103, 108, 97, 115, 115, 33, 0 }; +const uint8_t msgtxt_26[] = { +89, 111, 117, 39, 114, 101, 32, 97, 32, 66, 108, 111, 111, 100, 116, 104, 105, 114, 115, 116, 121, 32, 68, 101, 118, 105, 108, 32, 97, 114, 101, 110, 39, 116, 32, 121, 111, 117, 33, 0 }; +const uint8_t msgtxt_27[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 32, 101, 118, 101, 114, 121, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_28[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 108, 111, 117, 100, 32, 34, 67, 108, 105, 99, 107, 34, 32, 110, 101, 97, 114, 98, 121, 33, 0 }; +const uint8_t msgtxt_29[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 110, 101, 115, 116, 32, 105, 110, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 116, 114, 101, 101, 33, 0 }; +const uint8_t msgtxt_30[] = { +68, 101, 108, 105, 99, 105, 111, 117, 115, 33, 32, 84, 104, 97, 110, 107, 115, 0 }; +const uint8_t msgtxt_31[] = { +73, 32, 75, 105, 108, 108, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_32[] = { +85, 103, 104, 33, 32, 89, 111, 117, 39, 114, 101, 32, 78, 97, 117, 115, 101, 97, 116, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_33[] = { +84, 104, 101, 32, 83, 119, 111, 114, 100, 32, 103, 108, 111, 119, 115, 32, 70, 105, 101, 114, 99, 101, 108, 121, 33, 0 }; +const uint8_t msgtxt_34[] = { +82, 117, 98, 121, 32, 82, 111, 100, 32, 118, 97, 110, 105, 115, 104, 101, 115, 32, 105, 110, 116, 111, 32, 83, 119, 111, 114, 100, 32, 104, 105, 108, 116, 33, 0 }; +const uint8_t msgtxt_35[] = { +84, 104, 101, 32, 83, 119, 111, 114, 100, 32, 108, 97, 99, 107, 115, 32, 116, 104, 101, 32, 80, 111, 119, 101, 114, 33, 0 }; +const uint8_t msgtxt_36[] = { +83, 119, 111, 114, 100, 32, 69, 114, 117, 112, 116, 115, 32, 105, 110, 116, 111, 32, 66, 114, 105, 108, 108, 105, 97, 110, 116, 32, 87, 104, 105, 116, 101, 32, 70, 105, 114, 101, 33, 0 }; +const uint8_t msgtxt_37[] = { +73, 32, 99, 97, 110, 32, 104, 101, 97, 114, 32, 87, 97, 118, 101, 115, 33, 0 }; +const uint8_t msgtxt_38[] = { +70, 111, 120, 32, 101, 97, 116, 115, 32, 67, 104, 105, 99, 107, 101, 110, 33, 0 }; +const uint8_t msgtxt_39[] = { +67, 104, 105, 99, 107, 101, 110, 32, 101, 97, 116, 115, 32, 67, 111, 114, 110, 33, 0 }; +const uint8_t msgtxt_40[] = { +72, 101, 32, 108, 101, 97, 100, 115, 32, 109, 101, 32, 105, 110, 116, 111, 32, 97, 32, 99, 111, 110, 99, 101, 97, 108, 101, 100, 32, 99, 97, 118, 101, 0 }; +const uint8_t msgtxt_41[] = { +83, 110, 97, 114, 108, 105, 110, 103, 32, 72, 111, 117, 110, 100, 115, 32, 112, 114, 101, 118, 101, 110, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_42[] = { +72, 101, 32, 103, 105, 118, 101, 115, 32, 109, 101, 32, 97, 110, 32, 73, 114, 111, 110, 98, 111, 117, 110, 100, 32, 83, 116, 97, 102, 102, 0 }; +const uint8_t msgtxt_43[] = { +73, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 116, 97, 107, 101, 32, 111, 110, 101, 32, 97, 116, 32, 97, 32, 116, 105, 109, 101, 33, 0 }; +const uint8_t msgtxt_44[] = { +72, 117, 110, 116, 101, 114, 32, 115, 97, 121, 115, 32, 39, 87, 101, 39, 118, 101, 32, 108, 111, 115, 116, 32, 116, 104, 101, 32, 115, 99, 101, 110, 116, 33, 39, 0 }; +const uint8_t msgtxt_45[] = { +70, 111, 120, 32, 102, 108, 101, 101, 115, 32, 119, 105, 116, 104, 32, 72, 117, 110, 116, 32, 105, 110, 32, 102, 117, 108, 108, 32, 67, 114, 121, 46, 46, 0 }; +const uint8_t msgtxt_46[] = { +70, 111, 120, 32, 116, 114, 111, 116, 115, 32, 97, 119, 97, 121, 44, 32, 115, 105, 116, 115, 32, 97, 110, 100, 32, 108, 111, 111, 107, 115, 32, 97, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_47[] = { +76, 97, 117, 103, 104, 115, 32, 104, 111, 114, 114, 105, 98, 108, 121, 46, 46, 84, 104, 101, 110, 32, 116, 101, 97, 114, 115, 32, 109, 101, 32, 97, 112, 97, 114, 116, 33, 0 }; +const uint8_t msgtxt_48[] = { +116, 104, 101, 110, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 32, 105, 110, 116, 111, 32, 104, 105, 115, 32, 68, 101, 110, 0 }; +const uint8_t msgtxt_49[] = { +73, 39, 109, 32, 102, 108, 111, 97, 116, 105, 110, 103, 32, 117, 112, 32, 116, 104, 101, 32, 83, 104, 97, 102, 116, 33, 0 }; +const uint8_t msgtxt_50[] = { +77, 117, 115, 116, 32, 98, 101, 32, 116, 104, 101, 32, 87, 105, 122, 97, 114, 100, 39, 115, 32, 87, 97, 110, 100, 33, 0 }; +const uint8_t msgtxt_51[] = { +65, 32, 115, 116, 114, 105, 112, 32, 111, 102, 32, 112, 97, 112, 101, 114, 32, 102, 108, 105, 101, 115, 32, 105, 110, 116, 111, 32, 109, 121, 32, 104, 97, 110, 100, 33, 0 }; +const uint8_t msgtxt_52[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 77, 89, 83, 84, 69, 82, 73, 79, 85, 83, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 32, 78, 111, 46, 32, 56, 0 }; +const uint8_t msgtxt_53[] = { +98, 121, 32, 66, 114, 105, 97, 110, 32, 72, 111, 119, 97, 114, 116, 104, 32, 38, 32, 67, 108, 105, 102, 102, 32, 79, 103, 100, 101, 110, 32, 40, 67, 41, 32, 49, 57, 56, 51, 0 }; +const uint8_t msgtxt_54[] = { +84, 97, 107, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 97, 116, 32, 102, 97, 99, 101, 32, 118, 97, 108, 117, 101, 33, 0 }; +const uint8_t msgtxt_55[] = { +73, 116, 39, 115, 32, 97, 32, 112, 111, 114, 116, 114, 97, 105, 116, 32, 111, 102, 32, 116, 104, 101, 32, 80, 114, 105, 110, 99, 101, 115, 115, 0 }; +const uint8_t msgtxt_56[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 102, 105, 110, 101, 32, 104, 97, 110, 103, 105, 110, 103, 45, 99, 104, 97, 105, 110, 0 }; +const uint8_t msgtxt_57[] = { +89, 111, 117, 32, 104, 97, 118, 101, 110, 39, 116, 32, 109, 117, 99, 104, 32, 116, 105, 109, 101, 32, 108, 101, 102, 116, 33, 0 }; +const uint8_t msgtxt_58[] = { +84, 104, 101, 32, 98, 97, 99, 107, 32, 111, 102, 32, 116, 104, 101, 32, 67, 104, 101, 115, 116, 32, 83, 110, 97, 112, 115, 32, 111, 112, 101, 110, 33, 0 }; +const uint8_t msgtxt_59[] = { +73, 39, 109, 32, 114, 111, 108, 108, 105, 110, 103, 32, 100, 111, 119, 110, 32, 97, 32, 112, 97, 115, 115, 97, 103, 101, 33, 0 }; +const uint8_t msgtxt_60[] = { +84, 104, 101, 32, 83, 112, 101, 99, 116, 97, 99, 108, 101, 115, 32, 104, 97, 118, 101, 32, 102, 97, 108, 108, 101, 110, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_61[] = { +79, 104, 104, 104, 104, 33, 32, 77, 121, 32, 72, 101, 97, 100, 33, 46, 46, 46, 87, 104, 101, 114, 101, 32, 97, 109, 32, 73, 63, 0 }; +const uint8_t msgtxt_62[] = { +84, 104, 101, 32, 108, 111, 97, 116, 104, 115, 111, 109, 101, 32, 67, 114, 101, 97, 116, 117, 114, 101, 0 }; +const uint8_t msgtxt_63[] = { +116, 101, 97, 114, 115, 32, 109, 121, 32, 116, 104, 114, 111, 97, 116, 32, 111, 117, 116, 33, 33, 0 }; +const uint8_t msgtxt_64[] = { +100, 101, 99, 97, 121, 115, 32, 105, 110, 116, 111, 32, 97, 32, 80, 117, 116, 114, 105, 100, 32, 71, 114, 101, 101, 110, 32, 83, 108, 105, 109, 101, 33, 0 }; +const uint8_t msgtxt_65[] = { +78, 111, 116, 104, 105, 110, 103, 32, 72, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_66[] = { +73, 116, 32, 119, 97, 115, 32, 97, 32, 103, 111, 111, 100, 32, 73, 100, 101, 97, 44, 32, 98, 117, 116, 46, 46, 46, 0 }; +const uint8_t msgtxt_67[] = { +73, 116, 39, 115, 32, 98, 101, 101, 110, 32, 97, 110, 116, 105, 99, 105, 112, 97, 116, 101, 100, 33, 0 }; +const uint8_t msgtxt_68[] = { +67, 104, 105, 99, 107, 101, 110, 32, 102, 108, 97, 112, 115, 32, 97, 119, 97, 121, 0 }; +const uint8_t msgtxt_69[] = { +97, 110, 100, 32, 114, 117, 115, 104, 101, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 72, 101, 110, 45, 67, 97, 98, 105, 110, 33, 0 }; +const uint8_t msgtxt_70[] = { +73, 32, 99, 97, 110, 39, 116, 33, 32, 73, 116, 39, 115, 32, 106, 97, 109, 109, 101, 100, 32, 115, 111, 108, 105, 100, 33, 0 }; +const uint8_t msgtxt_71[] = { +73, 32, 109, 117, 115, 116, 32, 104, 97, 118, 101, 32, 108, 111, 111, 115, 101, 110, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_72[] = { +73, 116, 32, 99, 114, 97, 115, 104, 101, 115, 32, 111, 102, 102, 32, 116, 104, 101, 32, 108, 101, 100, 103, 101, 33, 0 }; +const uint8_t msgtxt_73[] = { +70, 97, 114, 109, 101, 114, 32, 116, 104, 97, 110, 107, 115, 32, 109, 101, 0 }; +const uint8_t msgtxt_74[] = { +73, 114, 97, 116, 101, 32, 70, 97, 114, 109, 101, 114, 32, 121, 101, 108, 108, 115, 32, 39, 67, 104, 105, 99, 107, 101, 110, 32, 116, 104, 105, 101, 102, 32, 69, 104, 63, 39, 0 }; +const uint8_t msgtxt_75[] = { +84, 104, 101, 110, 32, 104, 101, 32, 107, 110, 111, 99, 107, 115, 32, 109, 101, 32, 111, 117, 116, 32, 67, 79, 76, 68, 33, 0 }; +const uint8_t msgtxt_76[] = { +73, 32, 104, 97, 118, 101, 32, 110, 111, 32, 119, 101, 97, 112, 111, 110, 115, 33, 0 }; +const uint8_t msgtxt_77[] = { +73, 39, 118, 101, 32, 103, 111, 116, 32, 97, 32, 34, 70, 111, 120, 32, 105, 110, 32, 83, 104, 101, 101, 112, 39, 115, 32, 99, 108, 111, 116, 104, 105, 110, 103, 33, 34, 0 }; +const uint8_t msgtxt_78[] = { +73, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 97, 32, 107, 101, 121, 0 }; +const uint8_t msgtxt_79[] = { +73, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 97, 32, 87, 97, 110, 100, 33, 0 }; +const uint8_t msgtxt_80[] = { +84, 104, 111, 117, 32, 97, 114, 116, 32, 97, 32, 70, 111, 117, 108, 32, 77, 111, 117, 116, 104, 101, 100, 32, 75, 110, 97, 118, 101, 33, 0 }; +const uint8_t msgtxt_81[] = { +86, 105, 120, 101, 110, 32, 103, 117, 101, 115, 115, 101, 115, 32, 109, 121, 32, 105, 110, 116, 101, 110, 116, 105, 111, 110, 0 }; +const uint8_t msgtxt_82[] = { +97, 110, 100, 32, 115, 99, 117, 114, 114, 105, 101, 115, 32, 97, 119, 97, 121, 32, 119, 105, 116, 104, 32, 104, 101, 114, 32, 67, 117, 98, 115, 33, 0 }; +const uint8_t msgtxt_83[] = { +84, 104, 101, 32, 70, 111, 120, 32, 108, 111, 111, 107, 115, 32, 97, 116, 32, 109, 101, 32, 115, 99, 111, 114, 110, 102, 117, 108, 108, 121, 33, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_84[] = { +72, 117, 110, 116, 101, 114, 115, 32, 97, 116, 116, 97, 99, 107, 32, 109, 101, 32, 97, 110, 103, 114, 105, 108, 121, 33, 0 }; +const uint8_t msgtxt_85[] = { +34, 46, 46, 46, 32, 116, 111, 32, 97, 118, 111, 105, 100, 32, 99, 101, 114, 116, 97, 105, 110, 32, 68, 101, 97, 116, 104, 32, 121, 111, 117, 32, 109, 117, 115, 116, 0 }; +const uint8_t msgtxt_86[] = { +80, 97, 115, 115, 32, 116, 104, 101, 32, 82, 117, 110, 101, 115, 32, 116, 111, 32, 116, 104, 101, 32, 69, 118, 105, 108, 32, 79, 110, 101, 0 }; +const uint8_t msgtxt_87[] = { +98, 101, 102, 111, 114, 101, 32, 121, 111, 117, 114, 32, 81, 117, 101, 115, 116, 32, 105, 115, 32, 101, 110, 100, 101, 100, 33, 34, 0 }; +const uint8_t msgtxt_88[] = { +73, 116, 32, 105, 115, 32, 117, 110, 100, 101, 99, 105, 112, 104, 101, 114, 97, 98, 108, 101, 0 }; +const uint8_t msgtxt_89[] = { +84, 104, 101, 32, 87, 105, 122, 97, 114, 100, 32, 103, 114, 97, 98, 115, 32, 116, 104, 101, 32, 98, 111, 111, 107, 32, 40, 97, 110, 100, 32, 82, 117, 110, 101, 115, 41, 0 }; +const uint8_t msgtxt_90[] = { +67, 117, 114, 115, 101, 115, 32, 109, 101, 44, 32, 116, 104, 101, 110, 32, 102, 108, 101, 101, 115, 32, 102, 114, 111, 109, 32, 97, 32, 72, 117, 103, 101, 32, 68, 101, 109, 111, 110, 0 }; +const uint8_t msgtxt_91[] = { +40, 72, 105, 100, 101, 32, 39, 101, 109, 32, 105, 110, 32, 116, 104, 101, 32, 66, 111, 111, 107, 33, 41, 0 }; +const uint8_t msgtxt_92[] = { +80, 97, 114, 99, 104, 109, 101, 110, 116, 32, 119, 111, 110, 39, 116, 32, 108, 101, 97, 118, 101, 32, 109, 121, 32, 104, 97, 110, 100, 33, 0 }; +const uint8_t msgtxt_93[] = { +73, 116, 32, 104, 97, 115, 32, 115, 116, 114, 97, 110, 103, 101, 32, 82, 117, 110, 101, 115, 33, 32, 105, 116, 32, 102, 101, 101, 108, 115, 32, 65, 76, 73, 86, 69, 33, 0 }; +const uint8_t msgtxt_94[] = { +84, 104, 101, 32, 87, 105, 122, 97, 114, 100, 39, 115, 32, 80, 111, 119, 101, 114, 32, 105, 115, 32, 110, 111, 32, 109, 111, 114, 101, 33, 0 }; +const uint8_t msgtxt_95[] = { +84, 104, 101, 32, 80, 114, 105, 110, 99, 101, 115, 115, 32, 105, 115, 32, 70, 114, 101, 101, 33, 0 }; +const uint8_t msgtxt_96[] = { +87, 105, 122, 97, 114, 100, 32, 115, 97, 121, 115, 32, 39, 73, 110, 32, 51, 32, 109, 111, 118, 101, 115, 32, 121, 111, 117, 32, 100, 105, 101, 33, 39, 0 }; +const uint8_t msgtxt_97[] = { +84, 105, 109, 101, 39, 115, 32, 117, 112, 32, 77, 111, 110, 115, 116, 114, 111, 117, 115, 32, 68, 101, 109, 111, 110, 32, 97, 112, 112, 101, 97, 114, 115, 0 }; +const uint8_t msgtxt_98[] = { +89, 111, 117, 32, 83, 117, 99, 99, 101, 101, 100, 101, 100, 32, 77, 65, 83, 84, 69, 82, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 82, 33, 0 }; +const uint8_t msgtxt_99[] = { +39, 81, 85, 69, 83, 84, 79, 82, 39, 32, 105, 115, 32, 121, 111, 117, 114, 32, 114, 101, 119, 97, 114, 100, 32, 82, 101, 109, 101, 109, 98, 101, 114, 32, 105, 116, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, + msgtxt_97, + msgtxt_98, + msgtxt_99, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 166, + 9, 1, + 102, 103, 73, +/* AUTO 0 */ + 199, + 0, 1, + 58, 1, 2, 4, +/* AUTO 0 */ +/* AUTO 100 */ + 182, + 8, 3, 17, 30, 0, 30, 0, 31, 0, 8, + 55, 62, 28, +/* AUTO 100 */ + 165, + 4, 25, + 56, 64, +/* AUTO 100 */ + 165, + 4, 26, + 56, 64, +/* AUTO 100 */ + 168, + 4, 22, 13, 20, + 44, +/* AUTO 100 */ + 178, + 6, 14, 6, 15, 6, 16, 0, 5, + 81, 79, 73, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* AUTO 100 */ + 182, + 7, 32, 7, 7, 0, 7, 0, 4, 0, 7, + 81, 79, 81, +/* AUTO 100 */ + 175, + 2, 45, 4, 32, 0, 7, + 81, 77, 0, 73, +/* AUTO 0 */ + 199, + 19, 0, + 147, 47, 61, 63, +/* AUTO 0 */ + 197, + 0, 7, + 81, 107, +/* AUTO 100 */ + 180, + 18, 16, 18, 14, 18, 15, 4, 19, 0, 7, + 58, +/* AUTO 100 */ + 177, + 4, 26, 1, 14, 0, 14, 0, 17, + 62, 73, +/* AUTO 0 */ + 206, + 0, 5, 0, 1, 0, 5, + 81, 83, 81, +/* AUTO 100 */ + 182, + 4, 26, 8, 8, 0, 8, 0, 14, 0, 17, + 60, 62, 111, +/* AUTO 100 */ + 172, + 4, 14, 1, 28, 13, 32, + 33, +/* AUTO 100 */ + 172, + 4, 35, 1, 28, 13, 32, + 33, +/* AUTO 100 */ + 165, + 4, 16, + 57, 64, +/* AUTO 100 */ + 165, + 4, 37, + 56, 64, +/* AUTO 100 */ + 165, + 4, 29, + 56, 64, +/* AUTO 100 */ + 165, + 4, 15, + 56, 64, +/* AUTO 100 */ + 178, + 6, 9, 0, 1, 0, 3, 0, 1, + 81, 79, 81, +/* AUTO 100 */ + 174, + 1, 9, 9, 4, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 207, + 19, 0, 0, 9, 0, 11, + 55, 53, 110, 73, +/* AUTO 0 */ + 197, + 0, 1, + 81, 64, +/* AUTO 50 */ + 133, 50, + 4, 11, + 15, 29, +/* AUTO 100 */ + 165, + 4, 40, + 0, 63, +/* AUTO 30 */ + 135, 30, + 2, 32, + 88, 112, 113, 73, +/* AUTO 0 */ + 195, + 88, 61, 88, 63, +/* AUTO 100 */ + 168, + 9, 15, 1, 9, + 23, +/* AUTO 100 */ + 165, + 4, 14, + 57, 64, +/* AUTO 100 */ + 164, + 4, 24, + 37, +/* AUTO 100 */ + 168, + 4, 23, 2, 15, + 46, +/* AUTO 100 */ + 181, + 7, 23, 0, 22, 0, 23, 0, 23, 0, 23, + 62, 62, +/* AUTO 100 */ + 169, + 4, 27, 0, 15, + 56, 64, +/* AUTO 100 */ + 183, + 4, 7, 2, 36, 2, 27, 2, 3, 2, 44, + 0, 0, 0, 73, +/* AUTO 0 */ + 203, + 0, 49, 0, 49, + 74, 53, 64, 86, +/* AUTO 0 */ + 195, + 1, 148, 149, 63, +/* AUTO 100 */ + 181, + 8, 11, 7, 23, 0, 15, 0, 23, 0, 11, + 62, 60, +}; +const uint8_t actions[] = { +/* GET FOX */ + 19, 10, 33, + 4, 23, 2, 15, 0, 15, 0, 11, + 55, 58, 133, 48, +/* KILL TROL */ + 13, 29, 72, + 2, 46, 1, 28, 9, 13, + 35, 6, +/* AUTO 0 */ +/* DROP SPEC */ + 18, 18, 14, + 1, 9, 0, 9, 0, 9, 0, 11, + 53, 72, 5, +/* DROP SPEC */ + 9, 18, 14, + 1, 11, 0, 11, + 53, 5, +/* GET CHAI */ + 23, 10, 10, + 9, 2, 3, 10, 0, 29, 0, 29, 0, 2, + 53, 52, 58, 5, +/* GET PAIN */ + 13, 10, 8, + 2, 10, 8, 3, 0, 10, + 52, 105, +/* OPEN CHES */ + 9, 27, 12, + 4, 8, 2, 31, + 0, 18, +/* LOOK CHES */ + 4, 23, 12, + 2, 31, + 9, +/* LOOK PAIN */ + 8, 23, 8, + 1, 10, 8, 2, + 105, +/* LOOK PAIN */ + 9, 23, 8, + 1, 10, 9, 2, + 105, 8, +/* SAVE ANY */ + 0, 4, 0, + 71, +/* GO CHES */ + 11, 1, 12, + 2, 31, 0, 9, + 54, 108, 109, 73, +/* AUTO 0 */ + 199, + 0, 10, + 88, 88, 54, 64, +/* GET SPEC */ + 17, 10, 14, + 9, 15, 2, 11, 9, 4, 0, 11, + 52, 7, +/* REMO SPEC */ + 14, 15, 14, + 1, 9, 0, 11, 0, 9, + 72, 5, 64, +/* KILL GOBL */ + 19, 29, 16, + 2, 32, 1, 28, 0, 32, 0, 5, + 72, 31, 112, 114, +/* KILL GOBL */ + 4, 29, 16, + 6, 28, + 126, +/* EAT CORN */ + 19, 33, 31, + 1, 16, 0, 5, 0, 1, 0, 5, + 81, 83, 81, 73, +/* AUTO 0 */ + 197, + 0, 16, + 55, 30, +/* INVE ANY */ + 0, 5, 0, + 66, +/* WEAR SPEC */ + 23, 13, 14, + 1, 11, 8, 15, 0, 9, 0, 11, 0, 9, + 72, 74, 27, 24, +/* WEAR SPEC */ + 22, 13, 14, + 1, 11, 9, 15, 0, 9, 0, 11, 0, 9, + 72, 74, 24, +/* FIT CHAI */ + 22, 41, 10, + 1, 9, 1, 29, 0, 29, 0, 33, 0, 4, + 62, 58, 22, +/* FIT CHAI */ + 23, 41, 10, + 1, 11, 1, 29, 0, 29, 0, 33, 0, 4, + 62, 58, 0, 22, +/* GET SPEC */ + 17, 10, 14, + 2, 11, 9, 15, 8, 4, 0, 11, + 52, 106, +/* GET SWOR */ + 13, 10, 7, + 2, 28, 9, 13, 0, 28, + 52, 6, +/* GET SWOR */ + 13, 10, 7, + 2, 28, 8, 13, 0, 28, + 52, 33, +/* LOOK SWOR */ + 8, 23, 7, + 1, 28, 9, 13, + 6, +/* LOOK SWOR */ + 8, 23, 7, + 1, 28, 8, 13, + 33, +/* GET PAIN */ + 23, 10, 8, + 2, 10, 9, 2, 0, 10, 9, 3, 0, 3, + 52, 105, 8, 58, +/* GET PAIN */ + 22, 10, 8, + 2, 10, 8, 2, 9, 3, 0, 10, 0, 3, + 52, 58, 105, +/* GET SPEC */ + 13, 10, 14, + 8, 15, 2, 11, 0, 11, + 55, 25, +/* GET CHAI */ + 13, 10, 10, + 2, 29, 8, 2, 0, 29, + 52, 5, +/* EAT ANY */ + 0, 33, 0, + 32, +/* DIG ANY */ + 23, 62, 0, + 4, 36, 14, 3, 1, 24, 0, 3, 0, 36, + 62, 10, 11, 12, +/* DIG ANY */ + 17, 62, 0, + 4, 36, 13, 3, 1, 24, 0, 33, + 15, 53, +/* DIG ANY */ + 13, 62, 0, + 1, 24, 13, 33, 13, 44, + 5, 14, +/* GO TUNN */ + 9, 1, 41, + 2, 33, 0, 25, + 54, 64, +/* LOOK NEST */ + 14, 23, 37, + 4, 12, 14, 27, 0, 27, + 15, 53, 12, +/* LOOK KING */ + 7, 23, 18, + 4, 1, + 1, 2, 0, 4, +/* SAY RAVE */ + 13, 43, 13, + 7, 7, 7, 18, 7, 19, + 85, 73, +/* AUTO 0 */ + 201, + 0, 1, 0, 7, + 87, 54, +/* SAY RAVE */ + 10, 43, 13, + 4, 7, 0, 1, + 87, 85, 64, +/* DIG ANY */ + 18, 62, 0, + 4, 34, 1, 24, 14, 44, 0, 44, + 53, 15, 12, +/* QUIT ANY */ + 0, 3, 0, + 63, +/* GO NEST */ + 4, 1, 37, + 4, 12, + 13, +/* JUMP ANY */ + 8, 38, 0, + 4, 16, 0, 17, + 54, +/* GET CHIC */ + 23, 10, 43, + 2, 14, 0, 5, 0, 1, 0, 5, 0, 14, + 81, 82, 81, 52, +/* GET FOX */ + 23, 10, 33, + 2, 15, 0, 5, 0, 1, 0, 5, 0, 15, + 81, 82, 81, 52, +/* GET CORN */ + 23, 10, 31, + 2, 16, 0, 5, 0, 1, 0, 5, 0, 16, + 81, 82, 81, 52, +/* DROP CHIC */ + 23, 18, 43, + 1, 14, 7, 20, 0, 5, 0, 1, 0, 5, + 81, 83, 81, 73, +/* AUTO 0 */ + 196, + 0, 14, + 53, +/* DROP FOX */ + 21, 18, 33, + 1, 15, 7, 21, 7, 22, 7, 7, 0, 15, + 53, 73, +/* AUTO 0 */ + 211, + 0, 8, 0, 5, 0, 1, 0, 5, + 60, 81, 83, 81, +/* DROP CORN */ + 23, 18, 31, + 1, 16, 0, 5, 0, 1, 0, 5, 0, 16, + 81, 83, 81, 53, +/* GO BRID */ + 23, 1, 34, + 4, 18, 2, 14, 2, 15, 2, 16, 0, 16, + 55, 39, 38, 73, +/* AUTO 0 */ + 202, + 0, 14, 0, 19, + 55, 54, 64, +/* GO BRID */ + 23, 1, 34, + 4, 18, 2, 14, 2, 15, 0, 14, 0, 19, + 55, 54, 64, 38, +/* GO BRID */ + 23, 1, 34, + 4, 18, 2, 14, 2, 16, 0, 16, 0, 19, + 55, 54, 64, 39, +/* GO BRID */ + 9, 1, 34, + 4, 18, 0, 5, + 81, 73, +/* AUTO 0 */ + 204, + 15, 1, 0, 19, 0, 19, + 54, +/* AUTO 0 */ + 196, + 16, 1, + 43, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* SAY RAVE */ + 11, 43, 13, + 1, 14, 7, 20, + 85, 115, 116, 117, +/* GO PATH */ + 12, 1, 35, + 4, 19, 2, 38, 0, 20, + 54, +/* SAY RAVE */ + 7, 43, 13, + 4, 18, + 85, 115, 116, 117, +/* SAY RAVE */ + 7, 43, 13, + 4, 19, + 85, 115, 116, 117, +/* GO BRID */ + 23, 1, 34, + 4, 19, 2, 14, 2, 15, 2, 16, 0, 16, + 55, 39, 38, 73, +/* AUTO 0 */ + 202, + 0, 14, 0, 18, + 55, 54, 64, +/* GO BRID */ + 23, 1, 34, + 4, 19, 2, 14, 2, 15, 0, 14, 0, 18, + 55, 54, 64, 38, +/* GO BRID */ + 23, 1, 34, + 4, 19, 2, 14, 2, 16, 0, 16, 0, 18, + 55, 54, 64, 39, +/* GO BRID */ + 9, 1, 34, + 4, 19, 0, 5, + 81, 73, +/* AUTO 0 */ + 201, + 15, 1, 0, 18, + 54, 64, +/* AUTO 0 */ + 196, + 16, 1, + 43, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* MOVE ROCK */ + 8, 57, 63, + 4, 19, 9, 7, + 120, +/* MOVE ROCK */ + 19, 57, 63, + 4, 19, 8, 7, 0, 38, 0, 40, + 72, 121, 122, 15, +/* DROP CHIC */ + 19, 18, 43, + 1, 14, 4, 20, 0, 14, 0, 7, + 72, 118, 119, 73, +/* AUTO 0 */ + 211, + 0, 5, 0, 1, 0, 5, 0, 8, + 81, 83, 81, 60, +/* AUTO 0 */ + 207, + 0, 18, 0, 39, 0, 7, + 72, 74, 123, 42, +/* WAVE WAND */ + 19, 35, 55, + 1, 7, 7, 24, 7, 29, 6, 26, + 10, 11, 2, 137, +/* GO HEN */ + 21, 1, 64, + 4, 20, 13, 7, 9, 8, 1, 15, 0, 43, + 55, 73, +/* AUTO 0 */ + 215, + 0, 6, 0, 4, 0, 19, 0, 42, 0, 21, + 55, 55, 55, 62, +/* AUTO 0 */ + 201, + 0, 21, 0, 9, + 54, 58, +/* GO HEN */ + 20, 1, 64, + 4, 20, 13, 7, 8, 8, 8, 9, 9, 10, + 73, +/* AUTO 0 */ + 210, + 0, 42, 0, 19, 0, 21, 0, 9, + 72, 54, 60, +/* GO HEN */ + 20, 1, 64, + 4, 20, 13, 7, 9, 8, 8, 9, 9, 10, + 73, +/* AUTO 0 */ + 210, + 0, 42, 0, 19, 0, 21, 0, 9, + 72, 54, 60, +/* GO HEN */ + 20, 1, 64, + 4, 20, 13, 7, 9, 8, 8, 9, 8, 10, + 73, +/* AUTO 0 */ + 214, + 0, 42, 0, 4, 0, 9, 0, 6, 0, 21, + 72, 60, 62, +/* AUTO 0 */ + 196, + 0, 21, + 54, +/* GO HEN */ + 20, 1, 64, + 4, 20, 13, 7, 8, 8, 8, 9, 8, 10, + 73, +/* AUTO 0 */ + 214, + 0, 42, 0, 4, 0, 9, 0, 6, 0, 21, + 72, 60, 62, +/* AUTO 0 */ + 196, + 0, 21, + 54, +/* GO HEN */ + 20, 1, 64, + 4, 20, 13, 7, 9, 8, 9, 9, 6, 15, + 73, +/* AUTO 0 */ + 196, + 0, 21, + 54, +/* DROP RUG */ + 22, 18, 26, + 8, 8, 7, 21, 7, 7, 0, 8, 0, 13, + 60, 53, 5, +/* DROP RUG */ + 12, 18, 26, + 9, 8, 7, 21, 0, 13, + 53, +/* GO HEN */ + 16, 1, 64, + 4, 20, 13, 7, 8, 8, 0, 21, + 54, +/* GO HEN */ + 11, 1, 64, + 4, 20, 14, 7, + 124, 125, 88, 73, +/* AUTO 0 */ + 203, + 0, 8, 0, 26, + 58, 88, 54, 64, +/* RUB ANY */ + 5, 36, 0, + 10, 0, + 5, 115, +/* SCOR ANY */ + 0, 6, 0, + 65, +/* WRAP FOX */ + 17, 63, 33, + 1, 15, 1, 13, 7, 21, 0, 8, + 58, 127, +/* FEED CHIC */ + 23, 56, 43, + 2, 19, 1, 16, 0, 19, 0, 4, 0, 6, + 72, 53, 15, 73, +/* AUTO 0 */ + 205, + 0, 16, 0, 33, 0, 10, + 62, 58, +/* AUTO 0 */ + 206, + 0, 5, 0, 1, 0, 5, + 81, 83, 81, +/* OPEN DOOR */ + 19, 27, 66, + 2, 6, 1, 5, 0, 6, 0, 43, + 72, 5, 0, 18, +/* OPEN DOOR */ + 10, 27, 66, + 2, 6, 6, 5, + 0, 19, 128, +/* GO DOOR */ + 11, 1, 66, + 2, 43, 0, 22, + 109, 0, 88, 54, +/* WAVE WAND */ + 14, 35, 55, + 4, 24, 1, 7, 0, 29, + 54, 49, 50, +/* DROP FOX */ + 23, 18, 33, + 4, 22, 1, 15, 0, 15, 0, 20, 0, 21, + 55, 55, 55, 73, +/* AUTO 0 */ + 193, + 64, 45, +/* FOLL FOX */ + 19, 55, 33, + 4, 23, 2, 15, 0, 15, 0, 24, + 53, 54, 40, 48, +/* WAVE WAND */ + 15, 35, 55, + 1, 26, 1, 7, 7, 29, + 10, 11, 136, 141, +/* WAVE WAND */ + 4, 35, 55, + 6, 7, + 129, +/* GO WELL */ + 9, 1, 68, + 4, 29, 0, 27, + 54, 64, +/* GET VIXE */ + 15, 10, 61, + 2, 22, 0, 22, 0, 23, + 55, 55, 131, 132, +/* GET CUB */ + 15, 10, 47, + 2, 22, 0, 22, 0, 23, + 55, 55, 131, 132, +/* KILL VIXE */ + 15, 29, 61, + 2, 22, 0, 22, 0, 23, + 55, 55, 131, 132, +/* KILL CUB */ + 15, 29, 47, + 2, 22, 0, 22, 0, 23, + 55, 55, 131, 132, +/* GET CUB */ + 15, 10, 47, + 2, 22, 0, 22, 0, 23, + 55, 55, 131, 132, +/* GET HUNT */ + 8, 10, 46, + 4, 22, 13, 20, + 41, +/* KILL HUNT */ + 8, 29, 46, + 4, 22, 13, 21, + 41, +/* GET HOUN */ + 8, 10, 71, + 4, 22, 13, 21, + 134, +/* KILL HOUN */ + 8, 29, 71, + 4, 22, 13, 21, + 134, +/* GET BOOK */ + 19, 10, 70, + 2, 25, 14, 26, 0, 25, 0, 26, + 52, 74, 5, 51, +/* GET BOOK */ + 13, 10, 70, + 2, 25, 13, 26, 0, 25, + 52, 5, +/* READ BOOK */ + 6, 40, 70, + 1, 25, + 135, 136, 137, +/* READ PARC */ + 4, 40, 48, + 1, 26, + 138, +/* DROP BOOK */ + 23, 18, 70, + 2, 45, 1, 25, 8, 12, 0, 25, 0, 26, + 55, 55, 139, 73, +/* AUTO 0 */ + 207, + 0, 45, 0, 36, 0, 35, + 72, 53, 140, 144, +/* AUTO 0 */ + 192, + 145, +/* LOOK NEST */ + 18, 23, 37, + 4, 21, 2, 4, 14, 1, 0, 1, + 53, 5, 15, +/* FUCK ANY */ + 0, 49, 0, + 130, +/* LOOK STAI */ + 4, 23, 24, + 4, 4, + 21, +/* WAVE WAND */ + 15, 35, 55, + 4, 29, 1, 7, 0, 24, + 50, 88, 54, 64, +/* WRAP PARC */ + 14, 63, 48, + 1, 25, 1, 26, 0, 12, + 58, 5, 3, +/* DROP BOOK */ + 18, 18, 70, + 8, 12, 5, 45, 0, 12, 0, 25, + 60, 53, 5, +/* DROP BOOK */ + 9, 18, 70, + 9, 12, 0, 25, + 53, 5, +/* DROP PARC */ + 0, 18, 48, + 142, +/* CLIM TREE */ + 8, 17, 28, + 4, 10, 0, 11, + 54, +/* CLIM TREE */ + 8, 17, 28, + 4, 13, 0, 12, + 54, +/* FIT RUBY */ + 23, 41, 29, + 1, 28, 1, 1, 0, 13, 0, 1, 0, 33, + 58, 62, 34, 33, +/* KILL TROL */ + 23, 29, 72, + 2, 46, 1, 28, 8, 13, 0, 46, 0, 47, + 72, 36, 23, 31, +/* GO DOOR */ + 4, 1, 66, + 2, 46, + 17, +/* GO DOOR */ + 15, 1, 66, + 2, 47, 14, 36, 0, 32, + 20, 88, 54, 146, +/* GO DOOR */ + 15, 1, 66, + 2, 47, 13, 36, 0, 32, + 20, 88, 54, 64, +/* LOOK TAPE */ + 13, 23, 22, + 4, 4, 14, 28, 0, 28, + 53, 15, +/* GO DOOR */ + 9, 1, 66, + 2, 35, 0, 31, + 54, 64, +/* LOOK PARC */ + 4, 23, 48, + 1, 26, + 143, +/* LOOK AROU */ + 3, 23, 83, + 64, 86, 66, 14, +/* FEED TROL */ + 7, 56, 72, + 2, 46, + 86, 16, 61, 63, +/* SAY BOLL */ + 1, 43, 75, + 85, 130, +/* KILL ANY */ + 0, 29, 0, + 26, +/* SAY ANY */ + 0, 43, 0, + 85, +/* YOU BOLL */ + 0, 21, 75, + 130, +/* LOOK ANY */ + 1, 23, 0, + 5, 14, +/* HELP ANY */ + 0, 7, 0, + 104, +/* DROP FOX */ + 9, 18, 33, + 4, 7, 1, 15, + 116, 117, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *LEAV */ + 204, 69, 65, 86, + /* QUIT */ + 81, 85, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* INVE */ + 73, 78, 86, 69, + /* SCOR */ + 83, 67, 79, 82, + /* HELP */ + 72, 69, 76, 80, + /* *HINT */ + 200, 73, 78, 84, + /* *CLUE */ + 195, 76, 85, 69, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* WAIT */ + 87, 65, 73, 84, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* CLIM */ + 67, 76, 73, 77, + /* DROP */ + 68, 82, 79, 80, + /* *GIVE */ + 199, 73, 86, 69, + /* *PUT */ + 208, 85, 84, 32, + /* YOU */ + 89, 79, 85, 32, + /* */ + 32, 32, 32, 32, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *FRIS */ + 198, 82, 73, 83, + /* *SEAR */ + 211, 69, 65, 82, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* BREA */ + 66, 82, 69, 65, + /* *SMAS */ + 211, 77, 65, 83, + /* EAT */ + 69, 65, 84, 32, + /* *DRIN */ + 196, 82, 73, 78, + /* WAVE */ + 87, 65, 86, 69, + /* RUB */ + 82, 85, 66, 32, + /* *POLI */ + 208, 79, 76, 73, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* READ */ + 82, 69, 65, 68, + /* FIT */ + 70, 73, 84, 32, + /* *FIX */ + 198, 73, 88, 32, + /* SAY */ + 83, 65, 89, 32, + /* *SPEA */ + 211, 80, 69, 65, + /* RIDE */ + 82, 73, 68, 69, + /* *PEDA */ + 208, 69, 68, 65, + /* SMOK */ + 83, 77, 79, 75, + /* */ + 32, 32, 32, 32, + /* FUCK */ + 70, 85, 67, 75, + /* *PISS */ + 208, 73, 83, 83, + /* *BOLL */ + 194, 79, 76, 76, + /* *BAST */ + 194, 65, 83, 84, + /* *SHIT */ + 211, 72, 73, 84, + /* *CUNT */ + 195, 85, 78, 84, + /* FOLL */ + 70, 79, 76, 76, + /* FEED */ + 70, 69, 69, 68, + /* MOVE */ + 77, 79, 86, 69, + /* *PUSH */ + 208, 85, 83, 72, + /* PRAY */ + 80, 82, 65, 89, + /* RAPE */ + 82, 65, 80, 69, + /* GIVE */ + 71, 73, 86, 69, + /* DIG */ + 68, 73, 71, 32, + /* WRAP */ + 87, 82, 65, 80, + /* *COVE */ + 195, 79, 86, 69, + /* *CONC */ + 195, 79, 78, 67, + /* *HIDE */ + 200, 73, 68, 69, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* SWOR */ + 83, 87, 79, 82, + /* PAIN */ + 80, 65, 73, 78, + /* *PORT */ + 208, 79, 82, 84, + /* CHAI */ + 67, 72, 65, 73, + /* KEY */ + 75, 69, 89, 32, + /* CHES */ + 67, 72, 69, 83, + /* RAVE */ + 82, 65, 86, 69, + /* SPEC */ + 83, 80, 69, 67, + /* *GLAS */ + 199, 76, 65, 83, + /* GOBL */ + 71, 79, 66, 76, + /* *SLIM */ + 211, 76, 73, 77, + /* KING */ + 75, 73, 78, 71, + /* PRIN */ + 80, 82, 73, 78, + /* AKYR */ + 65, 75, 89, 82, + /* *WIZA */ + 215, 73, 90, 65, + /* TAPE */ + 84, 65, 80, 69, + /* OFF */ + 79, 70, 70, 32, + /* STAI */ + 83, 84, 65, 73, + /* CORR */ + 67, 79, 82, 82, + /* RUG */ + 82, 85, 71, 32, + /* *SHEE */ + 211, 72, 69, 69, + /* TREE */ + 84, 82, 69, 69, + /* RUBY */ + 82, 85, 66, 89, + /* *ROD */ + 210, 79, 68, 32, + /* CORN */ + 67, 79, 82, 78, + /* *BAG */ + 194, 65, 71, 32, + /* FOX */ + 70, 79, 88, 32, + /* BRID */ + 66, 82, 73, 68, + /* PATH */ + 80, 65, 84, 72, + /* LEDG */ + 76, 69, 68, 71, + /* NEST */ + 78, 69, 83, 84, + /* SCEP */ + 83, 67, 69, 80, + /* SHOV */ + 83, 72, 79, 86, + /* LIBR */ + 76, 73, 66, 82, + /* TUNN */ + 84, 85, 78, 78, + /* PASS */ + 80, 65, 83, 83, + /* CHIC */ + 67, 72, 73, 67, + /* REGA */ + 82, 69, 71, 65, + /* GUAR */ + 71, 85, 65, 82, + /* HUNT */ + 72, 85, 78, 84, + /* CUB */ + 67, 85, 66, 32, + /* PARC */ + 80, 65, 82, 67, + /* *PAPE */ + 208, 65, 80, 69, + /* *STRI */ + 211, 84, 82, 73, + /* *RUNE */ + 210, 85, 78, 69, + /* FARM */ + 70, 65, 82, 77, + /* LEAD */ + 76, 69, 65, 68, + /* GOLD */ + 71, 79, 76, 68, + /* WAND */ + 87, 65, 78, 68, + /* *STAF */ + 211, 84, 65, 70, + /* JEWE */ + 74, 69, 87, 69, + /* *SCEP */ + 211, 67, 69, 80, + /* ORB */ + 79, 82, 66, 32, + /* CROW */ + 67, 82, 79, 87, + /* VIXE */ + 86, 73, 88, 69, + /* GAME */ + 71, 65, 77, 69, + /* ROCK */ + 82, 79, 67, 75, + /* HEN */ + 72, 69, 78, 32, + /* *HOUS */ + 200, 79, 85, 83, + /* DOOR */ + 68, 79, 79, 82, + /* *TRAP */ + 212, 82, 65, 80, + /* WELL */ + 87, 69, 76, 76, + /* *SHAF */ + 211, 72, 65, 70, + /* BOOK */ + 66, 79, 79, 75, + /* HOUN */ + 72, 79, 85, 78, + /* TROL */ + 84, 82, 79, 76, + /* *STON */ + 211, 84, 79, 78, + /* HELL */ + 72, 69, 76, 76, + /* BOLL */ + 66, 79, 76, 76, + /* *BAST */ + 194, 65, 83, 84, + /* *PISS */ + 208, 73, 83, 83, + /* *SHIT */ + 211, 72, 73, 84, + /* *FUCK */ + 198, 85, 67, 75, + /* *BALL */ + 194, 65, 76, 76, + /* *CUNT */ + 195, 85, 78, 84, + /* *KNAC */ + 203, 78, 65, 67, + /* AROU */ + 65, 82, 79, 85, + /* *ROUN */ + 210, 79, 85, 78, + /* *ABOU */ + 193, 66, 79, 85, + 0, +}; +const uint8_t automap[] = { + /* RUBY */ + 82, 85, 66, 89, + 1, + /* SCEP */ + 83, 67, 69, 80, + 3, + /* KEY */ + 75, 69, 89, 32, + 5, + /* WAND */ + 87, 65, 78, 68, + 7, + /* PAIN */ + 80, 65, 73, 78, + 10, + /* SPEC */ + 83, 80, 69, 67, + 11, + /* RUG */ + 82, 85, 71, 32, + 13, + /* CHIC */ + 67, 72, 73, 67, + 14, + /* FOX */ + 70, 79, 88, 32, + 15, + /* CORN */ + 67, 79, 82, 78, + 16, + /* SHOV */ + 83, 72, 79, 86, + 24, + /* BOOK */ + 66, 79, 79, 75, + 25, + /* PARC */ + 80, 65, 82, 67, + 26, + /* ORB */ + 79, 82, 66, 32, + 27, + /* SWOR */ + 83, 87, 79, 82, + 28, + /* CHAI */ + 67, 72, 65, 73, + 29, + /* PRIN */ + 80, 82, 73, 78, + 36, + /* CROW */ + 67, 82, 79, 87, + 44, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst09.c b/Applications/games/myst09.c new file mode 100644 index 00000000..10cb37a7 --- /dev/null +++ b/Applications/games/myst09.c @@ -0,0 +1,3078 @@ +#define NUM_OBJ 59 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 200; +const uint8_t lightfill = 200; +const uint8_t startcarried = 0; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 40; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +40, 67, 41, 32, 49, 57, 56, 51, 32, 66, 46, 72, 46, 0 }; +const uint8_t loctxt_1[] = { +77, 97, 114, 98, 108, 101, 32, 72, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_2[] = { +82, 111, 121, 97, 108, 32, 67, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 105, 110, 32, 102, 114, 111, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 82, 111, 121, 97, 108, 32, 80, 97, 108, 97, 99, 101, 0 }; +const uint8_t loctxt_4[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 108, 111, 110, 103, 44, 32, 119, 105, 110, 100, 105, 110, 103, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_5[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 84, 101, 109, 112, 108, 101, 32, 111, 102, 32, 65, 116, 104, 101, 110, 101, 0 }; +const uint8_t loctxt_6[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 83, 116, 111, 110, 101, 32, 68, 97, 105, 115, 0 }; +const uint8_t loctxt_7[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 119, 105, 110, 100, 105, 110, 103, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_8[] = { +82, 111, 99, 107, 121, 32, 67, 108, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_9[] = { +108, 97, 114, 103, 101, 32, 67, 97, 118, 101, 0 }; +const uint8_t loctxt_10[] = { +32, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 84, 101, 109, 112, 108, 101, 32, 111, 102, 32, 72, 101, 114, 109, 101, 115, 0 }; +const uint8_t loctxt_12[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 44, 32, 103, 114, 97, 115, 115, 121, 32, 73, 115, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 104, 111, 118, 101, 114, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 65, 105, 114, 33, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 104, 111, 118, 101, 114, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 65, 105, 114, 33, 0 }; +const uint8_t loctxt_15[] = { +112, 97, 116, 99, 104, 32, 111, 102, 32, 112, 114, 105, 99, 107, 108, 121, 32, 84, 104, 111, 114, 110, 115, 0 }; +const uint8_t loctxt_16[] = { +71, 114, 111, 118, 101, 32, 111, 102, 32, 116, 97, 108, 108, 32, 84, 114, 101, 101, 115, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 104, 111, 118, 101, 114, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 65, 105, 114, 33, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 103, 114, 97, 115, 115, 121, 32, 80, 108, 97, 105, 110, 0 }; +const uint8_t loctxt_19[] = { +82, 111, 99, 107, 121, 32, 67, 108, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_20[] = { +100, 105, 109, 108, 121, 32, 108, 105, 116, 32, 67, 97, 118, 101, 0 }; +const uint8_t loctxt_21[] = { +110, 97, 114, 114, 111, 119, 32, 84, 117, 110, 110, 101, 108, 0 }; +const uint8_t loctxt_22[] = { +67, 111, 108, 100, 32, 67, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_23[] = { +104, 117, 103, 101, 32, 117, 110, 100, 101, 114, 103, 114, 111, 117, 110, 100, 32, 67, 97, 118, 101, 114, 110, 0 }; +const uint8_t loctxt_24[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 103, 114, 97, 115, 115, 121, 32, 80, 97, 116, 104, 119, 97, 121, 0 }; +const uint8_t loctxt_25[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 98, 97, 99, 107, 32, 111, 102, 32, 80, 69, 71, 65, 83, 85, 83, 0 }; +const uint8_t loctxt_26[] = { +42, 73, 39, 109, 32, 97, 116, 32, 116, 104, 101, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 70, 114, 117, 105, 116, 32, 84, 114, 101, 101, 0 }; +const uint8_t loctxt_27[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 73, 115, 108, 97, 110, 100, 32, 111, 102, 32, 82, 111, 99, 107, 0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 104, 117, 103, 101, 32, 111, 117, 116, 99, 114, 111, 112, 32, 111, 102, 32, 82, 111, 99, 107, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 100, 114, 121, 44, 32, 100, 117, 115, 116, 121, 32, 84, 114, 97, 105, 108, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 100, 114, 105, 101, 100, 32, 117, 112, 32, 87, 97, 116, 101, 114, 45, 72, 111, 108, 101, 0 }; +const uint8_t loctxt_31[] = { +119, 111, 111, 100, 101, 100, 32, 67, 108, 101, 97, 114, 105, 110, 103, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 114, 117, 105, 110, 101, 100, 32, 84, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_33[] = { +84, 101, 109, 112, 108, 101, 32, 119, 105, 116, 104, 32, 97, 110, 32, 111, 112, 101, 110, 32, 82, 111, 111, 102, 0 }; +const uint8_t loctxt_34[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 87, 97, 108, 108, 115, 32, 111, 102, 32, 116, 104, 101, 32, 111, 112, 101, 110, 32, 84, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_35[] = { +118, 101, 114, 121, 32, 116, 105, 110, 121, 32, 67, 97, 118, 101, 0 }; +const uint8_t loctxt_36[] = { +68, 69, 80, 79, 0 }; +const uint8_t loctxt_37[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 110, 32, 73, 118, 111, 114, 121, 32, 80, 101, 100, 101, 115, 116, 97, 108, 0 }; +const uint8_t loctxt_38[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 110, 32, 73, 118, 111, 114, 121, 32, 80, 101, 100, 101, 115, 116, 97, 108, 0 }; +const uint8_t loctxt_39[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 110, 32, 73, 118, 111, 114, 121, 32, 80, 101, 100, 101, 115, 116, 97, 108, 0 }; +const uint8_t loctxt_40[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 82, 105, 118, 101, 114, 32, 83, 84, 89, 88, 46, 46, 46, 73, 39, 109, 32, 68, 69, 65, 68, 33, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 2, 3, 0, 0, 0, 0 } }, + { loctxt_2, { 0, 1, 0, 0, 0, 0 } }, + { loctxt_3, { 0, 29, 4, 7, 0, 0 } }, + { loctxt_4, { 0, 30, 5, 3, 0, 0 } }, + { loctxt_5, { 0, 0, 0, 4, 0, 0 } }, + { loctxt_6, { 0, 5, 0, 0, 0, 0 } }, + { loctxt_7, { 0, 0, 3, 8, 0, 0 } }, + { loctxt_8, { 0, 0, 7, 0, 0, 0 } }, + { loctxt_9, { 0, 0, 8, 0, 0, 0 } }, + { loctxt_10, { 9, 0, 0, 0, 0, 0 } }, + { loctxt_11, { 0, 7, 0, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 16, 15, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_14, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 12, 0, 0, 0 } }, + { loctxt_16, { 0, 0, 0, 12, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_18, { 24, 31, 0, 0, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 24, 0, 0 } }, + { loctxt_20, { 21, 0, 0, 19, 0, 0 } }, + { loctxt_21, { 0, 20, 22, 0, 0, 0 } }, + { loctxt_22, { 0, 23, 0, 21, 0, 0 } }, + { loctxt_23, { 22, 0, 0, 0, 0, 0 } }, + { loctxt_24, { 0, 18, 19, 0, 0, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_26, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_27, { 0, 28, 0, 0, 0, 0 } }, + { loctxt_28, { 27, 0, 0, 0, 0, 0 } }, + { loctxt_29, { 3, 0, 30, 0, 0, 0 } }, + { loctxt_30, { 4, 0, 0, 29, 0, 0 } }, + { loctxt_31, { 18, 0, 0, 32, 0, 0 } }, + { loctxt_32, { 0, 0, 31, 33, 0, 0 } }, + { loctxt_33, { 0, 0, 32, 0, 0, 0 } }, + { loctxt_34, { 0, 0, 0, 0, 0, 32 } }, + { loctxt_35, { 0, 0, 24, 0, 0, 0 } }, + { loctxt_36, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_37, { 0, 0, 0, 0, 0, 11 } }, + { loctxt_38, { 0, 0, 0, 0, 0, 12 } }, + { loctxt_39, { 0, 0, 0, 0, 0, 18 } }, + { loctxt_40, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 2, + 2, + 2, + 0, + 3, + 29, + 30, + 30, + 0, + 0, + 0, + 5, + 0, + 7, + 8, + 9, + 0, + 10, + 0, + 0, + 12, + 12, + 15, + 0, + 16, + 26, + 12, + 0, + 0, + 33, + 24, + 19, + 19, + 35, + 19, + 31, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 6, + 11, + 12, + 18, + 0, + 0, +}; + + +const uint8_t objtxt_0[] = { +75, 105, 110, 103, 32, 80, 111, 108, 121, 100, 101, 99, 116, 101, 115, 0 }; +const uint8_t objtxt_1[] = { +84, 104, 114, 111, 110, 101, 0 }; +const uint8_t objtxt_2[] = { +82, 111, 121, 97, 108, 32, 71, 117, 97, 114, 100, 115, 0 }; +const uint8_t objtxt_3[] = { +80, 69, 71, 65, 83, 85, 83, 32, 119, 101, 97, 114, 105, 110, 103, 32, 72, 97, 108, 116, 101, 114, 0 }; +const uint8_t objtxt_4[] = { +82, 111, 121, 97, 108, 32, 80, 97, 108, 97, 99, 101, 0 }; +const uint8_t objtxt_5[] = { +76, 101, 97, 116, 104, 101, 114, 32, 83, 97, 99, 107, 0 }; +const uint8_t objtxt_6[] = { +87, 105, 116, 104, 101, 114, 101, 100, 32, 84, 114, 101, 101, 32, 83, 116, 117, 109, 112, 0 }; +const uint8_t objtxt_7[] = { +79, 108, 100, 32, 66, 101, 103, 103, 97, 114, 0 }; +const uint8_t objtxt_8[] = { +68, 105, 115, 99, 117, 115, 0 }; +const uint8_t objtxt_9[] = { +70, 108, 97, 109, 105, 110, 103, 32, 84, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_10[] = { +65, 110, 99, 105, 101, 110, 116, 32, 80, 97, 114, 99, 104, 109, 101, 110, 116, 0 }; +const uint8_t objtxt_11[] = { +83, 116, 111, 110, 101, 32, 68, 97, 105, 115, 0 }; +const uint8_t objtxt_12[] = { +72, 105, 103, 104, 108, 121, 32, 112, 111, 108, 105, 115, 104, 101, 100, 32, 83, 104, 105, 101, 108, 100, 0 }; +const uint8_t objtxt_13[] = { +84, 101, 109, 112, 108, 101, 0 }; +const uint8_t objtxt_14[] = { +67, 97, 118, 101, 32, 69, 110, 116, 114, 97, 110, 99, 101, 0 }; +const uint8_t objtxt_15[] = { +77, 97, 114, 98, 108, 101, 32, 83, 116, 97, 116, 117, 101, 0 }; +const uint8_t objtxt_16[] = { +32, 0 }; +const uint8_t objtxt_17[] = { +32, 0 }; +const uint8_t objtxt_18[] = { +71, 111, 108, 100, 101, 110, 32, 72, 101, 108, 109, 101, 116, 0 }; +const uint8_t objtxt_19[] = { +87, 105, 110, 103, 101, 100, 32, 83, 97, 110, 100, 97, 108, 115, 0 }; +const uint8_t objtxt_20[] = { +66, 108, 105, 110, 100, 32, 80, 101, 97, 115, 97, 110, 116, 0 }; +const uint8_t objtxt_21[] = { +84, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_22[] = { +84, 104, 111, 114, 110, 32, 66, 117, 115, 104, 101, 115, 0 }; +const uint8_t objtxt_23[] = { +68, 97, 114, 107, 32, 66, 101, 114, 114, 105, 101, 115, 0 }; +const uint8_t objtxt_24[] = { +70, 114, 117, 105, 116, 32, 84, 114, 101, 101, 115, 0 }; +const uint8_t objtxt_25[] = { +76, 117, 115, 99, 105, 111, 117, 115, 32, 70, 114, 117, 105, 116, 115, 0 }; +const uint8_t objtxt_26[] = { +87, 105, 108, 100, 32, 72, 121, 101, 110, 97, 0 }; +const uint8_t objtxt_27[] = { +68, 101, 97, 100, 32, 72, 121, 101, 110, 97, 0 }; +const uint8_t objtxt_28[] = { +69, 118, 105, 108, 32, 72, 97, 114, 112, 105, 101, 115, 0 }; +const uint8_t objtxt_29[] = { +83, 105, 108, 118, 101, 114, 32, 72, 97, 108, 116, 101, 114, 0 }; +const uint8_t objtxt_30[] = { +67, 97, 118, 101, 0 }; +const uint8_t objtxt_31[] = { +84, 104, 101, 32, 116, 104, 114, 101, 101, 32, 71, 82, 65, 73, 65, 69, 0 }; +const uint8_t objtxt_32[] = { +69, 121, 101, 32, 111, 102, 32, 116, 104, 101, 32, 71, 82, 65, 73, 65, 69, 0 }; +const uint8_t objtxt_33[] = { +76, 97, 114, 103, 101, 32, 78, 101, 116, 0 }; +const uint8_t objtxt_34[] = { +67, 111, 111, 107, 105, 110, 103, 32, 70, 105, 114, 101, 0 }; +const uint8_t objtxt_35[] = { +87, 111, 111, 100, 101, 110, 32, 84, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_36[] = { +78, 97, 114, 114, 111, 119, 32, 99, 114, 97, 99, 107, 32, 105, 110, 32, 82, 111, 99, 107, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_37[] = { +77, 69, 68, 85, 83, 65, 0 }; +const uint8_t objtxt_38[] = { +72, 101, 97, 100, 32, 111, 102, 32, 77, 69, 68, 85, 83, 65, 0 }; +const uint8_t objtxt_39[] = { +80, 69, 71, 65, 83, 85, 83, 32, 116, 104, 101, 32, 87, 105, 110, 103, 101, 100, 32, 72, 111, 114, 115, 101, 0 }; +const uint8_t objtxt_40[] = { +82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 32, 111, 102, 32, 77, 69, 68, 85, 83, 65, 0 }; +const uint8_t objtxt_41[] = { +77, 97, 105, 100, 101, 110, 32, 99, 104, 97, 105, 110, 101, 100, 32, 116, 111, 32, 82, 111, 99, 107, 0 }; +const uint8_t objtxt_42[] = { +84, 104, 101, 32, 98, 101, 97, 117, 116, 105, 102, 117, 108, 32, 65, 78, 68, 82, 79, 77, 69, 68, 65, 0 }; +const uint8_t objtxt_43[] = { +84, 104, 101, 32, 75, 82, 65, 75, 69, 78, 0 }; +const uint8_t objtxt_44[] = { +84, 104, 101, 32, 75, 82, 65, 75, 69, 78, 32, 40, 116, 117, 114, 110, 101, 100, 32, 116, 111, 32, 83, 116, 111, 110, 101, 41, 0 }; +const uint8_t objtxt_45[] = { +71, 108, 101, 97, 109, 105, 110, 103, 32, 83, 119, 111, 114, 100, 0 }; +const uint8_t objtxt_46[] = { +87, 101, 108, 108, 32, 102, 101, 100, 32, 80, 101, 97, 115, 97, 110, 116, 0 }; +const uint8_t objtxt_47[] = { +72, 117, 103, 101, 32, 82, 111, 99, 107, 0 }; +const uint8_t objtxt_48[] = { +32, 0 }; +const uint8_t objtxt_49[] = { +87, 105, 110, 103, 101, 100, 32, 83, 97, 110, 100, 97, 108, 115, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_50[] = { +83, 97, 99, 107, 32, 102, 117, 108, 108, 32, 111, 102, 32, 87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_51[] = { +83, 104, 97, 108, 108, 111, 119, 32, 112, 111, 111, 108, 32, 111, 102, 32, 87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_52[] = { +83, 116, 97, 116, 117, 101, 32, 119, 101, 97, 114, 105, 110, 103, 32, 97, 32, 71, 111, 108, 100, 101, 110, 32, 72, 101, 108, 109, 101, 116, 0 }; +const uint8_t objtxt_53[] = { +71, 111, 108, 100, 101, 110, 32, 72, 101, 108, 109, 101, 116, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_54[] = { +65, 108, 116, 97, 114, 0 }; +const uint8_t objtxt_55[] = { +73, 118, 111, 114, 121, 32, 80, 101, 100, 101, 115, 116, 97, 108, 0 }; +const uint8_t objtxt_56[] = { +73, 118, 111, 114, 121, 32, 80, 101, 100, 101, 115, 116, 97, 108, 0 }; +const uint8_t objtxt_57[] = { +73, 118, 111, 114, 121, 32, 80, 101, 100, 101, 115, 116, 97, 108, 0 }; +const uint8_t objtxt_58[] = { +78, 101, 116, 32, 115, 112, 114, 101, 97, 100, 32, 97, 99, 114, 111, 115, 115, 32, 119, 97, 108, 108, 115, 0 }; +const uint8_t objtxt_59[] = { +68, 101, 97, 100, 32, 67, 97, 114, 99, 97, 115, 115, 32, 111, 102, 32, 77, 69, 68, 85, 83, 65, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, +}; +const uint8_t msgtxt_0[] = { +32, 0 }; +const uint8_t msgtxt_1[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 77, 121, 115, 116, 101, 114, 105, 111, 117, 115, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 78, 111, 46, 57, 0 }; +const uint8_t msgtxt_2[] = { +80, 69, 82, 83, 69, 85, 83, 32, 38, 32, 65, 78, 68, 82, 79, 77, 69, 68, 65, 0 }; +const uint8_t msgtxt_3[] = { +68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 65, 46, 74, 46, 72, 65, 82, 68, 73, 78, 71, 32, 97, 110, 100, 32, 115, 116, 97, 102, 102, 32, 97, 116, 0 }; +const uint8_t msgtxt_4[] = { +77, 79, 76, 73, 77, 69, 82, 88, 32, 76, 84, 68, 46, 32, 87, 104, 111, 32, 109, 97, 100, 101, 32, 116, 104, 105, 115, 32, 112, 111, 115, 115, 105, 98, 108, 101, 0 }; +const uint8_t msgtxt_5[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_7[] = { +110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_8[] = { +115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_9[] = { +110, 111, 116, 104, 105, 110, 103, 0 }; +const uint8_t msgtxt_10[] = { +73, 39, 118, 101, 32, 102, 111, 117, 110, 100, 0 }; +const uint8_t msgtxt_11[] = { +73, 32, 112, 108, 117, 109, 109, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 71, 114, 111, 117, 110, 100, 33, 0 }; +const uint8_t msgtxt_12[] = { +83, 80, 76, 65, 84, 33, 33, 0 }; +const uint8_t msgtxt_13[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_14[] = { +84, 104, 101, 32, 87, 105, 110, 103, 101, 100, 32, 83, 97, 110, 100, 97, 108, 115, 32, 102, 108, 97, 112, 32, 118, 105, 103, 111, 114, 111, 117, 115, 108, 121, 33, 0 }; +const uint8_t msgtxt_15[] = { +77, 97, 121, 98, 101, 32, 116, 104, 101, 32, 71, 111, 100, 115, 32, 119, 105, 108, 108, 32, 104, 101, 108, 112, 46, 46, 46, 0 }; +const uint8_t msgtxt_16[] = { +84, 104, 101, 32, 66, 101, 103, 103, 97, 114, 0 }; +const uint8_t msgtxt_17[] = { +68, 114, 105, 110, 107, 115, 32, 104, 105, 115, 32, 102, 105, 108, 108, 32, 116, 104, 101, 110, 32, 116, 104, 97, 110, 107, 115, 32, 109, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_18[] = { +46, 46, 46, 104, 101, 32, 103, 105, 118, 101, 115, 32, 109, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_19[] = { +72, 101, 39, 115, 32, 100, 121, 105, 110, 103, 32, 111, 102, 32, 84, 104, 105, 114, 115, 116, 33, 0 }; +const uint8_t msgtxt_20[] = { +84, 104, 101, 32, 75, 105, 110, 103, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_21[] = { +83, 108, 97, 121, 32, 77, 69, 68, 85, 83, 65, 32, 97, 110, 100, 32, 114, 101, 115, 99, 117, 101, 32, 65, 78, 68, 82, 79, 77, 69, 68, 65, 33, 0 }; +const uint8_t msgtxt_22[] = { +82, 111, 121, 97, 108, 32, 71, 117, 97, 114, 100, 115, 0 }; +const uint8_t msgtxt_23[] = { +89, 111, 117, 32, 97, 114, 101, 32, 102, 97, 114, 32, 116, 111, 111, 32, 118, 105, 111, 108, 101, 110, 116, 33, 0 }; +const uint8_t msgtxt_24[] = { +83, 108, 97, 121, 32, 109, 101, 33, 33, 0 }; +const uint8_t msgtxt_25[] = { +83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_26[] = { +84, 104, 101, 32, 83, 116, 97, 116, 117, 101, 32, 105, 115, 32, 116, 111, 111, 32, 116, 97, 108, 108, 33, 0 }; +const uint8_t msgtxt_27[] = { +67, 82, 65, 67, 75, 33, 33, 0 }; +const uint8_t msgtxt_28[] = { +71, 111, 111, 100, 32, 83, 104, 111, 116, 33, 0 }; +const uint8_t msgtxt_29[] = { +84, 104, 101, 32, 72, 101, 108, 109, 101, 116, 0 }; +const uint8_t msgtxt_30[] = { +70, 97, 108, 108, 115, 32, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 33, 0 }; +const uint8_t msgtxt_31[] = { +77, 97, 107, 101, 115, 32, 109, 101, 32, 105, 110, 118, 105, 115, 105, 98, 108, 101, 33, 0 }; +const uint8_t msgtxt_32[] = { +73, 32, 97, 109, 32, 110, 111, 119, 32, 118, 105, 115, 105, 98, 108, 101, 0 }; +const uint8_t msgtxt_33[] = { +65, 116, 32, 119, 104, 97, 116, 63, 0 }; +const uint8_t msgtxt_34[] = { +85, 115, 101, 32, 50, 32, 87, 111, 114, 100, 115, 0 }; +const uint8_t msgtxt_35[] = { +84, 104, 101, 110, 32, 104, 101, 32, 108, 101, 97, 118, 101, 115, 33, 0 }; +const uint8_t msgtxt_36[] = { +73, 32, 104, 101, 97, 114, 0 }; +const uint8_t msgtxt_37[] = { +116, 104, 101, 32, 118, 111, 105, 99, 101, 32, 111, 102, 0 }; +const uint8_t msgtxt_38[] = { +116, 104, 101, 32, 71, 111, 100, 100, 101, 115, 115, 32, 65, 84, 72, 69, 78, 69, 58, 0 }; +const uint8_t msgtxt_39[] = { +84, 65, 75, 69, 32, 84, 72, 69, 32, 83, 72, 73, 69, 76, 68, 44, 32, 73, 84, 32, 87, 73, 76, 76, 32, 80, 82, 79, 84, 69, 67, 84, 32, 89, 79, 85, 0 }; +const uint8_t msgtxt_40[] = { +73, 78, 32, 77, 79, 82, 69, 32, 87, 65, 89, 83, 32, 84, 72, 65, 78, 32, 79, 78, 69, 33, 0 }; +const uint8_t msgtxt_41[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 115, 116, 114, 97, 110, 103, 101, 32, 102, 108, 117, 116, 116, 101, 114, 115, 32, 100, 111, 119, 110, 33, 0 }; +const uint8_t msgtxt_42[] = { +84, 114, 121, 32, 97, 32, 68, 105, 114, 101, 99, 116, 105, 111, 110, 32, 40, 105, 46, 101, 46, 32, 70, 76, 89, 32, 78, 79, 82, 84, 72, 41, 0 }; +const uint8_t msgtxt_43[] = { +73, 39, 109, 32, 102, 108, 121, 105, 110, 103, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 65, 105, 114, 33, 0 }; +const uint8_t msgtxt_44[] = { +84, 104, 101, 32, 83, 97, 99, 107, 32, 105, 115, 32, 110, 111, 119, 32, 102, 117, 108, 108, 0 }; +const uint8_t msgtxt_45[] = { +72, 101, 32, 108, 111, 111, 107, 115, 32, 72, 117, 110, 103, 114, 121, 33, 0 }; +const uint8_t msgtxt_46[] = { +84, 104, 101, 32, 80, 101, 97, 115, 97, 110, 116, 32, 116, 97, 107, 101, 115, 32, 116, 104, 101, 32, 70, 111, 111, 100, 46, 46, 46, 0 }; +const uint8_t msgtxt_47[] = { +66, 101, 102, 111, 114, 101, 32, 104, 101, 32, 99, 97, 110, 32, 101, 97, 116, 44, 32, 116, 104, 101, 32, 119, 105, 108, 100, 32, 72, 121, 101, 110, 97, 0 }; +const uint8_t msgtxt_48[] = { +80, 111, 117, 110, 99, 101, 115, 32, 97, 110, 100, 32, 101, 97, 116, 115, 32, 116, 104, 101, 32, 70, 111, 111, 100, 33, 0 }; +const uint8_t msgtxt_49[] = { +46, 46, 46, 101, 97, 116, 115, 32, 105, 116, 44, 32, 116, 104, 101, 110, 32, 103, 114, 97, 116, 101, 102, 117, 108, 108, 121, 0 }; +const uint8_t msgtxt_50[] = { +73, 116, 32, 115, 97, 121, 115, 58, 0 }; +const uint8_t msgtxt_51[] = { +83, 101, 101, 107, 32, 116, 104, 101, 32, 69, 121, 101, 32, 111, 102, 32, 116, 104, 101, 32, 71, 82, 65, 73, 65, 69, 0 }; +const uint8_t msgtxt_52[] = { +84, 104, 101, 32, 66, 101, 114, 114, 105, 101, 115, 32, 119, 101, 114, 101, 32, 112, 111, 105, 115, 111, 110, 111, 117, 115, 33, 0 }; +const uint8_t msgtxt_53[] = { +84, 104, 101, 32, 72, 121, 101, 110, 97, 32, 100, 105, 101, 115, 33, 0 }; +const uint8_t msgtxt_54[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_55[] = { +84, 104, 101, 32, 71, 111, 100, 115, 32, 119, 105, 108, 108, 32, 99, 117, 116, 32, 111, 117, 116, 32, 121, 111, 117, 114, 32, 84, 111, 110, 103, 117, 101, 33, 0 }; +const uint8_t msgtxt_56[] = { +85, 103, 104, 33, 0 }; +const uint8_t msgtxt_57[] = { +65, 104, 104, 33, 32, 84, 104, 97, 116, 39, 115, 32, 98, 101, 116, 116, 101, 114, 44, 32, 116, 104, 97, 110, 107, 115, 33, 0 }; +const uint8_t msgtxt_58[] = { +73, 32, 99, 97, 110, 39, 116, 32, 115, 113, 117, 101, 101, 122, 101, 32, 116, 104, 114, 111, 117, 103, 104, 33, 0 }; +const uint8_t msgtxt_59[] = { +84, 104, 101, 32, 71, 82, 65, 73, 65, 69, 0 }; +const uint8_t msgtxt_60[] = { +109, 111, 97, 110, 32, 97, 110, 100, 32, 119, 97, 105, 108, 44, 32, 98, 101, 103, 103, 105, 110, 103, 32, 102, 111, 114, 32, 116, 104, 101, 105, 114, 32, 69, 121, 101, 33, 0 }; +const uint8_t msgtxt_61[] = { +115, 101, 101, 32, 109, 101, 32, 119, 105, 116, 104, 32, 116, 104, 101, 105, 114, 32, 115, 104, 97, 114, 101, 100, 32, 69, 121, 101, 32, 97, 110, 100, 0 }; +const uint8_t msgtxt_62[] = { +83, 110, 97, 116, 99, 104, 32, 98, 97, 99, 107, 32, 116, 104, 101, 105, 114, 32, 69, 121, 101, 46, 46, 46, 0 }; +const uint8_t msgtxt_63[] = { +116, 104, 101, 110, 32, 103, 114, 117, 100, 103, 105, 110, 103, 108, 121, 32, 114, 101, 118, 101, 97, 108, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_64[] = { +73, 39, 109, 32, 112, 111, 105, 115, 111, 110, 101, 100, 33, 33, 0 }; +const uint8_t msgtxt_65[] = { +69, 118, 105, 108, 32, 72, 97, 114, 112, 105, 101, 115, 0 }; +const uint8_t msgtxt_66[] = { +115, 119, 111, 111, 112, 32, 100, 111, 119, 110, 32, 97, 110, 100, 32, 112, 114, 101, 118, 101, 110, 116, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_67[] = { +97, 114, 101, 32, 102, 111, 105, 108, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 78, 101, 116, 33, 0 }; +const uint8_t msgtxt_68[] = { +65, 82, 82, 71, 71, 72, 72, 33, 33, 0 }; +const uint8_t msgtxt_69[] = { +73, 32, 98, 101, 104, 101, 108, 100, 32, 77, 69, 68, 85, 83, 65, 0 }; +const uint8_t msgtxt_70[] = { +73, 39, 109, 32, 116, 117, 114, 110, 101, 100, 32, 116, 111, 32, 83, 116, 111, 110, 101, 33, 0 }; +const uint8_t msgtxt_71[] = { +73, 39, 109, 32, 108, 111, 111, 107, 105, 110, 103, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 83, 104, 105, 101, 108, 100, 0 }; +const uint8_t msgtxt_72[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 32, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 115, 0 }; +const uint8_t msgtxt_73[] = { +73, 39, 118, 101, 32, 98, 101, 104, 101, 97, 100, 101, 100, 32, 77, 69, 68, 85, 83, 65, 33, 0 }; +const uint8_t msgtxt_74[] = { +84, 104, 101, 32, 72, 101, 97, 100, 32, 114, 111, 108, 108, 115, 32, 97, 119, 97, 121, 33, 0 }; +const uint8_t msgtxt_75[] = { +66, 108, 111, 111, 100, 32, 116, 114, 105, 99, 107, 108, 101, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 101, 118, 101, 114, 101, 100, 32, 72, 101, 97, 100, 0 }; +const uint8_t msgtxt_76[] = { +70, 114, 111, 109, 32, 116, 104, 101, 32, 66, 108, 111, 111, 100, 32, 103, 114, 111, 119, 115, 32, 97, 32, 72, 111, 114, 115, 101, 33, 33, 0 }; +const uint8_t msgtxt_77[] = { +66, 101, 32, 109, 111, 114, 101, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 40, 105, 46, 101, 46, 32, 71, 73, 86, 69, 32, 70, 82, 85, 73, 84, 41, 0 }; +const uint8_t msgtxt_78[] = { +80, 69, 71, 65, 83, 85, 83, 32, 116, 104, 114, 111, 119, 115, 32, 109, 101, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_79[] = { +80, 69, 71, 65, 83, 85, 83, 32, 112, 117, 116, 115, 32, 109, 101, 32, 100, 111, 119, 110, 32, 116, 104, 101, 110, 32, 102, 108, 105, 101, 115, 32, 111, 102, 102, 33, 0 }; +const uint8_t msgtxt_80[] = { +84, 104, 101, 32, 75, 82, 65, 75, 69, 78, 0 }; +const uint8_t msgtxt_81[] = { +84, 101, 97, 114, 115, 32, 109, 101, 32, 116, 111, 32, 112, 101, 105, 99, 101, 115, 33, 33, 0 }; +const uint8_t msgtxt_82[] = { +73, 32, 104, 97, 118, 101, 32, 102, 114, 101, 101, 100, 32, 65, 78, 68, 82, 79, 77, 69, 68, 65, 33, 33, 0 }; +const uint8_t msgtxt_83[] = { +77, 89, 32, 83, 79, 78, 32, 89, 79, 85, 32, 72, 65, 86, 69, 32, 83, 85, 67, 67, 69, 69, 68, 69, 68, 0 }; +const uint8_t msgtxt_84[] = { +71, 79, 32, 78, 79, 87, 32, 65, 78, 68, 32, 76, 73, 86, 69, 32, 73, 78, 32, 80, 69, 65, 67, 69, 0 }; +const uint8_t msgtxt_85[] = { +87, 73, 84, 72, 32, 65, 78, 68, 82, 79, 77, 69, 68, 65, 0 }; +const uint8_t msgtxt_86[] = { +108, 111, 111, 107, 115, 32, 97, 116, 32, 116, 104, 101, 32, 72, 101, 97, 100, 46, 46, 46, 0 }; +const uint8_t msgtxt_87[] = { +65, 110, 100, 32, 105, 115, 32, 116, 117, 114, 110, 101, 100, 32, 116, 111, 32, 83, 116, 111, 110, 101, 33, 33, 0 }; +const uint8_t msgtxt_88[] = { +84, 104, 101, 32, 71, 111, 100, 115, 32, 100, 101, 115, 116, 114, 111, 121, 32, 109, 101, 32, 105, 110, 32, 100, 105, 115, 103, 117, 115, 116, 33, 0 }; +const uint8_t msgtxt_89[] = { +84, 114, 121, 32, 97, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 68, 105, 114, 101, 99, 116, 105, 111, 110, 0 }; +const uint8_t msgtxt_90[] = { +65, 32, 67, 97, 114, 118, 105, 110, 103, 32, 111, 102, 32, 77, 111, 117, 110, 116, 32, 79, 108, 121, 109, 112, 117, 115, 0 }; +const uint8_t msgtxt_91[] = { +84, 104, 101, 32, 82, 111, 111, 102, 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_92[] = { +66, 101, 32, 109, 111, 114, 101, 32, 115, 112, 101, 99, 105, 102, 105, 99, 0 }; +const uint8_t msgtxt_93[] = { +73, 39, 108, 108, 32, 104, 97, 118, 101, 32, 116, 111, 32, 99, 117, 116, 32, 116, 104, 111, 115, 101, 32, 67, 104, 97, 105, 110, 115, 33, 0 }; +const uint8_t msgtxt_94[] = { +83, 104, 101, 32, 105, 115, 32, 115, 101, 99, 117, 114, 101, 108, 121, 32, 99, 104, 97, 105, 110, 101, 100, 33, 0 }; +const uint8_t msgtxt_95[] = { +77, 69, 68, 85, 83, 65, 32, 115, 116, 114, 97, 110, 103, 108, 101, 115, 32, 109, 101, 33, 33, 0 }; +const uint8_t msgtxt_96[] = { +73, 32, 104, 97, 118, 101, 32, 110, 111, 32, 83, 119, 111, 114, 100, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, + msgtxt_92, + msgtxt_93, + msgtxt_94, + msgtxt_95, + msgtxt_96, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 167, + 9, 0, + 1, 2, 86, 73, +/* AUTO 0 */ + 194, + 3, 4, 58, +/* AUTO 100 */ + 165, + 4, 35, + 56, 64, +/* AUTO 100 */ + 165, + 4, 24, + 57, 64, +/* AUTO 100 */ + 165, + 4, 21, + 56, 64, +/* AUTO 100 */ + 165, + 4, 20, + 57, 64, +/* AUTO 100 */ + 165, + 4, 25, + 57, 64, +/* AUTO 100 */ + 168, + 6, 12, 0, 4, + 60, +/* AUTO 100 */ + 183, + 2, 38, 8, 4, 14, 3, 14, 39, 0, 39, + 125, 88, 126, 53, +/* AUTO 100 */ + 169, + 1, 32, 4, 19, + 109, 110, +/* AUTO 100 */ + 178, + 5, 43, 0, 1, 0, 4, 0, 1, + 81, 79, 81, +/* AUTO 100 */ + 174, + 2, 43, 0, 1, 0, 1, + 81, 83, 73, +/* AUTO 0 */ + 199, + 19, 0, + 118, 130, 131, 61, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 */ + 178, + 5, 40, 0, 2, 0, 4, 0, 2, + 81, 79, 81, +/* AUTO 100 */ + 174, + 2, 40, 0, 2, 0, 1, + 81, 83, 73, +/* AUTO 0 */ + 198, + 19, 0, + 118, 145, 61, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 */ + 171, + 1, 38, 6, 12, + 118, 119, 120, 61, +/* AUTO 100 */ + 164, + 4, 40, + 63, +}; +const uint8_t actions[] = { +/* SAVE ANY */ + 1, 109, 0, + 5, 71, +/* INVE ANY */ + 1, 9, 0, + 5, 66, +/* WEAR SAND */ + 13, 22, 30, + 1, 19, 0, 19, 0, 49, + 5, 72, +/* REMO SAND */ + 11, 24, 30, + 1, 49, 8, 1, + 5, 11, 12, 61, +/* REMO SAND */ + 17, 24, 30, + 1, 49, 9, 1, 0, 49, 0, 19, + 5, 72, +/* GET SAND */ + 9, 10, 30, + 3, 19, 0, 19, + 52, 5, +/* KILL KRAK */ + 7, 69, 62, + 2, 43, + 118, 130, 131, 61, +/* WAIT ANY */ + 23, 113, 0, + 9, 1, 4, 37, 1, 49, 0, 13, 0, 1, + 13, 88, 54, 73, +/* AUTO 0 */ + 197, + 0, 1, + 58, 14, +/* WAIT ANY */ + 23, 113, 0, + 9, 1, 4, 38, 1, 49, 0, 14, 0, 1, + 13, 88, 54, 73, +/* AUTO 0 */ + 197, + 0, 1, + 58, 14, +/* WAIT ANY */ + 23, 113, 0, + 9, 1, 4, 39, 1, 49, 0, 17, 0, 1, + 13, 88, 54, 73, +/* AUTO 0 */ + 197, + 0, 1, + 58, 14, +/* GO CAVE */ + 9, 1, 28, + 4, 8, 0, 9, + 5, 54, +/* EXAM STAT */ + 23, 102, 27, + 2, 15, 14, 18, 14, 53, 0, 15, 0, 52, + 6, 8, 72, 64, +/* GET HELM */ + 5, 10, 69, + 2, 52, + 25, 26, +/* THRO DISC */ + 5, 85, 18, + 1, 8, + 33, 34, +/* AT STAT */ + 15, 116, 27, + 1, 8, 2, 52, 0, 8, + 88, 27, 53, 73, +/* AUTO 0 */ + 207, + 0, 52, 0, 15, 0, 18, + 72, 53, 29, 30, +/* GET HELM */ + 9, 10, 69, + 2, 18, 0, 18, + 52, 5, +/* GO CRAC */ + 10, 1, 47, + 4, 19, 1, 19, + 25, 14, 108, +/* WEAR HELM */ + 19, 22, 69, + 1, 18, 0, 18, 0, 53, 0, 2, + 72, 58, 29, 31, +/* REMO HELM */ + 19, 24, 69, + 1, 53, 0, 53, 0, 18, 0, 2, + 5, 72, 60, 32, +/* EXAM BEGG */ + 4, 102, 15, + 2, 7, + 19, +/* GIVE WATE */ + 23, 42, 70, + 1, 50, 2, 7, 14, 8, 0, 50, 0, 5, + 72, 16, 17, 73, +/* AUTO 0 */ + 203, + 0, 8, 0, 7, + 53, 55, 18, 35, +/* GO DAIS */ + 9, 1, 22, + 4, 5, 0, 6, + 54, 5, +/* PRAY ANY */ + 15, 40, 0, + 4, 6, 14, 12, 1, 8, + 5, 13, 88, 73, +/* AUTO 0 */ + 199, + 0, 12, + 53, 36, 37, 38, +/* AUTO 0 */ + 195, + 39, 40, 64, 64, +/* PRAY ANY */ + 23, 40, 0, + 4, 11, 1, 8, 14, 19, 14, 49, 0, 19, + 13, 88, 53, 41, +/* FLY NORT */ + 15, 35, 1, + 1, 49, 4, 13, 0, 14, + 5, 43, 88, 54, +/* FLY DOWN */ + 15, 35, 6, + 4, 13, 0, 37, 0, 1, + 5, 88, 54, 60, +/* FLY SOUT */ + 15, 35, 2, + 8, 1, 4, 14, 0, 13, + 5, 43, 88, 54, +/* FLY DOWN */ + 15, 35, 6, + 4, 14, 0, 38, 0, 1, + 5, 88, 54, 60, +/* GET WATE */ + 18, 10, 70, + 1, 5, 4, 8, 0, 5, 0, 50, + 5, 72, 44, +/* EXAM PEAS */ + 8, 102, 35, + 2, 20, 14, 45, + 45, +/* GIVE FRUI */ + 19, 42, 37, + 2, 20, 1, 25, 14, 27, 0, 25, + 46, 88, 47, 73, +/* AUTO 0 */ + 201, + 0, 25, 0, 26, + 62, 48, +/* GIVE FRUI */ + 23, 42, 37, + 1, 25, 14, 26, 0, 45, 0, 10, 0, 25, + 46, 49, 88, 73, +/* AUTO 0 */ + 207, + 0, 45, 0, 10, 0, 25, + 18, 53, 53, 55, +/* EXAM PARC */ + 5, 102, 66, + 3, 18, + 50, 51, +/* GIVE BERR */ + 23, 42, 34, + 1, 23, 2, 20, 0, 26, 0, 27, 0, 23, + 46, 47, 48, 73, +/* AUTO 0 */ + 207, + 0, 26, 0, 27, 0, 23, + 102, 103, 72, 55, +/* FLY EAST */ + 11, 35, 3, + 4, 14, 0, 17, + 5, 43, 88, 54, +/* FLY DOWN */ + 15, 35, 6, + 4, 17, 0, 39, 0, 1, + 5, 88, 54, 60, +/* WAIT ANY */ + 19, 113, 0, + 1, 49, 4, 16, 0, 1, 0, 26, + 14, 88, 58, 54, +/* FLY DOWN */ + 19, 35, 6, + 8, 1, 4, 26, 0, 1, 0, 16, + 5, 88, 60, 54, +/* GO TEMP */ + 10, 1, 21, + 4, 7, 0, 11, + 5, 54, 64, +/* EXAM KING */ + 5, 102, 9, + 2, 0, + 20, 21, +/* KILL KING */ + 6, 69, 9, + 2, 0, + 22, 24, 61, +/* GO PALA */ + 9, 1, 13, + 4, 3, 0, 1, + 54, 5, +/* GO PEDE */ + 9, 1, 71, + 4, 11, 0, 37, + 54, 5, +/* GO PEDE */ + 9, 1, 71, + 4, 12, 0, 38, + 54, 5, +/* GO PEDE */ + 9, 1, 71, + 4, 18, 0, 39, + 54, 5, +/* EAT WATE */ + 15, 117, 70, + 3, 50, 0, 50, 0, 5, + 5, 88, 72, 107, +/* EXAM SACK */ + 6, 102, 16, + 1, 5, + 5, 10, 9, +/* GO CAVE */ + 9, 1, 28, + 4, 24, 0, 35, + 54, 5, +/* GO CRAC */ + 11, 1, 47, + 4, 19, 1, 49, + 5, 88, 14, 108, +/* GO CRAC */ + 17, 1, 47, + 4, 19, 6, 49, 6, 19, 0, 20, + 5, 54, +/* LIGH TORC */ + 18, 26, 64, + 1, 35, 2, 34, 0, 35, 0, 9, + 5, 72, 64, +/* UNLI TORC */ + 14, 29, 64, + 1, 9, 0, 9, 0, 35, + 5, 72, 64, +/* EXAM GRAI */ + 15, 102, 43, + 2, 31, 14, 32, 0, 32, + 5, 6, 8, 53, +/* GET EYE */ + 13, 10, 42, + 2, 32, 1, 53, 0, 32, + 52, 5, +/* GET EYE */ + 15, 10, 42, + 2, 32, 2, 31, 6, 53, + 109, 111, 24, 61, +/* GIVE EYE */ + 15, 42, 42, + 1, 32, 2, 31, 0, 32, + 109, 112, 113, 73, +/* AUTO 0 */ + 201, + 0, 32, 0, 36, + 55, 53, +/* GET EYE */ + 13, 10, 42, + 2, 32, 5, 31, 0, 32, + 52, 5, +/* EXAM THOR */ + 19, 102, 32, + 4, 15, 14, 23, 14, 27, 0, 23, + 5, 53, 10, 8, +/* EAT BERR */ + 7, 117, 34, + 3, 23, + 5, 88, 114, 61, +/* FLY NORT */ + 15, 35, 1, + 1, 49, 4, 14, 0, 17, + 5, 43, 88, 54, +/* FLY DOWN */ + 15, 35, 6, + 1, 49, 4, 17, 0, 39, + 5, 88, 54, 60, +/* FLY SOUT */ + 15, 35, 2, + 1, 49, 4, 17, 0, 14, + 5, 43, 88, 54, +/* GET HALT */ + 15, 10, 45, + 2, 29, 9, 3, 0, 28, + 5, 53, 64, 73, +/* AUTO 0 */ + 199, + 0, 28, + 88, 115, 116, 55, +/* GET HALT */ + 19, 10, 45, + 8, 3, 14, 28, 0, 28, 0, 29, + 5, 53, 64, 73, +/* AUTO 0 */ + 203, + 0, 29, 0, 28, + 88, 52, 115, 117, +/* SPRE NET */ + 23, 122, 48, + 4, 34, 1, 33, 0, 33, 0, 58, 0, 3, + 5, 55, 53, 58, +/* DROP HALT */ + 9, 18, 45, + 1, 29, 0, 29, + 53, 5, +/* CLIM TEMP */ + 9, 90, 21, + 4, 32, 0, 34, + 5, 54, +/* WAIT ANY */ + 23, 113, 0, + 4, 22, 14, 37, 9, 4, 14, 40, 0, 37, + 13, 88, 53, 73, +/* AUTO 0 */ + 195, + 64, 88, 118, 119, +/* AUTO 0 */ + 193, + 120, 61, +/* WAIT ANY */ + 19, 113, 0, + 4, 22, 8, 4, 14, 40, 0, 40, + 13, 88, 53, 64, +/* EXAM SHIE */ + 15, 102, 24, + 4, 22, 1, 12, 0, 4, + 5, 121, 122, 58, +/* CUT MEDU */ + 19, 62, 52, + 2, 40, 1, 45, 0, 40, 0, 36, + 5, 123, 62, 73, +/* AUTO 0 */ + 206, + 0, 38, 0, 23, 0, 59, + 62, 124, 53, +/* EXAM SHIE */ + 9, 102, 24, + 7, 22, 1, 12, + 5, 122, +/* FEED PEAS */ + 4, 121, 35, + 2, 20, + 127, +/* GO PEGA */ + 15, 1, 54, + 2, 39, 0, 25, 0, 23, + 5, 54, 64, 73, +/* AUTO 0 */ + 199, + 0, 23, + 88, 54, 64, 128, +/* GO PEGA */ + 10, 1, 54, + 2, 3, 0, 25, + 5, 54, 64, +/* GO PEGA */ + 11, 1, 54, + 4, 25, 0, 27, + 43, 88, 54, 129, +/* CUT CHAI */ + 15, 62, 58, + 2, 43, 2, 41, 1, 45, + 118, 130, 131, 61, +/* CUT CHAI */ + 19, 62, 58, + 1, 45, 2, 44, 0, 41, 0, 42, + 5, 72, 64, 73, +/* AUTO 0 */ + 195, + 132, 36, 37, 38, +/* AUTO 0 */ + 195, + 133, 134, 135, 63, +/* WAVE HEAD */ + 19, 124, 53, + 1, 38, 2, 43, 0, 43, 0, 44, + 130, 136, 88, 73, +/* AUTO 0 */ + 203, + 0, 43, 0, 44, + 72, 137, 64, 64, +/* RAPE ANDR */ + 6, 51, 60, + 2, 41, + 118, 138, 61, +/* DROP ANY */ + 4, 18, 0, + 4, 17, + 25, +/* DROP ANY */ + 4, 18, 0, + 4, 14, + 25, +/* DROP ANY */ + 4, 18, 0, + 4, 13, + 25, +/* DROP ANY */ + 4, 18, 0, + 4, 25, + 25, +/* DROP DISC */ + 9, 18, 18, + 1, 8, 0, 8, + 53, 5, +/* DROP SACK */ + 9, 18, 16, + 1, 5, 0, 5, + 53, 5, +/* DROP TORC */ + 9, 18, 64, + 1, 9, 0, 9, + 53, 5, +/* DROP PARC */ + 9, 18, 66, + 1, 10, 0, 10, + 53, 5, +/* DROP SHIE */ + 9, 18, 24, + 1, 12, 0, 12, + 53, 5, +/* DROP BERR */ + 9, 18, 34, + 1, 23, 0, 23, + 53, 5, +/* DROP FRUI */ + 9, 18, 37, + 1, 25, 0, 25, + 53, 5, +/* DROP HALT */ + 9, 18, 45, + 1, 29, 0, 29, + 53, 5, +/* DROP NET */ + 9, 18, 48, + 1, 33, 0, 33, + 53, 5, +/* DROP TORC */ + 9, 18, 64, + 1, 35, 0, 35, + 53, 5, +/* DROP HEAD */ + 9, 18, 53, + 1, 38, 0, 38, + 53, 5, +/* DROP SWOR */ + 9, 18, 26, + 1, 45, 0, 45, + 53, 5, +/* DROP SACK */ + 9, 18, 16, + 1, 50, 0, 50, + 53, 5, +/* DROP SAND */ + 9, 18, 30, + 1, 19, 0, 19, + 53, 5, +/* DROP HELM */ + 9, 18, 69, + 1, 18, 0, 18, + 53, 5, +/* DROP EYE */ + 9, 18, 42, + 1, 32, 0, 32, + 53, 5, +/* FLY ANY */ + 5, 35, 0, + 4, 13, + 25, 139, +/* FLY ANY */ + 5, 35, 0, + 4, 14, + 25, 139, +/* FLY ANY */ + 5, 35, 0, + 4, 17, + 25, 139, +/* GET HALT */ + 13, 10, 45, + 2, 29, 13, 28, 0, 29, + 52, 5, +/* FIT HALT */ + 22, 127, 45, + 2, 39, 1, 29, 0, 29, 0, 39, 0, 3, + 55, 72, 5, +/* EAT FRUI */ + 13, 117, 37, + 3, 25, 0, 25, 0, 36, + 62, 107, +/* EXAM DISC */ + 6, 102, 18, + 3, 8, + 5, 6, 140, +/* EXAM TEMP */ + 5, 102, 21, + 4, 32, + 6, 141, +/* KILL MEDU */ + 4, 69, 52, + 2, 40, + 142, +/* FREE ANDR */ + 4, 128, 60, + 2, 41, + 143, +/* EXAM ANDR */ + 4, 102, 60, + 2, 41, + 144, +/* QUIT ANY */ + 0, 93, 0, + 63, +/* CUT MEDU */ + 8, 62, 52, + 2, 40, 6, 45, + 146, +/* CUT CHAI */ + 8, 62, 58, + 4, 28, 6, 45, + 146, +/* GET NET */ + 9, 10, 48, + 2, 33, 0, 33, + 52, 5, +/* AT ANY */ + 0, 116, 0, + 25, +/* HELP ANY */ + 1, 17, 0, + 25, 15, +/* KILL ANY */ + 1, 69, 0, + 25, 23, +/* EXAM HEAD */ + 7, 102, 53, + 3, 38, + 118, 119, 120, 61, +/* PRAY ANY */ + 1, 40, 0, + 5, 104, +/* WAIT ANY */ + 3, 113, 0, + 5, 13, 88, 88, +/* FUCK ANY */ + 0, 45, 0, + 105, +/* EXAM ANY */ + 1, 102, 0, + 6, 7, +/* CLIM ANY */ + 0, 90, 0, + 25, +/* SAY ANY */ + 1, 77, 0, + 5, 85, +/* EAT ANY */ + 0, 117, 0, + 106, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* *PROC */ + 208, 82, 79, 67, + /* *RUN */ + 210, 85, 78, 32, + /* *WALK */ + 215, 65, 76, 75, + /* *RIDE */ + 210, 73, 68, 69, + /* *MOUN */ + 205, 79, 85, 78, + /* *SWIM */ + 211, 87, 73, 77, + /* INVE */ + 73, 78, 86, 69, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *ACQU */ + 193, 67, 81, 85, + /* *GRAB */ + 199, 82, 65, 66, + /* *SEIZ */ + 211, 69, 73, 90, + /* *PICK */ + 208, 73, 67, 75, + /* *OBTA */ + 207, 66, 84, 65, + /* HELP */ + 72, 69, 76, 80, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DISC */ + 196, 73, 83, 67, + /* *PUT */ + 208, 85, 84, 32, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* LIGH */ + 76, 73, 71, 72, + /* *IGNI */ + 201, 71, 78, 73, + /* *BURN */ + 194, 85, 82, 78, + /* UNLI */ + 85, 78, 76, 73, + /* *EXTI */ + 197, 88, 84, 73, + /* *DOUS */ + 196, 79, 85, 83, + /* RUB */ + 82, 85, 66, 32, + /* *POLI */ + 208, 79, 76, 73, + /* *SHIN */ + 211, 72, 73, 78, + /* FLY */ + 70, 76, 89, 32, + /* *FLUT */ + 198, 76, 85, 84, + /* *FLAP */ + 198, 76, 65, 80, + /* *WING */ + 215, 73, 78, 71, + /* *HOVE */ + 200, 79, 86, 69, + /* PRAY */ + 80, 82, 65, 89, + /* *WORS */ + 215, 79, 82, 83, + /* GIVE */ + 71, 73, 86, 69, + /* *OFFE */ + 207, 70, 70, 69, + /* *DONA */ + 196, 79, 78, 65, + /* FUCK */ + 70, 85, 67, 75, + /* *PISS */ + 208, 73, 83, 83, + /* *BOLL */ + 194, 79, 76, 76, + /* *BAST */ + 194, 65, 83, 84, + /* *SHIT */ + 211, 72, 73, 84, + /* *WANK */ + 215, 65, 78, 75, + /* RAPE */ + 82, 65, 80, 69, + /* *SEDU */ + 211, 69, 68, 85, + /* *UNDR */ + 213, 78, 68, 82, + /* *RAVA */ + 210, 65, 86, 65, + /* KISS */ + 75, 73, 83, 83, + /* *CARE */ + 195, 65, 82, 69, + /* *STRO */ + 211, 84, 82, 79, + /* *FOND */ + 198, 79, 78, 68, + /* JUMP */ + 74, 85, 77, 80, + /* *LEAP */ + 204, 69, 65, 80, + /* *SPRI */ + 211, 80, 82, 73, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* *HACK */ + 200, 65, 67, 75, + /* *SLIC */ + 211, 76, 73, 67, + /* *SEVE */ + 211, 69, 86, 69, + /* *BEHE */ + 194, 69, 72, 69, + /* *DECA */ + 196, 69, 67, 65, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* *DEST */ + 196, 69, 83, 84, + /* *BREA */ + 194, 82, 69, 65, + /* *RUIN */ + 210, 85, 73, 78, + /* *SMAS */ + 211, 77, 65, 83, + /* *FIGH */ + 198, 73, 71, 72, + /* *BATT */ + 194, 65, 84, 84, + /* SAY */ + 83, 65, 89, 32, + /* *ASK */ + 193, 83, 75, 32, + /* *SPEA */ + 211, 80, 69, 65, + /* *TALK */ + 212, 65, 76, 75, + /* *WHIS */ + 215, 72, 73, 83, + /* USE */ + 85, 83, 69, 32, + /* *UTIL */ + 213, 84, 73, 76, + /* *EMPL */ + 197, 77, 80, 76, + /* THRO */ + 84, 72, 82, 79, + /* *SLIN */ + 211, 76, 73, 78, + /* *CHUC */ + 195, 72, 85, 67, + /* *TOSS */ + 212, 79, 83, 83, + /* *HURL */ + 200, 85, 82, 76, + /* CLIM */ + 67, 76, 73, 77, + /* *ASCE */ + 193, 83, 67, 69, + /* *SCAL */ + 211, 67, 65, 76, + /* QUIT */ + 81, 85, 73, 84, + /* SCOR */ + 83, 67, 79, 82, + /* PULL */ + 80, 85, 76, 76, + /* *TUG */ + 212, 85, 71, 32, + /* PUSH */ + 80, 85, 83, 72, + /* *PRES */ + 208, 82, 69, 83, + /* *SHOV */ + 211, 72, 79, 86, + /* *MOVE */ + 205, 79, 86, 69, + /* *SHIF */ + 211, 72, 73, 70, + /* EXAM */ + 69, 88, 65, 77, + /* *LOOK */ + 204, 79, 79, 75, + /* *SEAR */ + 211, 69, 65, 82, + /* *INSP */ + 201, 78, 83, 80, + /* *READ */ + 210, 69, 65, 68, + /* *OPEN */ + 207, 80, 69, 78, + /* *STUD */ + 211, 84, 85, 68, + /* SAVE */ + 83, 65, 86, 69, + /* SPIN */ + 83, 80, 73, 78, + /* *TURN */ + 212, 85, 82, 78, + /* *TWIS */ + 212, 87, 73, 83, + /* WAIT */ + 87, 65, 73, 84, + /* *DELA */ + 196, 69, 76, 65, + /* *STAL */ + 211, 84, 65, 76, + /* AT */ + 65, 84, 32, 32, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* *NIBB */ + 206, 73, 66, 66, + /* *DRIN */ + 196, 82, 73, 78, + /* FEED */ + 70, 69, 69, 68, + /* SPRE */ + 83, 80, 82, 69, + /* *LAY */ + 204, 65, 89, 32, + /* WAVE */ + 87, 65, 86, 69, + /* *SHOW */ + 211, 72, 79, 87, + /* *DISP */ + 196, 73, 83, 80, + /* FIT */ + 70, 73, 84, 32, + /* FREE */ + 70, 82, 69, 69, + /* *RELE */ + 210, 69, 76, 69, + /* DIG */ + 68, 73, 71, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* GOLD */ + 71, 79, 76, 68, + /* *COIN */ + 195, 79, 73, 78, + /* KING */ + 75, 73, 78, 71, + /* *POLY */ + 208, 79, 76, 89, + /* CHAM */ + 67, 72, 65, 77, + /* HALL */ + 72, 65, 76, 76, + /* PALA */ + 80, 65, 76, 65, + /* ROAD */ + 82, 79, 65, 68, + /* BEGG */ + 66, 69, 71, 71, + /* SACK */ + 83, 65, 67, 75, + /* *LEAT */ + 204, 69, 65, 84, + /* DISC */ + 68, 73, 83, 67, + /* TREE */ + 84, 82, 69, 69, + /* *STUM */ + 211, 84, 85, 77, + /* TEMP */ + 84, 69, 77, 80, + /* DAIS */ + 68, 65, 73, 83, + /* ALTA */ + 65, 76, 84, 65, + /* SHIE */ + 83, 72, 73, 69, + /* STON */ + 83, 84, 79, 78, + /* SWOR */ + 83, 87, 79, 82, + /* STAT */ + 83, 84, 65, 84, + /* CAVE */ + 67, 65, 86, 69, + /* *ENTR */ + 197, 78, 84, 82, + /* SAND */ + 83, 65, 78, 68, + /* *WING */ + 215, 73, 78, 71, + /* THOR */ + 84, 72, 79, 82, + /* *BUSH */ + 194, 85, 83, 72, + /* BERR */ + 66, 69, 82, 82, + /* PEAS */ + 80, 69, 65, 83, + /* *BLIN */ + 194, 76, 73, 78, + /* FRUI */ + 70, 82, 85, 73, + /* HARP */ + 72, 65, 82, 80, + /* TABL */ + 84, 65, 66, 76, + /* CLEA */ + 67, 76, 69, 65, + /* WOOD */ + 87, 79, 79, 68, + /* EYE */ + 69, 89, 69, 32, + /* GRAI */ + 71, 82, 65, 73, + /* *WITC */ + 215, 73, 84, 67, + /* HALT */ + 72, 65, 76, 84, + /* *SILV */ + 211, 73, 76, 86, + /* CRAC */ + 67, 82, 65, 67, + /* NET */ + 78, 69, 84, 32, + /* TUNN */ + 84, 85, 78, 78, + /* CHAM */ + 67, 72, 65, 77, + /* REFL */ + 82, 69, 70, 76, + /* MEDU */ + 77, 69, 68, 85, + /* HEAD */ + 72, 69, 65, 68, + /* PEGA */ + 80, 69, 71, 65, + /* *HORS */ + 200, 79, 82, 83, + /* MANE */ + 77, 65, 78, 69, + /* ISLE */ + 73, 83, 76, 69, + /* CHAI */ + 67, 72, 65, 73, + /* *SHAC */ + 211, 72, 65, 67, + /* ANDR */ + 65, 78, 68, 82, + /* *MAID */ + 205, 65, 73, 68, + /* KRAK */ + 75, 82, 65, 75, + /* *MONS */ + 205, 79, 78, 83, + /* TORC */ + 84, 79, 82, 67, + /* *FLAM */ + 198, 76, 65, 77, + /* PARC */ + 80, 65, 82, 67, + /* HYEN */ + 72, 89, 69, 78, + /* GAUN */ + 71, 65, 85, 78, + /* HELM */ + 72, 69, 76, 77, + /* WATE */ + 87, 65, 84, 69, + /* PEDE */ + 80, 69, 68, 69, + /* *IVOR */ + 201, 86, 79, 82, + /* THRO */ + 84, 72, 82, 79, + /* GUAR */ + 71, 85, 65, 82, + /* OFF */ + 79, 70, 70, 32, + /* *YOU */ + 217, 79, 85, 32, + /* POOL */ + 80, 79, 79, 76, + /* FIRE */ + 70, 73, 82, 69, + /* *COOK */ + 195, 79, 79, 75, + /* CARC */ + 67, 65, 82, 67, + /* HELL */ + 72, 69, 76, 76, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t automap[] = { + /* SACK */ + 83, 65, 67, 75, + 5, + /* DISC */ + 68, 73, 83, 67, + 8, + /* TORC */ + 84, 79, 82, 67, + 9, + /* PARC */ + 80, 65, 82, 67, + 10, + /* SHIE */ + 83, 72, 73, 69, + 12, + /* BERR */ + 66, 69, 82, 82, + 23, + /* FRUI */ + 70, 82, 85, 73, + 25, + /* TORC */ + 84, 79, 82, 67, + 35, + /* HEAD */ + 72, 69, 65, 68, + 38, + /* SWOR */ + 83, 87, 79, 82, + 45, + /* SACK */ + 83, 65, 67, 75, + 50, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst10.c b/Applications/games/myst10.c new file mode 100644 index 00000000..8e92ea3d --- /dev/null +++ b/Applications/games/myst10.c @@ -0,0 +1,2947 @@ +#define NUM_OBJ 73 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 255; +const uint8_t lightfill = 255; +const uint8_t startcarried = 0; +const uint8_t maxcar = 5; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 63; +const uint8_t startloc = 61; +const uint8_t loctxt_0[] = { +67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 67, 41, 32, 49, 57, 56, 51, 32, 32, 98, 121, 32, 66, 114, 105, 97, 110, 32, 72, 111, 119, 97, 114, 116, 104, 0 }; +const uint8_t loctxt_1[] = { +66, 97, 116, 104, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_2[] = { +66, 111, 105, 108, 101, 114, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_3[] = { +71, 114, 101, 101, 110, 32, 66, 101, 100, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_4[] = { +77, 97, 115, 116, 101, 114, 32, 66, 101, 100, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_5[] = { +68, 114, 101, 115, 115, 105, 110, 103, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_6[] = { +68, 105, 110, 105, 110, 103, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_7[] = { +75, 105, 116, 99, 104, 101, 110, 0 }; +const uint8_t loctxt_8[] = { +76, 105, 98, 114, 97, 114, 121, 0 }; +const uint8_t loctxt_9[] = { +66, 108, 117, 101, 32, 66, 101, 100, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_10[] = { +71, 114, 101, 101, 110, 32, 66, 97, 116, 104, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 66, 97, 99, 107, 32, 83, 116, 97, 105, 114, 115, 0 }; +const uint8_t loctxt_12[] = { +85, 116, 101, 110, 115, 105, 108, 32, 83, 116, 111, 114, 101, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 85, 112, 112, 101, 114, 32, 72, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_14[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 83, 116, 97, 105, 114, 115, 0 }; +const uint8_t loctxt_15[] = { +72, 97, 108, 108, 119, 97, 121, 0 }; +const uint8_t loctxt_16[] = { +76, 111, 117, 110, 103, 101, 0 }; +const uint8_t loctxt_17[] = { +83, 116, 117, 100, 121, 0 }; +const uint8_t loctxt_18[] = { +66, 108, 117, 101, 32, 66, 97, 116, 104, 114, 111, 111, 109, 0 }; +const uint8_t loctxt_19[] = { +66, 117, 116, 108, 101, 114, 115, 32, 80, 97, 110, 116, 114, 121, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 105, 110, 32, 70, 114, 111, 110, 116, 32, 111, 102, 32, 97, 32, 77, 97, 110, 115, 105, 111, 110, 0 }; +const uint8_t loctxt_21[] = { +67, 111, 110, 115, 101, 114, 118, 97, 116, 111, 114, 121, 0 }; +const uint8_t loctxt_22[] = { +80, 111, 116, 116, 105, 110, 103, 32, 83, 104, 101, 100, 0 }; +const uint8_t loctxt_23[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 83, 116, 111, 110, 101, 32, 66, 97, 108, 99, 111, 110, 121, 0 }; +const uint8_t loctxt_24[] = { +87, 97, 108, 108, 101, 100, 32, 71, 97, 114, 100, 101, 110, 0 }; +const uint8_t loctxt_25[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 70, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t loctxt_26[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 71, 114, 97, 118, 101, 108, 32, 68, 114, 105, 118, 101, 0 }; +const uint8_t loctxt_27[] = { +87, 97, 105, 116, 105, 110, 103, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 80, 108, 97, 116, 102, 111, 114, 109, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 82, 111, 111, 102, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 83, 116, 111, 110, 101, 32, 66, 97, 108, 117, 115, 116, 114, 97, 100, 101, 0 }; +const uint8_t loctxt_31[] = { +71, 114, 101, 101, 110, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_32[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 71, 97, 116, 101, 32, 84, 111, 119, 101, 114, 0 }; +const uint8_t loctxt_33[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 71, 97, 116, 101, 32, 72, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_34[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 72, 105, 103, 104, 32, 87, 97, 108, 108, 0 }; +const uint8_t loctxt_35[] = { +82, 97, 105, 108, 119, 97, 121, 32, 67, 97, 114, 114, 105, 97, 103, 101, 0 }; +const uint8_t loctxt_36[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 67, 104, 105, 109, 110, 101, 121, 32, 83, 116, 97, 99, 107, 0 }; +const uint8_t loctxt_37[] = { +82, 117, 105, 110, 101, 100, 32, 65, 114, 98, 111, 117, 114, 0 }; +const uint8_t loctxt_38[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 111, 117, 110, 116, 114, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_39[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 82, 97, 105, 108, 119, 97, 121, 32, 76, 105, 110, 101, 115, 0 }; +const uint8_t loctxt_40[] = { +82, 97, 105, 108, 119, 97, 121, 32, 67, 97, 114, 114, 105, 97, 103, 101, 0 }; +const uint8_t loctxt_41[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 82, 105, 118, 101, 114, 0 }; +const uint8_t loctxt_42[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 82, 105, 118, 101, 114, 32, 66, 101, 100, 0 }; +const uint8_t loctxt_43[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 82, 111, 111, 102, 0 }; +const uint8_t loctxt_44[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 111, 117, 110, 116, 114, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_45[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 111, 117, 110, 116, 114, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_46[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 80, 108, 97, 116, 102, 111, 114, 109, 0 }; +const uint8_t loctxt_47[] = { +42, 73, 39, 109, 32, 111, 110, 32, 116, 104, 101, 32, 87, 104, 97, 114, 102, 32, 80, 105, 108, 105, 110, 103, 115, 0 }; +const uint8_t loctxt_48[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 105, 114, 99, 117, 108, 97, 114, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_49[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 82, 111, 111, 102, 0 }; +const uint8_t loctxt_50[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 111, 117, 110, 116, 114, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_51[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 111, 117, 110, 116, 114, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_52[] = { +87, 97, 105, 116, 105, 110, 103, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_53[] = { +84, 105, 99, 107, 101, 116, 32, 79, 102, 102, 105, 99, 101, 0 }; +const uint8_t loctxt_54[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 82, 105, 99, 107, 101, 116, 121, 32, 111, 108, 100, 32, 87, 104, 97, 114, 102, 0 }; +const uint8_t loctxt_55[] = { +68, 101, 114, 101, 108, 105, 99, 116, 32, 87, 97, 114, 101, 104, 111, 117, 115, 101, 0 }; +const uint8_t loctxt_56[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 76, 97, 119, 110, 0 }; +const uint8_t loctxt_57[] = { +83, 111, 102, 116, 32, 70, 108, 111, 119, 101, 114, 98, 101, 100, 0 }; +const uint8_t loctxt_58[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 111, 117, 110, 116, 114, 121, 32, 82, 111, 97, 100, 0 }; +const uint8_t loctxt_59[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 77, 117, 100, 100, 121, 32, 82, 105, 118, 101, 114, 98, 97, 110, 107, 0 }; +const uint8_t loctxt_60[] = { +42, 73, 39, 109, 32, 111, 110, 32, 97, 32, 67, 105, 114, 99, 117, 108, 97, 114, 32, 80, 97, 116, 104, 0 }; +const uint8_t loctxt_61[] = { +82, 97, 105, 108, 119, 97, 121, 32, 67, 97, 114, 114, 105, 97, 103, 101, 0 }; +const uint8_t loctxt_62[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 110, 32, 69, 98, 111, 110, 121, 32, 83, 116, 97, 110, 100, 0 }; +const uint8_t loctxt_63[] = { +42, 73, 32, 116, 104, 105, 110, 107, 32, 73, 32, 100, 105, 100, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 114, 111, 110, 103, 32, 33, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 0, 0, 5, 0, 0, 0 } }, + { loctxt_2, { 0, 0, 0, 0, 7, 0 } }, + { loctxt_3, { 0, 13, 10, 0, 0, 0 } }, + { loctxt_4, { 0, 5, 13, 0, 0, 0 } }, + { loctxt_5, { 4, 0, 0, 1, 0, 0 } }, + { loctxt_6, { 0, 7, 15, 0, 0, 0 } }, + { loctxt_7, { 6, 0, 0, 0, 0, 0 } }, + { loctxt_8, { 62, 0, 17, 0, 0, 0 } }, + { loctxt_9, { 0, 0, 18, 13, 0, 0 } }, + { loctxt_10, { 0, 0, 0, 3, 0, 0 } }, + { loctxt_11, { 0, 0, 0, 0, 10, 19 } }, + { loctxt_12, { 0, 0, 19, 0, 0, 0 } }, + { loctxt_13, { 3, 0, 9, 4, 0, 14 } }, + { loctxt_14, { 0, 0, 0, 0, 13, 15 } }, + { loctxt_15, { 0, 16, 20, 6, 0, 0 } }, + { loctxt_16, { 15, 17, 21, 0, 0, 0 } }, + { loctxt_17, { 16, 0, 0, 8, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 9, 0, 0 } }, + { loctxt_19, { 0, 12, 0, 0, 11, 0 } }, + { loctxt_20, { 0, 0, 26, 0, 0, 0 } }, + { loctxt_21, { 0, 22, 0, 16, 0, 0 } }, + { loctxt_22, { 21, 0, 0, 0, 0, 0 } }, + { loctxt_23, { 0, 0, 0, 9, 0, 24 } }, + { loctxt_24, { 0, 0, 31, 0, 23, 0 } }, + { loctxt_25, { 0, 0, 0, 0, 0, 24 } }, + { loctxt_26, { 0, 48, 0, 20, 0, 0 } }, + { loctxt_27, { 0, 28, 0, 0, 0, 0 } }, + { loctxt_28, { 27, 0, 35, 0, 0, 0 } }, + { loctxt_29, { 29, 0, 36, 29, 0, 0 } }, + { loctxt_30, { 0, 0, 0, 0, 0, 23 } }, + { loctxt_31, { 0, 0, 0, 24, 0, 0 } }, + { loctxt_32, { 0, 0, 0, 0, 0, 33 } }, + { loctxt_33, { 0, 34, 38, 0, 32, 0 } }, + { loctxt_34, { 33, 0, 44, 0, 0, 0 } }, + { loctxt_35, { 0, 0, 0, 28, 0, 0 } }, + { loctxt_36, { 29, 37, 49, 0, 0, 0 } }, + { loctxt_37, { 36, 49, 43, 0, 0, 0 } }, + { loctxt_38, { 44, 45, 38, 51, 0, 0 } }, + { loctxt_39, { 0, 0, 0, 0, 46, 0 } }, + { loctxt_40, { 0, 0, 46, 0, 0, 0 } }, + { loctxt_41, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_42, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_43, { 43, 37, 43, 43, 0, 0 } }, + { loctxt_44, { 44, 44, 50, 44, 0, 0 } }, + { loctxt_45, { 44, 45, 45, 38, 0, 0 } }, + { loctxt_46, { 0, 0, 52, 0, 0, 39 } }, + { loctxt_47, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_48, { 60, 60, 56, 26, 0, 0 } }, + { loctxt_49, { 36, 49, 0, 37, 0, 0 } }, + { loctxt_50, { 50, 50, 58, 45, 0, 0 } }, + { loctxt_51, { 50, 51, 51, 51, 0, 0 } }, + { loctxt_52, { 51, 53, 0, 46, 0, 0 } }, + { loctxt_53, { 52, 0, 0, 0, 0, 0 } }, + { loctxt_54, { 0, 55, 59, 0, 0, 0 } }, + { loctxt_55, { 54, 0, 0, 0, 0, 0 } }, + { loctxt_56, { 0, 57, 60, 48, 0, 0 } }, + { loctxt_57, { 56, 0, 60, 0, 0, 0 } }, + { loctxt_58, { 58, 58, 59, 51, 0, 0 } }, + { loctxt_59, { 58, 0, 0, 54, 0, 0 } }, + { loctxt_60, { 48, 57, 48, 56, 0, 0 } }, + { loctxt_61, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_62, { 0, 8, 0, 0, 0, 0 } }, + { loctxt_63, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 61, + 35, + 40, + 27, + 28, + 39, + 46, + 0, + 0, + 52, + 0, + 53, + 0, + 42, + 18, + 0, + 0, + 2, + 0, + 37, + 12, + 25, + 0, + 0, + 58, + 38, + 32, + 34, + 0, + 59, + 54, + 55, + 47, + 41, + 0, + 0, + 26, + 20, + 0, + 15, + 1, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 0, + 15, + 16, + 17, + 0, + 19, + 21, + 22, + 23, + 24, + 31, + 35, + 40, + 61, + 63, + 0, + 0, + 0, + 0, + 9, + 4, + 3, + 0, + 0, + 34, +}; + + +const uint8_t objtxt_0[] = { +0 }; +const uint8_t objtxt_1[] = { +76, 101, 97, 116, 104, 101, 114, 32, 83, 101, 97, 116, 0 }; +const uint8_t objtxt_2[] = { +76, 101, 97, 116, 104, 101, 114, 32, 83, 101, 97, 116, 0 }; +const uint8_t objtxt_3[] = { +76, 101, 97, 116, 104, 101, 114, 32, 83, 101, 97, 116, 0 }; +const uint8_t objtxt_4[] = { +68, 111, 111, 114, 0 }; +const uint8_t objtxt_5[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_6[] = { +83, 112, 97, 110, 110, 101, 114, 0 }; +const uint8_t objtxt_7[] = { +83, 105, 103, 110, 0 }; +const uint8_t objtxt_8[] = { +67, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_9[] = { +70, 108, 105, 99, 107, 101, 114, 105, 110, 103, 32, 67, 97, 110, 100, 108, 101, 0 }; +const uint8_t objtxt_10[] = { +84, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_11[] = { +77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_12[] = { +83, 97, 102, 101, 0 }; +const uint8_t objtxt_13[] = { +79, 112, 101, 110, 32, 83, 97, 102, 101, 0 }; +const uint8_t objtxt_14[] = { +86, 105, 111, 108, 101, 116, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_15[] = { +66, 108, 117, 101, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_16[] = { +71, 114, 101, 101, 110, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_17[] = { +89, 101, 108, 108, 111, 119, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_18[] = { +82, 101, 100, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_19[] = { +66, 108, 97, 99, 107, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_20[] = { +87, 104, 105, 116, 101, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_21[] = { +83, 105, 108, 118, 101, 114, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_22[] = { +80, 105, 110, 107, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_23[] = { +71, 114, 101, 121, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_24[] = { +71, 108, 111, 119, 105, 110, 103, 32, 71, 111, 108, 100, 101, 110, 32, 70, 105, 103, 117, 114, 105, 110, 101, 0 }; +const uint8_t objtxt_25[] = { +82, 97, 105, 108, 119, 97, 121, 32, 83, 116, 97, 116, 105, 111, 110, 0 }; +const uint8_t objtxt_26[] = { +71, 97, 116, 101, 32, 72, 111, 117, 115, 101, 0 }; +const uint8_t objtxt_27[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_28[] = { +76, 97, 114, 103, 101, 32, 73, 114, 111, 110, 32, 71, 97, 116, 101, 115, 0 }; +const uint8_t objtxt_29[] = { +66, 114, 97, 115, 115, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_30[] = { +77, 117, 100, 0 }; +const uint8_t objtxt_31[] = { +82, 105, 118, 101, 114, 0 }; +const uint8_t objtxt_32[] = { +82, 111, 116, 116, 105, 110, 103, 32, 67, 114, 97, 116, 101, 115, 0 }; +const uint8_t objtxt_33[] = { +82, 105, 118, 101, 114, 0 }; +const uint8_t objtxt_34[] = { +87, 97, 116, 101, 114, 0 }; +const uint8_t objtxt_35[] = { +67, 111, 105, 108, 32, 111, 102, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_36[] = { +84, 105, 101, 100, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_37[] = { +68, 97, 110, 103, 108, 105, 110, 103, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_38[] = { +79, 97, 107, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_39[] = { +79, 112, 101, 110, 32, 68, 111, 111, 114, 0 }; +const uint8_t objtxt_40[] = { +83, 116, 97, 105, 114, 115, 0 }; +const uint8_t objtxt_41[] = { +66, 97, 116, 104, 0 }; +const uint8_t objtxt_42[] = { +66, 101, 100, 0 }; +const uint8_t objtxt_43[] = { +66, 101, 100, 0 }; +const uint8_t objtxt_44[] = { +87, 97, 114, 100, 114, 111, 98, 101, 0 }; +const uint8_t objtxt_45[] = { +84, 97, 98, 108, 101, 0 }; +const uint8_t objtxt_46[] = { +84, 105, 108, 101, 100, 32, 70, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_47[] = { +69, 98, 111, 110, 121, 32, 83, 116, 97, 110, 100, 0 }; +const uint8_t objtxt_48[] = { +66, 101, 100, 0 }; +const uint8_t objtxt_49[] = { +68, 97, 114, 107, 32, 79, 112, 101, 110, 105, 110, 103, 0 }; +const uint8_t objtxt_50[] = { +83, 117, 105, 116, 32, 111, 102, 32, 65, 114, 109, 111, 117, 114, 0 }; +const uint8_t objtxt_51[] = { +67, 111, 117, 99, 104, 0 }; +const uint8_t objtxt_52[] = { +76, 97, 114, 103, 101, 32, 87, 97, 108, 108, 32, 83, 97, 102, 101, 0 }; +const uint8_t objtxt_53[] = { +79, 112, 101, 110, 32, 87, 97, 108, 108, 32, 83, 97, 102, 101, 0 }; +const uint8_t objtxt_54[] = { +84, 114, 111, 119, 101, 108, 0 }; +const uint8_t objtxt_55[] = { +68, 101, 97, 100, 32, 80, 108, 97, 110, 116, 115, 0 }; +const uint8_t objtxt_56[] = { +72, 97, 109, 109, 101, 114, 0 }; +const uint8_t objtxt_57[] = { +66, 97, 108, 117, 115, 116, 114, 97, 100, 101, 0 }; +const uint8_t objtxt_58[] = { +68, 114, 121, 32, 70, 111, 117, 110, 116, 97, 105, 110, 0 }; +const uint8_t objtxt_59[] = { +67, 104, 105, 115, 101, 108, 0 }; +const uint8_t objtxt_60[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_61[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_62[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_63[] = { +68, 101, 97, 100, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 115, 0 }; +const uint8_t objtxt_64[] = { +83, 108, 105, 112, 32, 111, 102, 32, 80, 97, 112, 101, 114, 0 }; +const uint8_t objtxt_65[] = { +87, 101, 116, 32, 77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_66[] = { +68, 97, 114, 107, 32, 72, 111, 108, 101, 0 }; +const uint8_t objtxt_67[] = { +72, 101, 97, 112, 32, 111, 102, 32, 77, 101, 116, 97, 108, 0 }; +const uint8_t objtxt_68[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_69[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_70[] = { +87, 105, 110, 100, 111, 119, 0 }; +const uint8_t objtxt_71[] = { +83, 109, 97, 108, 108, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_72[] = { +79, 112, 101, 110, 32, 87, 97, 114, 100, 114, 111, 98, 101, 0 }; +const uint8_t objtxt_73[] = { +73, 114, 97, 116, 101, 32, 71, 97, 109, 101, 107, 101, 101, 112, 101, 114, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, + objtxt_58, + objtxt_59, + objtxt_60, + objtxt_61, + objtxt_62, + objtxt_63, + objtxt_64, + objtxt_65, + objtxt_66, + objtxt_67, + objtxt_68, + objtxt_69, + objtxt_70, + objtxt_71, + objtxt_72, + objtxt_73, +}; +const uint8_t msgtxt_0[] = { +0 }; +const uint8_t msgtxt_1[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 77, 121, 115, 116, 101, 114, 105, 111, 117, 115, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 78, 111, 46, 49, 48, 0 }; +const uint8_t msgtxt_2[] = { +84, 69, 78, 32, 76, 73, 84, 84, 76, 69, 32, 73, 78, 68, 73, 65, 78, 83, 0 }; +const uint8_t msgtxt_3[] = { +66, 121, 32, 66, 114, 105, 97, 110, 32, 72, 111, 119, 97, 114, 116, 104, 32, 38, 32, 87, 104, 101, 114, 110, 101, 114, 32, 66, 97, 114, 110, 101, 115, 0 }; +const uint8_t msgtxt_4[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_5[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 0 }; +const uint8_t msgtxt_6[] = { +73, 32, 115, 101, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 33, 0 }; +const uint8_t msgtxt_7[] = { +84, 114, 121, 32, 69, 88, 65, 77, 73, 78, 73, 78, 71, 32, 116, 104, 105, 110, 103, 115, 0 }; +const uint8_t msgtxt_8[] = { +72, 111, 119, 32, 63, 0 }; +const uint8_t msgtxt_9[] = { +84, 111, 32, 119, 104, 101, 114, 101, 32, 63, 0 }; +const uint8_t msgtxt_10[] = { +65, 116, 32, 119, 104, 97, 116, 32, 63, 0 }; +const uint8_t msgtxt_11[] = { +85, 115, 101, 32, 84, 87, 79, 32, 119, 111, 114, 100, 115, 0 }; +const uint8_t msgtxt_12[] = { +73, 32, 99, 97, 110, 39, 116, 32, 100, 111, 32, 116, 104, 97, 116, 32, 45, 32, 83, 111, 114, 114, 121, 0 }; +const uint8_t msgtxt_13[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 0 }; +const uint8_t msgtxt_14[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 101, 100, 32, 33, 0 }; +const uint8_t msgtxt_15[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_16[] = { +73, 116, 39, 115, 32, 99, 108, 111, 115, 101, 100, 0 }; +const uint8_t msgtxt_17[] = { +73, 116, 39, 115, 32, 111, 112, 101, 110, 0 }; +const uint8_t msgtxt_18[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_19[] = { +83, 97, 121, 115, 32, 58, 0 }; +const uint8_t msgtxt_20[] = { +32, 105, 115, 32, 117, 115, 101, 108, 101, 115, 115, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_21[] = { +87, 104, 121, 32, 63, 0 }; +const uint8_t msgtxt_22[] = { +110, 111, 32, 110, 101, 101, 100, 32, 102, 111, 114, 32, 116, 104, 97, 116, 32, 107, 105, 110, 100, 32, 111, 102, 32, 108, 97, 110, 103, 117, 97, 103, 101, 0 }; +const uint8_t msgtxt_23[] = { +85, 115, 101, 32, 97, 32, 67, 79, 76, 79, 85, 82, 0 }; +const uint8_t msgtxt_24[] = { +105, 116, 39, 115, 32, 98, 111, 108, 116, 101, 100, 32, 116, 111, 103, 101, 116, 104, 101, 114, 0 }; +const uint8_t msgtxt_25[] = { +84, 111, 32, 119, 104, 97, 116, 32, 63, 0 }; +const uint8_t msgtxt_26[] = { +67, 111, 110, 103, 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 32, 45, 32, 89, 111, 117, 39, 118, 101, 32, 100, 111, 110, 101, 32, 105, 116, 32, 33, 33, 0 }; +const uint8_t msgtxt_27[] = { +114, 111, 116, 116, 101, 110, 32, 112, 108, 97, 110, 107, 105, 110, 103, 0 }; +const uint8_t msgtxt_28[] = { +73, 116, 39, 115, 32, 49, 57, 56, 51, 46, 32, 71, 101, 116, 32, 77, 121, 115, 116, 101, 114, 105, 111, 117, 115, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 115, 0 }; +const uint8_t msgtxt_29[] = { +102, 114, 111, 109, 32, 121, 111, 117, 114, 32, 100, 101, 97, 108, 101, 114, 32, 78, 79, 87, 32, 33, 33, 0 }; +const uint8_t msgtxt_30[] = { +97, 32, 100, 105, 97, 108, 32, 116, 121, 112, 101, 32, 108, 111, 99, 107, 0 }; +const uint8_t msgtxt_31[] = { +100, 97, 114, 107, 110, 101, 115, 115, 0 }; +const uint8_t msgtxt_32[] = { +105, 116, 39, 115, 32, 97, 114, 109, 32, 112, 111, 105, 110, 116, 115, 32, 98, 97, 99, 107, 119, 97, 114, 100, 115, 0 }; +const uint8_t msgtxt_33[] = { +73, 39, 118, 101, 32, 68, 82, 79, 87, 78, 69, 68, 32, 33, 33, 0 }; +const uint8_t msgtxt_34[] = { +73, 39, 118, 101, 32, 98, 114, 111, 107, 101, 110, 32, 109, 121, 32, 78, 69, 67, 75, 32, 33, 33, 0 }; +const uint8_t msgtxt_35[] = { +116, 104, 101, 32, 99, 111, 117, 110, 116, 114, 121, 115, 105, 100, 101, 0 }; +const uint8_t msgtxt_36[] = { +97, 32, 98, 97, 114, 32, 106, 117, 116, 116, 105, 110, 103, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_37[] = { +84, 114, 97, 105, 110, 32, 115, 116, 111, 112, 115, 32, 33, 0 }; +const uint8_t msgtxt_38[] = { +84, 114, 97, 105, 110, 32, 115, 116, 97, 114, 116, 115, 32, 45, 32, 116, 104, 101, 110, 32, 115, 116, 111, 112, 115, 32, 33, 0 }; +const uint8_t msgtxt_39[] = { +84, 104, 101, 32, 109, 97, 116, 99, 104, 101, 115, 32, 97, 114, 101, 32, 119, 101, 116, 0 }; +const uint8_t msgtxt_40[] = { +79, 117, 116, 32, 111, 102, 32, 84, 73, 77, 69, 32, 33, 33, 0 }; +const uint8_t msgtxt_41[] = { +115, 112, 97, 99, 101, 115, 32, 102, 111, 114, 32, 102, 105, 103, 117, 114, 105, 110, 101, 115, 0 }; +const uint8_t msgtxt_42[] = { +73, 39, 118, 101, 32, 102, 97, 108, 108, 101, 110, 32, 116, 104, 114, 111, 117, 103, 104, 32, 33, 0 }; +const uint8_t msgtxt_43[] = { +77, 97, 116, 99, 104, 32, 102, 108, 97, 114, 101, 115, 32, 117, 112, 46, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_44[] = { +46, 46, 46, 46, 46, 116, 104, 101, 110, 32, 103, 111, 101, 115, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_45[] = { +74, 117, 115, 116, 32, 109, 97, 100, 101, 32, 105, 116, 32, 33, 0 }; +const uint8_t msgtxt_46[] = { +78, 105, 99, 101, 32, 115, 111, 102, 116, 32, 108, 97, 110, 100, 105, 110, 103, 0 }; +const uint8_t msgtxt_47[] = { +76, 79, 87, 69, 82, 32, 77, 65, 83, 83, 73, 78, 71, 84, 79, 78, 0 }; +const uint8_t msgtxt_48[] = { +85, 80, 80, 69, 82, 32, 77, 65, 83, 83, 73, 78, 71, 84, 79, 78, 0 }; +const uint8_t msgtxt_49[] = { +97, 32, 98, 97, 108, 99, 111, 110, 121, 0 }; +const uint8_t msgtxt_50[] = { +116, 104, 101, 32, 103, 97, 114, 100, 101, 110, 0 }; +const uint8_t msgtxt_51[] = { +105, 116, 39, 115, 32, 112, 97, 114, 116, 32, 111, 102, 32, 97, 32, 115, 101, 116, 0 }; +const uint8_t msgtxt_52[] = { +73, 39, 118, 101, 32, 102, 97, 108, 108, 101, 110, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 32, 33, 0 }; +const uint8_t msgtxt_53[] = { +110, 111, 32, 101, 120, 99, 117, 115, 101, 32, 102, 111, 114, 32, 118, 97, 110, 100, 97, 108, 105, 115, 109, 32, 33, 0 }; +const uint8_t msgtxt_54[] = { +87, 104, 105, 99, 104, 32, 107, 101, 121, 32, 63, 0 }; +const uint8_t msgtxt_55[] = { +71, 97, 109, 101, 107, 101, 101, 112, 101, 114, 32, 115, 104, 111, 111, 116, 115, 32, 109, 101, 32, 33, 33, 0 }; +const uint8_t msgtxt_56[] = { +83, 111, 111, 116, 32, 99, 104, 111, 107, 101, 115, 32, 109, 101, 32, 33, 33, 0 }; +const uint8_t msgtxt_57[] = { +73, 32, 115, 105, 110, 107, 32, 105, 110, 32, 116, 104, 101, 32, 109, 117, 100, 32, 33, 33, 0 }; +const uint8_t msgtxt_58[] = { +84, 114, 97, 105, 110, 32, 99, 114, 97, 115, 104, 101, 115, 32, 33, 33, 0 }; +const uint8_t msgtxt_59[] = { +73, 39, 109, 32, 104, 105, 116, 32, 98, 121, 32, 97, 32, 116, 114, 97, 105, 110, 32, 33, 33, 0 }; +const uint8_t msgtxt_60[] = { +116, 104, 101, 32, 99, 111, 117, 110, 116, 114, 121, 115, 105, 100, 101, 32, 103, 111, 105, 110, 103, 32, 98, 121, 0 }; +const uint8_t msgtxt_61[] = { +84, 104, 101, 32, 116, 114, 97, 105, 110, 32, 104, 97, 115, 32, 103, 111, 110, 101, 32, 33, 33, 0 }; +const uint8_t msgtxt_62[] = { +84, 104, 105, 115, 32, 112, 108, 97, 110, 107, 105, 110, 103, 32, 99, 111, 117, 108, 100, 32, 103, 105, 118, 101, 32, 119, 97, 121, 0 }; +const uint8_t msgtxt_63[] = { +45, 32, 105, 102, 32, 73, 32, 116, 114, 121, 32, 104, 97, 114, 100, 32, 101, 110, 111, 117, 103, 104, 32, 33, 33, 0 }; +const uint8_t msgtxt_64[] = { +72, 97, 109, 109, 101, 114, 32, 105, 115, 110, 39, 116, 32, 101, 110, 111, 117, 103, 104, 32, 104, 101, 114, 101, 32, 33, 0 }; +const uint8_t msgtxt_65[] = { +115, 116, 105, 99, 107, 121, 32, 109, 117, 100, 0 }; +const uint8_t msgtxt_66[] = { +73, 116, 39, 115, 32, 116, 111, 111, 32, 116, 105, 103, 104, 116, 108, 121, 32, 116, 105, 101, 100, 32, 115, 111, 0 }; +const uint8_t msgtxt_67[] = { +73, 32, 102, 101, 101, 108, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 74, 117, 109, 112, 121, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 167, + 9, 0, + 1, 2, 3, 73, +/* AUTO 0 */ + 203, + 0, 0, 0, 175, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 1, 0, 3, 0, 1, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 2, 0, 3, 0, 2, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 3, 0, 3, 0, 3, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 4, 0, 9, 0, 4, + 81, 79, 81, 73, +/* AUTO 0 */ + 207, + 0, 5, 0, 10, 0, 5, + 81, 79, 81, 67, +/* AUTO 100 */ + 174, + 9, 20, 9, 21, 9, 22, + 81, 77, 73, +/* AUTO 0 */ + 206, + 19, 0, 0, 20, 0, 175, + 58, 79, 81, +/* AUTO 0 */ + 192, + 81, +/* AUTO 100 */ + 174, + 8, 20, 9, 21, 9, 22, + 81, 77, 73, +/* AUTO 0 */ + 206, + 19, 0, 0, 21, 0, 175, + 58, 79, 81, +/* AUTO 0 */ + 192, + 81, +/* AUTO 100 */ + 174, + 8, 20, 8, 21, 9, 22, + 81, 77, 73, +/* AUTO 0 */ + 206, + 19, 0, 0, 22, 0, 175, + 58, 79, 81, +/* AUTO 0 */ + 192, + 81, +/* AUTO 100 */ + 174, + 8, 20, 8, 21, 8, 22, + 81, 77, 73, +/* AUTO 0 */ + 197, + 19, 0, + 40, 61, +/* AUTO 0 */ + 192, + 81, +/* AUTO 100 */ + 170, + 4, 39, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 197, + 19, 0, + 109, 61, +/* AUTO 0 */ + 196, + 0, 1, + 81, +/* AUTO 100 */ + 170, + 4, 34, 0, 2, + 81, 77, 73, +/* AUTO 0 */ + 197, + 19, 0, + 105, 61, +/* AUTO 0 */ + 196, + 0, 2, + 81, +/* AUTO 100 */ + 170, + 4, 36, 0, 3, + 81, 77, 73, +/* AUTO 0 */ + 197, + 19, 0, + 106, 61, +/* AUTO 0 */ + 196, + 0, 3, + 81, +/* AUTO 100 */ + 170, + 4, 59, 0, 4, + 81, 77, 73, +/* AUTO 0 */ + 197, + 19, 0, + 107, 61, +/* AUTO 0 */ + 196, + 0, 4, + 81, +/* AUTO 100 */ + 170, + 4, 61, 0, 5, + 81, 77, 73, +/* AUTO 0 */ + 197, + 19, 0, + 108, 61, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* AUTO 100 */ + 169, + 7, 2, 8, 15, + 57, 64, +/* AUTO 100 */ + 169, + 7, 11, 8, 15, + 57, 64, +/* AUTO 100 */ + 169, + 4, 2, 9, 15, + 56, 64, +/* AUTO 100 */ + 169, + 4, 11, 9, 15, + 56, 64, +/* AUTO 100 */ + 169, + 4, 12, 9, 15, + 56, 64, +/* AUTO 100 */ + 169, + 4, 19, 9, 15, + 56, 64, +/* AUTO 100 */ + 164, + 4, 63, + 63, +/* AUTO 100 */ + 167, + 1, 24, + 4, 26, 86, 63, +/* AUTO 100 */ + 180, + 4, 62, 2, 14, 2, 15, 2, 16, 0, 7, + 58, +/* AUTO 100 */ + 180, + 4, 62, 2, 17, 2, 18, 2, 19, 0, 8, + 58, +/* AUTO 100 */ + 180, + 4, 62, 2, 20, 2, 21, 2, 22, 0, 9, + 58, +/* AUTO 100 */ + 180, + 4, 62, 2, 23, 8, 7, 8, 8, 0, 10, + 58, +/* AUTO 100 */ + 176, + 4, 62, 8, 9, 8, 10, 14, 53, + 73, +/* AUTO 0 */ + 201, + 0, 52, 0, 53, + 72, 14, +/* AUTO 100 */ + 173, + 4, 1, 1, 16, 0, 16, + 55, 14, +/* AUTO 100 */ + 176, + 4, 41, 1, 11, 0, 11, 0, 65, + 72, +/* AUTO 100 */ + 173, + 4, 46, 9, 18, 0, 18, + 111, 58, +}; +const uint8_t actions[] = { +/* INVE ANY */ + 0, 3, 0, + 66, +/* QUIT ANY */ + 1, 4, 0, + 4, 63, +/* SAVE ANY */ + 1, 8, 0, + 4, 71, +/* WAIT ANY */ + 10, 7, 0, + 4, 61, 0, 35, + 4, 37, 54, +/* WAIT ANY */ + 10, 7, 0, + 4, 35, 0, 40, + 4, 38, 54, +/* WAIT ANY */ + 3, 7, 0, + 4, 88, 18, 88, +/* DIG ANY */ + 0, 13, 0, + 8, +/* USE TROW */ + 22, 54, 19, + 1, 54, 4, 59, 14, 19, 0, 19, 0, 59, + 4, 62, 6, +/* EXAM BED */ + 18, 14, 41, + 2, 43, 14, 64, 0, 64, 0, 4, + 4, 62, 6, +/* EXAM SUIT */ + 10, 14, 64, + 2, 50, 14, 49, + 4, 13, 32, +/* EXAM SAFE */ + 5, 14, 52, + 2, 52, + 4, 16, +/* EXAM SAFE */ + 18, 14, 52, + 2, 53, 14, 24, 0, 24, 0, 17, + 4, 62, 6, +/* EXAM WIND */ + 6, 14, 9, + 2, 27, + 4, 13, 36, +/* EXAM GATE */ + 5, 14, 46, + 2, 28, + 4, 16, +/* EXAM WIND */ + 6, 14, 9, + 2, 62, + 4, 13, 110, +/* EXAM WIND */ + 6, 14, 9, + 2, 60, + 4, 13, 35, +/* EXAM WIND */ + 6, 14, 9, + 2, 61, + 4, 13, 35, +/* EXAM TABL */ + 22, 14, 51, + 2, 10, 14, 11, 14, 65, 0, 11, 0, 52, + 4, 62, 6, +/* EXAM SAFE */ + 6, 14, 52, + 2, 12, + 4, 13, 30, +/* EXAM WHAR */ + 6, 14, 31, + 4, 54, + 4, 13, 27, +/* HELP ANY */ + 5, 6, 0, + 4, 54, + 112, 113, +/* EXAM CRAT */ + 22, 14, 57, + 2, 32, 14, 8, 14, 9, 0, 8, 0, 55, + 4, 62, 6, +/* EXAM CRAT */ + 22, 14, 57, + 2, 32, 13, 8, 14, 35, 14, 36, 0, 35, + 4, 53, 6, +/* EXAM SAFE */ + 18, 14, 52, + 2, 13, 14, 17, 0, 17, 0, 53, + 4, 62, 6, +/* EXAM MUD */ + 18, 14, 54, + 2, 30, 14, 29, 0, 29, 0, 59, + 4, 62, 6, +/* EXAM TROW */ + 6, 14, 19, + 1, 54, + 4, 13, 115, +/* EXAM EBON */ + 6, 14, 62, + 4, 62, + 4, 13, 41, +/* TIE ROPE */ + 22, 41, 55, + 4, 32, 1, 35, 0, 35, 0, 36, 0, 36, + 4, 72, 53, +/* CLIM ROPE */ + 9, 57, 55, + 2, 36, 0, 26, + 4, 54, +/* GET ROPE */ + 9, 10, 55, + 2, 35, 0, 35, + 4, 52, +/* DROP ROPE */ + 9, 18, 55, + 1, 35, 0, 35, + 4, 53, +/* GET ROPE */ + 5, 10, 55, + 2, 36, + 116, 12, +/* GET ROPE */ + 5, 10, 55, + 2, 37, + 116, 12, +/* CLIM ROPE */ + 9, 57, 55, + 2, 37, 0, 32, + 4, 54, +/* STAM FOOT */ + 10, 42, 35, + 4, 54, 0, 47, + 4, 54, 42, +/* SWIM ANY */ + 9, 46, 0, + 4, 47, 0, 41, + 4, 54, +/* SWIM ANY */ + 7, 46, 0, + 4, 41, + 4, 33, 61, 63, +/* SWIM ANY */ + 9, 46, 0, + 4, 42, 0, 59, + 4, 54, +/* DIVE ANY */ + 9, 47, 0, + 4, 41, 0, 42, + 4, 54, +/* GO STAI */ + 9, 1, 59, + 2, 40, 0, 14, + 4, 54, +/* GO GATE */ + 9, 1, 46, + 2, 26, 0, 33, + 4, 54, +/* 1983 ANY */ + 14, 56, 0, + 2, 12, 0, 12, 0, 13, + 4, 72, 14, +/* TURN 1983 */ + 14, 58, 78, + 2, 12, 0, 12, 0, 13, + 4, 72, 14, +/* PULL ARM */ + 17, 52, 65, + 2, 50, 14, 49, 0, 49, 0, 10, + 4, 62, +/* BREA SUIT */ + 18, 48, 64, + 2, 50, 1, 6, 0, 50, 0, 67, + 4, 72, 73, +/* AUTO 0 */ + 201, + 0, 23, 0, 15, + 6, 62, +/* BREA TILE */ + 17, 48, 56, + 2, 46, 1, 56, 1, 59, 14, 66, + 4, 73, +/* AUTO 0 */ + 201, + 0, 66, 0, 7, + 6, 62, +/* BREA TILE */ + 8, 48, 56, + 2, 46, 1, 56, + 114, +/* EXAM OPEN */ + 6, 14, 79, + 2, 49, + 4, 13, 31, +/* EXAM HOLE */ + 6, 14, 72, + 2, 66, + 4, 13, 31, +/* GO HOLE */ + 9, 1, 72, + 2, 66, 0, 2, + 4, 54, +/* GO OPEN */ + 9, 1, 79, + 2, 49, 0, 11, + 4, 54, +/* GO WIND */ + 9, 1, 9, + 2, 68, 0, 23, + 4, 54, +/* GO STAT */ + 9, 1, 53, + 2, 25, 0, 52, + 4, 54, +/* GO DOOR */ + 9, 1, 15, + 2, 39, 0, 15, + 4, 54, +/* OPEN DOOR */ + 17, 28, 15, + 2, 38, 1, 29, 0, 38, 0, 39, + 4, 72, +/* LIGH CAND */ + 17, 23, 44, + 1, 8, 1, 11, 0, 8, 0, 9, + 4, 72, +/* UNLI CAND */ + 13, 24, 44, + 1, 9, 0, 9, 0, 8, + 4, 72, +/* LIGH CAND */ + 8, 23, 44, + 1, 8, 1, 65, + 39, +/* LIGH MATC */ + 4, 23, 45, + 1, 65, + 39, +/* LIGH MATC */ + 15, 23, 45, + 1, 11, 8, 15, 0, 15, + 4, 60, 64, 73, +/* AUTO 0 */ + 195, + 43, 88, 88, 73, +/* AUTO 0 */ + 199, + 0, 15, + 88, 44, 58, 64, +/* LIGH MATC */ + 7, 23, 45, + 1, 11, + 4, 43, 88, 44, +/* CLIM BALU */ + 9, 57, 69, + 2, 57, 0, 30, + 4, 54, +/* CLIM FOUN */ + 9, 57, 70, + 2, 58, 0, 25, + 4, 54, +/* JUMP ANY */ + 10, 53, 0, + 4, 30, 0, 29, + 4, 54, 45, +/* JUMP ANY */ + 10, 53, 0, + 4, 49, 0, 57, + 4, 54, 46, +/* JUMP ANY */ + 7, 53, 0, + 4, 29, + 4, 34, 61, 63, +/* JUMP ANY */ + 7, 53, 0, + 4, 43, + 4, 34, 61, 63, +/* READ SIGN */ + 6, 17, 12, + 2, 5, + 4, 19, 47, +/* READ SIGN */ + 6, 17, 12, + 2, 7, + 4, 19, 48, +/* READ PAPE */ + 7, 17, 30, + 1, 64, + 4, 19, 28, 29, +/* SAY ANY */ + 1, 25, 0, + 4, 85, +/* GET FIGU */ + 0, 10, 40, + 23, +/* EXAM PLAN */ + 18, 14, 68, + 2, 55, 14, 16, 0, 16, 0, 21, + 4, 62, 6, +/* JUMP ANY */ + 0, 53, 0, + 21, +/* EXAM WIND */ + 6, 14, 9, + 2, 68, + 4, 13, 49, +/* GO WARD */ + 7, 1, 61, + 2, 72, + 4, 102, 61, 63, +/* READ ANY */ + 0, 17, 0, + 21, +/* USE ANY */ + 1, 54, 0, + 84, 20, +/* EXAM WIND */ + 6, 14, 9, + 2, 69, + 4, 13, 50, +/* EXAM WIND */ + 6, 14, 9, + 2, 70, + 4, 13, 50, +/* EXAM RED */ + 6, 14, 24, + 1, 18, + 4, 13, 51, +/* EXAM VIOL */ + 6, 14, 20, + 1, 14, + 4, 13, 51, +/* EXAM BLUE */ + 6, 14, 21, + 1, 15, + 4, 13, 51, +/* EXAM GREE */ + 6, 14, 22, + 1, 16, + 4, 13, 51, +/* EXAM YELL */ + 6, 14, 23, + 1, 17, + 4, 13, 51, +/* EXAM BLAC */ + 6, 14, 25, + 1, 19, + 4, 13, 51, +/* EXAM WHIT */ + 6, 14, 26, + 1, 20, + 4, 13, 51, +/* EXAM SILV */ + 6, 14, 27, + 1, 21, + 4, 13, 51, +/* EXAM PINK */ + 6, 14, 29, + 1, 22, + 4, 13, 51, +/* EXAM GREY */ + 6, 14, 28, + 1, 23, + 4, 13, 51, +/* EXAM TABL */ + 18, 14, 51, + 2, 45, 14, 71, 0, 71, 0, 6, + 4, 62, 6, +/* EXAM WARD */ + 5, 14, 61, + 2, 44, + 4, 16, +/* EXAM WARD */ + 6, 14, 61, + 2, 72, + 4, 13, 31, +/* OPEN WARD */ + 17, 28, 61, + 2, 44, 1, 71, 0, 44, 0, 72, + 4, 72, +/* OPEN ANY */ + 0, 28, 0, + 8, +/* GO EBON */ + 10, 1, 62, + 2, 47, 0, 62, + 54, 4, 64, +/* GO ANY */ + 0, 1, 0, + 12, +/* EXAM SUIT */ + 6, 14, 64, + 2, 50, + 4, 13, 24, +/* EXAM ANY */ + 0, 14, 0, + 5, +/* BREA ANY */ + 1, 48, 0, + 13, 103, +/* FUCK ANY */ + 1, 43, 0, + 13, 22, +/* GET KEY */ + 0, 10, 38, + 104, +/* DROP KEY */ + 0, 18, 38, + 104, +/* HELP ANY */ + 4, 6, 0, + 4, 30, + 117, +/* HELP ANY */ + 0, 6, 0, + 7, +/* TURN ANY */ + 1, 58, 0, + 4, 15, +/* DROP FIGU */ + 0, 18, 40, + 23, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* *ENTE */ + 197, 78, 84, 69, + /* INVE */ + 73, 78, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* SCOR */ + 83, 67, 79, 82, + /* HELP */ + 72, 69, 76, 80, + /* WAIT */ + 87, 65, 73, 84, + /* SAVE */ + 83, 65, 86, 69, + /* AWB */ + 65, 87, 66, 32, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* DIG */ + 68, 73, 71, 32, + /* EXAM */ + 69, 88, 65, 77, + /* *LOOK */ + 204, 79, 79, 75, + /* *INSP */ + 201, 78, 83, 80, + /* READ */ + 82, 69, 65, 68, + /* DROP */ + 68, 82, 79, 80, + /* *LEAV */ + 204, 69, 65, 86, + /* *DUMP */ + 196, 85, 77, 80, + /* AT */ + 65, 84, 32, 32, + /* TO */ + 84, 79, 32, 32, + /* LIGH */ + 76, 73, 71, 72, + /* UNLI */ + 85, 78, 76, 73, + /* SAY */ + 83, 65, 89, 32, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* CLOS */ + 67, 76, 79, 83, + /* *LOCK */ + 204, 79, 67, 75, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* EMPT */ + 69, 77, 80, 84, + /* *POUR */ + 208, 79, 85, 82, + /* EAT */ + 69, 65, 84, 32, + /* MAKE */ + 77, 65, 75, 69, + /* *BUIL */ + 194, 85, 73, 76, + /* FIX */ + 70, 73, 88, 32, + /* *REPA */ + 210, 69, 80, 65, + /* TIE */ + 84, 73, 69, 32, + /* STAM */ + 83, 84, 65, 77, + /* FUCK */ + 70, 85, 67, 75, + /* *SHIT */ + 211, 72, 73, 84, + /* *PISS */ + 208, 73, 83, 83, + /* SWIM */ + 83, 87, 73, 77, + /* DIVE */ + 68, 73, 86, 69, + /* BREA */ + 66, 82, 69, 65, + /* *UNBO */ + 213, 78, 66, 79, + /* *DISM */ + 196, 73, 83, 77, + /* *SMAS */ + 211, 77, 65, 83, + /* PULL */ + 80, 85, 76, 76, + /* JUMP */ + 74, 85, 77, 80, + /* USE */ + 85, 83, 69, 32, + /* *WITH */ + 215, 73, 84, 72, + /* 1983 */ + 49, 57, 56, 51, + /* CLIM */ + 67, 76, 73, 77, + /* TURN */ + 84, 85, 82, 78, + /* *ROTA */ + 210, 79, 84, 65, + /* *TWIS */ + 212, 87, 73, 83, + /* *SPIN */ + 211, 80, 73, 78, + /* *DIAL */ + 196, 73, 65, 76, + /* SIT */ + 83, 73, 84, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* CARR */ + 67, 65, 82, 82, + /* *TRAI */ + 212, 82, 65, 73, + /* WIND */ + 87, 73, 78, 68, + /* COUN */ + 67, 79, 85, 78, + /* PLAT */ + 80, 76, 65, 84, + /* SIGN */ + 83, 73, 71, 78, + /* WAIT */ + 87, 65, 73, 84, + /* ROOM */ + 82, 79, 79, 77, + /* DOOR */ + 68, 79, 79, 82, + /* LINE */ + 76, 73, 78, 69, + /* ROAD */ + 82, 79, 65, 68, + /* SPAN */ + 83, 80, 65, 78, + /* TROW */ + 84, 82, 79, 87, + /* VIOL */ + 86, 73, 79, 76, + /* BLUE */ + 66, 76, 85, 69, + /* GREE */ + 71, 82, 69, 69, + /* YELL */ + 89, 69, 76, 76, + /* RED */ + 82, 69, 68, 32, + /* BLAC */ + 66, 76, 65, 67, + /* WHIT */ + 87, 72, 73, 84, + /* SILV */ + 83, 73, 76, 86, + /* GREY */ + 71, 82, 69, 89, + /* PINK */ + 80, 73, 78, 75, + /* PAPE */ + 80, 65, 80, 69, + /* WHAR */ + 87, 72, 65, 82, + /* WARE */ + 87, 65, 82, 69, + /* RAIL */ + 82, 65, 73, 76, + /* RIVE */ + 82, 73, 86, 69, + /* FOOT */ + 70, 79, 79, 84, + /* PILI */ + 80, 73, 76, 73, + /* BANK */ + 66, 65, 78, 75, + /* KEY */ + 75, 69, 89, 32, + /* BRAS */ + 66, 82, 65, 83, + /* FIGU */ + 70, 73, 71, 85, + /* BED */ + 66, 69, 68, 32, + /* OFFI */ + 79, 70, 70, 73, + /* TICK */ + 84, 73, 67, 75, + /* CAND */ + 67, 65, 78, 68, + /* MATC */ + 77, 65, 84, 67, + /* GATE */ + 71, 65, 84, 69, + /* TOWE */ + 84, 79, 87, 69, + /* WALL */ + 87, 65, 76, 76, + /* LEAT */ + 76, 69, 65, 84, + /* *SEAT */ + 211, 69, 65, 84, + /* TABL */ + 84, 65, 66, 76, + /* SAFE */ + 83, 65, 70, 69, + /* STAT */ + 83, 84, 65, 84, + /* MUD */ + 77, 85, 68, 32, + /* ROPE */ + 82, 79, 80, 69, + /* TILE */ + 84, 73, 76, 69, + /* CRAT */ + 67, 82, 65, 84, + /* WATE */ + 87, 65, 84, 69, + /* STAI */ + 83, 84, 65, 73, + /* BATH */ + 66, 65, 84, 72, + /* WARD */ + 87, 65, 82, 68, + /* EBON */ + 69, 66, 79, 78, + /* *STAN */ + 211, 84, 65, 78, + /* SUIT */ + 83, 85, 73, 84, + /* ARM */ + 65, 82, 77, 32, + /* COUC */ + 67, 79, 85, 67, + /* HAMM */ + 72, 65, 77, 77, + /* PLAN */ + 80, 76, 65, 78, + /* BALU */ + 66, 65, 76, 85, + /* FOUN */ + 70, 79, 85, 78, + /* CHIS */ + 67, 72, 73, 83, + /* HOLE */ + 72, 79, 76, 69, + /* OFF */ + 79, 70, 70, 32, + /* SMAL */ + 83, 77, 65, 76, + /* GAME */ + 71, 65, 77, 69, + /* DIAL */ + 68, 73, 65, 76, + /* LOCK */ + 76, 79, 67, 75, + /* 1983 */ + 49, 57, 56, 51, + /* OPEN */ + 79, 80, 69, 78, + /* GOLD */ + 71, 79, 76, 68, + /* OFF */ + 79, 70, 70, 32, + /* *YOU */ + 217, 79, 85, 32, + /* FLOO */ + 70, 76, 79, 79, + /* ADVE */ + 65, 68, 86, 69, + /* META */ + 77, 69, 84, 65, + 0, +}; +const uint8_t automap[] = { + /* SPAN */ + 83, 80, 65, 78, + 6, + /* CAND */ + 67, 65, 78, 68, + 8, + /* CAND */ + 67, 65, 78, 68, + 9, + /* MATC */ + 77, 65, 84, 67, + 11, + /* VIOL */ + 86, 73, 79, 76, + 14, + /* BLUE */ + 66, 76, 85, 69, + 15, + /* GREE */ + 71, 82, 69, 69, + 16, + /* YELL */ + 89, 69, 76, 76, + 17, + /* RED */ + 82, 69, 68, 32, + 18, + /* BLAC */ + 66, 76, 65, 67, + 19, + /* WHIT */ + 87, 72, 73, 84, + 20, + /* SILV */ + 83, 73, 76, 86, + 21, + /* PINK */ + 80, 73, 78, 75, + 22, + /* GREY */ + 71, 82, 69, 89, + 23, + /* GOLD */ + 71, 79, 76, 68, + 24, + /* BRAS */ + 66, 82, 65, 83, + 29, + /* TROW */ + 84, 82, 79, 87, + 54, + /* HAMM */ + 72, 65, 77, 77, + 56, + /* CHIS */ + 67, 72, 73, 83, + 59, + /* PAPE */ + 80, 65, 80, 69, + 64, + /* MATC */ + 77, 65, 84, 67, + 65, + /* SMAL */ + 83, 77, 65, 76, + 71, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +} diff --git a/Applications/games/myst11.c b/Applications/games/myst11.c new file mode 100644 index 00000000..237285cb --- /dev/null +++ b/Applications/games/myst11.c @@ -0,0 +1,3098 @@ +#define NUM_OBJ 57 +#define WORDSIZE 4 +#include + +struct location { + const uint8_t *text; + uint8_t exit[6]; +}; + +const uint8_t toomuch[] = { "I am carrying too much. " }; +const uint8_t dead[] = { "I am dead.\n" }; +const uint8_t stored_msg[] = { "I have stored " }; +const uint8_t stored_msg2[] = { "treasures. On a scale of 0 to 100, that rates " }; +const uint8_t dotnewline[] = { ".\n" }; +const uint8_t newline[] = { "\n" }; +const uint8_t carrying[] = { "I am carrying:\n" }; +const uint8_t dashstr[] = { " - " }; +const uint8_t nothing[] = { "nothing" }; +const uint8_t lightout[] = { "My light has run out." }; +const uint8_t lightoutin[] = { "My light runs out in " }; +const uint8_t turns[] = { "turns" }; +const uint8_t turn[] = { "turn" }; +const uint8_t whattodo[] = { "\nTell me what to do ? " }; +const uint8_t prompt[] = { "\n> " }; +const uint8_t dontknow[] = { "You use word(s) I don't know! " }; +const uint8_t givedirn[] = { "Give me a direction too. " }; +const uint8_t darkdanger[] = { "Dangerous to move in the dark! " }; +const uint8_t brokeneck[] = { "I fell down and broke my neck. " }; +const uint8_t cantgo[] = { "I can't go in that direction. " }; +const uint8_t dontunderstand[] = { "I don't understand your command. " }; +const uint8_t notyet[] = { "I can't do that yet. " }; +const uint8_t beyondpower[] = { "It is beyond my power to do that. " }; +const uint8_t okmsg[] = { "O.K. " }; +const uint8_t whatstr[] = { "What ? " }; +const uint8_t itsdark[] = { "I can't see. It is too dark!" }; +const uint8_t youare[] = { "I am in a " }; +const uint8_t nonestr[] = { "none" }; +const uint8_t obexit[] = { "\nObvious exits: " }; +const uint8_t canalsosee[] = { "I can also see: " }; +const uint8_t playagain[] = { "Do you want to play again Y/N: " }; +const uint8_t invcond[] = { "INVCOND" }; +const uint8_t *exitmsgptr[] = { + (uint8_t *)"North", + (uint8_t *)"South", + (uint8_t *)"East", + (uint8_t *)"West", + (uint8_t *)"Up", + (uint8_t *)"Down" +}; + + + +/* + * + * Game database follows below. Although linked into the same asm + * file to make life easier this is just "mere aggregation" for + * convenience, due to limits in the tool chain and the game licence + * not the GPL applies below this point + */ +const uint8_t startlamp = 250; +const uint8_t lightfill = 250; +const uint8_t startcarried = 3; +const uint8_t maxcar = 6; +const uint8_t treasure = 0; +const uint8_t treasures = 0; +const uint8_t lastloc = 41; +const uint8_t startloc = 1; +const uint8_t loctxt_0[] = { +32, 0 }; +const uint8_t loctxt_1[] = { +76, 101, 105, 115, 117, 114, 101, 32, 76, 111, 117, 110, 103, 101, 0 }; +const uint8_t loctxt_2[] = { +87, 97, 115, 104, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_3[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 71, 114, 97, 110, 100, 32, 72, 97, 108, 108, 0 }; +const uint8_t loctxt_4[] = { +68, 97, 114, 107, 32, 80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_5[] = { +72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 114, 114, 111, 114, 115, 0 }; +const uint8_t loctxt_6[] = { +72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 114, 114, 111, 114, 115, 0 }; +const uint8_t loctxt_7[] = { +72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 114, 114, 111, 114, 115, 0 }; +const uint8_t loctxt_8[] = { +72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 114, 114, 111, 114, 115, 0 }; +const uint8_t loctxt_9[] = { +72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 114, 114, 111, 114, 115, 0 }; +const uint8_t loctxt_10[] = { +72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 114, 114, 111, 114, 115, 0 }; +const uint8_t loctxt_11[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 110, 32, 65, 105, 114, 108, 111, 99, 107, 0 }; +const uint8_t loctxt_12[] = { +108, 97, 114, 103, 101, 32, 65, 113, 117, 97, 114, 105, 117, 109, 32, 84, 97, 110, 107, 0 }; +const uint8_t loctxt_13[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 110, 32, 65, 105, 114, 108, 111, 99, 107, 0 }; +const uint8_t loctxt_14[] = { +74, 101, 119, 101, 108, 108, 114, 121, 32, 69, 120, 104, 105, 98, 105, 116, 105, 111, 110, 0 }; +const uint8_t loctxt_15[] = { +77, 111, 114, 103, 117, 101, 0 }; +const uint8_t loctxt_16[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 69, 120, 101, 99, 117, 116, 105, 111, 110, 32, 67, 104, 97, 109, 98, 101, 114, 0 }; +const uint8_t loctxt_17[] = { +42, 73, 39, 109, 32, 98, 121, 32, 97, 32, 80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t loctxt_18[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 69, 103, 121, 112, 116, 105, 97, 110, 32, 84, 101, 109, 112, 108, 101, 0 }; +const uint8_t loctxt_19[] = { +68, 85, 83, 84, 66, 73, 78, 0 }; +const uint8_t loctxt_20[] = { +42, 73, 39, 109, 32, 97, 98, 111, 118, 101, 32, 97, 32, 100, 101, 101, 112, 32, 80, 105, 116, 0 }; +const uint8_t loctxt_21[] = { +42, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 69, 110, 99, 104, 97, 110, 116, 101, 100, 32, 87, 111, 111, 100, 108, 97, 110, 100, 0 }; +const uint8_t loctxt_22[] = { +84, 114, 101, 101, 32, 72, 111, 117, 115, 101, 32, 119, 105, 116, 104, 32, 97, 32, 104, 111, 108, 101, 32, 105, 110, 32, 114, 111, 111, 102, 0 }; +const uint8_t loctxt_23[] = { +77, 97, 105, 110, 116, 101, 110, 97, 110, 99, 101, 32, 87, 111, 114, 107, 115, 104, 111, 112, 0 }; +const uint8_t loctxt_24[] = { +83, 116, 111, 114, 101, 32, 82, 111, 111, 109, 0 }; +const uint8_t loctxt_25[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 108, 100, 32, 83, 101, 119, 101, 114, 0 }; +const uint8_t loctxt_26[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 108, 100, 32, 83, 101, 119, 101, 114, 0 }; +const uint8_t loctxt_27[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 108, 100, 32, 83, 101, 119, 101, 114, 0 }; +const uint8_t loctxt_28[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 108, 100, 32, 83, 101, 119, 101, 114, 0 }; +const uint8_t loctxt_29[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 108, 100, 32, 83, 101, 119, 101, 114, 0 }; +const uint8_t loctxt_30[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 111, 108, 100, 32, 83, 101, 119, 101, 114, 0 }; +const uint8_t loctxt_31[] = { +42, 73, 39, 109, 32, 98, 101, 115, 105, 100, 101, 32, 97, 32, 82, 117, 115, 116, 105, 99, 32, 87, 101, 108, 108, 0 }; +const uint8_t loctxt_32[] = { +77, 111, 100, 101, 108, 108, 101, 114, 39, 115, 32, 83, 116, 117, 100, 105, 111, 0 }; +const uint8_t loctxt_33[] = { +67, 114, 111, 119, 100, 101, 100, 32, 76, 101, 105, 115, 117, 114, 101, 32, 76, 111, 117, 110, 103, 101, 0 }; +const uint8_t loctxt_34[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 39, 65, 115, 99, 101, 110, 100, 32, 69, 118, 101, 114, 101, 115, 116, 39, 32, 68, 105, 115, 112, 108, 97, 121, 0 }; +const uint8_t loctxt_35[] = { +42, 73, 39, 109, 32, 105, 110, 32, 97, 110, 32, 39, 85, 110, 100, 101, 114, 115, 101, 97, 32, 87, 111, 114, 108, 100, 39, 32, 68, 105, 115, 112, 108, 97, 121, 0 }; +const uint8_t loctxt_36[] = { +68, 97, 109, 112, 32, 87, 101, 108, 108, 32, 83, 104, 97, 102, 116, 0 }; +const uint8_t loctxt_37[] = { +42, 73, 39, 109, 32, 114, 111, 112, 101, 100, 32, 116, 111, 32, 97, 32, 83, 116, 111, 110, 101, 32, 65, 108, 116, 97, 114, 46, 46, 46, 0 }; +const uint8_t loctxt_38[] = { +42, 73, 39, 109, 32, 115, 116, 97, 110, 100, 105, 110, 103, 32, 98, 121, 32, 116, 104, 101, 32, 65, 108, 116, 97, 114, 0 }; +const uint8_t loctxt_39[] = { +42, 73, 39, 109, 32, 97, 98, 111, 118, 101, 32, 97, 32, 100, 101, 101, 112, 32, 119, 105, 100, 101, 32, 80, 105, 116, 0 }; +const uint8_t loctxt_40[] = { +42, 73, 39, 109, 32, 105, 110, 32, 65, 108, 97, 100, 100, 105, 110, 39, 115, 32, 67, 97, 118, 101, 0 }; +const uint8_t loctxt_41[] = { +42, 79, 104, 33, 32, 79, 104, 33, 46, 46, 46, 73, 39, 109, 32, 105, 110, 32, 116, 104, 101, 32, 77, 101, 108, 116, 105, 110, 103, 32, 80, 111, 116, 32, 33, 0 }; + + +const struct location locdata[] = { + { loctxt_0, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_1, { 2, 0, 0, 5, 3, 0 } }, + { loctxt_2, { 0, 1, 0, 0, 0, 0 } }, + { loctxt_3, { 34, 0, 0, 35, 0, 1 } }, + { loctxt_4, { 4, 4, 0, 9, 0, 0 } }, + { loctxt_5, { 6, 5, 6, 8, 0, 0 } }, + { loctxt_6, { 7, 5, 5, 8, 0, 0 } }, + { loctxt_7, { 6, 7, 7, 9, 0, 0 } }, + { loctxt_8, { 6, 9, 10, 8, 0, 0 } }, + { loctxt_9, { 8, 10, 4, 7, 0, 0 } }, + { loctxt_10, { 9, 10, 10, 11, 0, 0 } }, + { loctxt_11, { 0, 0, 10, 0, 0, 0 } }, + { loctxt_12, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_13, { 0, 0, 0, 23, 0, 0 } }, + { loctxt_14, { 0, 0, 16, 0, 0, 0 } }, + { loctxt_15, { 0, 0, 0, 36, 0, 0 } }, + { loctxt_16, { 0, 39, 0, 0, 0, 0 } }, + { loctxt_17, { 0, 0, 0, 15, 0, 0 } }, + { loctxt_18, { 0, 0, 0, 17, 0, 0 } }, + { loctxt_19, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_20, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_21, { 0, 0, 0, 4, 22, 0 } }, + { loctxt_22, { 0, 0, 0, 0, 3, 21 } }, + { loctxt_23, { 0, 0, 13, 0, 0, 24 } }, + { loctxt_24, { 32, 0, 0, 0, 23, 0 } }, + { loctxt_25, { 28, 25, 26, 25, 0, 0 } }, + { loctxt_26, { 27, 25, 27, 25, 0, 0 } }, + { loctxt_27, { 28, 26, 26, 28, 0, 0 } }, + { loctxt_28, { 27, 25, 27, 29, 0, 0 } }, + { loctxt_29, { 26, 30, 28, 30, 0, 0 } }, + { loctxt_30, { 29, 2, 25, 29, 0, 0 } }, + { loctxt_31, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_32, { 0, 24, 0, 0, 0, 0 } }, + { loctxt_33, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_34, { 0, 3, 0, 0, 0, 0 } }, + { loctxt_35, { 0, 0, 3, 0, 0, 0 } }, + { loctxt_36, { 0, 0, 15, 0, 0, 0 } }, + { loctxt_37, { 0, 0, 0, 0, 0, 0 } }, + { loctxt_38, { 0, 0, 0, 0, 39, 0 } }, + { loctxt_39, { 16, 0, 0, 0, 36, 38 } }, + { loctxt_40, { 0, 0, 0, 0, 0, 21 } }, + { loctxt_41, { 0, 0, 0, 0, 0, 0 } }, +}; +const uint8_t objinit[] = { + 0, + 0, + 0, + 0, + 0, + 0, + 36, + 0, + 0, + 0, + 12, + 27, + 0, + 0, + 0, + 1, + 22, + 0, + 0, + 0, + 0, + 255, + 0, + 255, + 0, + 37, + 0, + 18, + 0, + 38, + 255, + 16, + 1, + 1, + 1, + 2, + 21, + 0, + 3, + 34, + 35, + 21, + 0, + 19, + 29, + 0, + 15, + 0, + 17, + 0, + 0, + 15, + 32, + 0, + 0, + 4, + 24, + 0, +}; + + +const uint8_t objtxt_0[] = { +32, 0 }; +const uint8_t objtxt_1[] = { +67, 111, 105, 110, 0 }; +const uint8_t objtxt_2[] = { +83, 109, 97, 108, 108, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_3[] = { +67, 108, 105, 109, 98, 101, 114, 39, 115, 32, 82, 111, 112, 101, 0 }; +const uint8_t objtxt_4[] = { +65, 112, 112, 108, 101, 0 }; +const uint8_t objtxt_5[] = { +80, 105, 101, 99, 101, 32, 111, 102, 32, 67, 104, 101, 101, 115, 101, 0 }; +const uint8_t objtxt_6[] = { +68, 97, 114, 107, 32, 84, 117, 110, 110, 101, 108, 0 }; +const uint8_t objtxt_7[] = { +80, 105, 112, 101, 114, 39, 115, 32, 70, 108, 117, 116, 101, 0 }; +const uint8_t objtxt_8[] = { +65, 110, 32, 65, 113, 117, 97, 108, 117, 110, 103, 0 }; +const uint8_t objtxt_9[] = { +84, 111, 114, 99, 104, 32, 40, 108, 105, 116, 41, 0 }; +const uint8_t objtxt_10[] = { +74, 97, 119, 115, 32, 73, 86, 0 }; +const uint8_t objtxt_11[] = { +83, 101, 119, 101, 114, 32, 82, 97, 116, 115, 0 }; +const uint8_t objtxt_12[] = { +71, 111, 108, 100, 101, 110, 32, 67, 97, 115, 107, 101, 116, 0 }; +const uint8_t objtxt_13[] = { +84, 97, 110, 110, 97, 32, 76, 101, 97, 118, 101, 115, 0 }; +const uint8_t objtxt_14[] = { +79, 108, 100, 32, 76, 97, 109, 112, 0 }; +const uint8_t objtxt_15[] = { +87, 111, 111, 100, 101, 110, 32, 66, 101, 97, 109, 0 }; +const uint8_t objtxt_16[] = { +67, 117, 112, 98, 111, 97, 114, 100, 32, 119, 105, 116, 104, 32, 107, 101, 121, 32, 105, 110, 32, 108, 111, 99, 107, 0 }; +const uint8_t objtxt_17[] = { +80, 105, 115, 116, 111, 108, 0 }; +const uint8_t objtxt_18[] = { +51, 32, 83, 105, 108, 118, 101, 114, 32, 66, 117, 108, 108, 101, 116, 115, 0 }; +const uint8_t objtxt_19[] = { +84, 97, 108, 105, 115, 109, 97, 110, 0 }; +const uint8_t objtxt_20[] = { +67, 114, 111, 119, 98, 97, 114, 0 }; +const uint8_t objtxt_21[] = { +66, 111, 120, 32, 111, 102, 32, 77, 97, 116, 99, 104, 101, 115, 0 }; +const uint8_t objtxt_22[] = { +69, 103, 121, 112, 116, 105, 97, 110, 32, 84, 97, 108, 105, 115, 109, 97, 110, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_23[] = { +80, 105, 101, 99, 101, 32, 111, 102, 32, 80, 97, 112, 101, 114, 0 }; +const uint8_t objtxt_24[] = { +83, 109, 97, 108, 108, 32, 66, 97, 114, 114, 101, 108, 0 }; +const uint8_t objtxt_25[] = { +82, 97, 122, 111, 114, 32, 83, 104, 97, 114, 112, 32, 80, 101, 110, 100, 117, 108, 117, 109, 32, 97, 98, 111, 118, 101, 32, 109, 101, 0 }; +const uint8_t objtxt_26[] = { +71, 111, 108, 100, 32, 75, 101, 121, 0 }; +const uint8_t objtxt_27[] = { +83, 97, 114, 99, 111, 112, 104, 97, 103, 117, 115, 0 }; +const uint8_t objtxt_28[] = { +83, 105, 110, 105, 115, 116, 101, 114, 32, 108, 111, 111, 107, 105, 110, 103, 32, 77, 117, 109, 109, 121, 0 }; +const uint8_t objtxt_29[] = { +80, 101, 110, 100, 117, 108, 117, 109, 32, 98, 117, 114, 105, 101, 100, 32, 105, 110, 32, 65, 108, 116, 97, 114, 0 }; +const uint8_t objtxt_30[] = { +67, 111, 105, 110, 0 }; +const uint8_t objtxt_31[] = { +84, 114, 97, 112, 100, 111, 111, 114, 46, 32, 84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 100, 111, 111, 114, 32, 98, 101, 121, 111, 110, 100, 0 }; +const uint8_t objtxt_32[] = { +80, 117, 98, 108, 105, 99, 32, 84, 101, 108, 101, 112, 104, 111, 110, 101, 0 }; +const uint8_t objtxt_33[] = { +79, 108, 100, 45, 70, 97, 115, 104, 105, 111, 110, 101, 100, 32, 83, 108, 111, 116, 32, 77, 97, 99, 104, 105, 110, 101, 0 }; +const uint8_t objtxt_34[] = { +83, 101, 97, 116, 115, 32, 97, 114, 111, 117, 110, 100, 32, 116, 104, 101, 32, 114, 111, 111, 109, 0 }; +const uint8_t objtxt_35[] = { +87, 97, 115, 104, 98, 97, 115, 105, 110, 115, 32, 38, 32, 84, 111, 105, 108, 101, 116, 115, 46, 32, 71, 114, 105, 100, 32, 105, 110, 32, 102, 108, 111, 111, 114, 0 }; +const uint8_t objtxt_36[] = { +84, 104, 101, 32, 80, 105, 101, 100, 32, 80, 105, 112, 101, 114, 32, 38, 32, 71, 117, 121, 32, 70, 97, 119, 107, 101, 115, 0 }; +const uint8_t objtxt_37[] = { +83, 109, 97, 108, 108, 32, 84, 111, 114, 99, 104, 0 }; +const uint8_t objtxt_38[] = { +68, 105, 115, 112, 108, 97, 121, 115, 32, 116, 111, 32, 78, 111, 114, 116, 104, 32, 38, 32, 87, 101, 115, 116, 0 }; +const uint8_t objtxt_39[] = { +69, 100, 109, 117, 110, 100, 32, 72, 105, 108, 108, 97, 114, 121, 32, 38, 32, 84, 101, 110, 115, 105, 110, 103, 0 }; +const uint8_t objtxt_40[] = { +74, 97, 99, 113, 117, 101, 115, 32, 67, 111, 117, 115, 116, 101, 97, 117, 32, 105, 110, 32, 83, 99, 117, 98, 97, 32, 71, 101, 97, 114, 0 }; +const uint8_t objtxt_41[] = { +83, 105, 103, 110, 32, 39, 78, 111, 32, 87, 97, 105, 116, 105, 110, 103, 39, 0 }; +const uint8_t objtxt_42[] = { +65, 113, 117, 97, 108, 117, 110, 103, 32, 40, 119, 111, 114, 110, 41, 0 }; +const uint8_t objtxt_43[] = { +82, 111, 112, 101, 32, 104, 97, 110, 103, 105, 110, 103, 32, 100, 111, 119, 110, 32, 116, 104, 101, 32, 87, 101, 108, 108, 0 }; +const uint8_t objtxt_44[] = { +72, 117, 109, 97, 110, 101, 32, 82, 97, 116, 32, 84, 114, 97, 112, 0 }; +const uint8_t objtxt_45[] = { +74, 97, 99, 107, 101, 116, 0 }; +const uint8_t objtxt_46[] = { +68, 101, 99, 111, 109, 112, 111, 115, 105, 110, 103, 32, 90, 111, 109, 98, 105, 101, 0 }; +const uint8_t objtxt_47[] = { +80, 105, 108, 101, 32, 111, 102, 32, 82, 111, 116, 116, 105, 110, 103, 32, 70, 108, 101, 115, 104, 0 }; +const uint8_t objtxt_48[] = { +77, 97, 115, 111, 110, 114, 121, 32, 98, 108, 111, 99, 107, 105, 110, 103, 32, 116, 104, 101, 32, 80, 97, 115, 115, 97, 103, 101, 0 }; +const uint8_t objtxt_49[] = { +68, 117, 115, 116, 32, 38, 32, 68, 101, 98, 114, 105, 115, 32, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 0 }; +const uint8_t objtxt_50[] = { +80, 97, 115, 115, 97, 103, 101, 32, 110, 111, 119, 32, 99, 108, 101, 97, 114, 101, 100, 0 }; +const uint8_t objtxt_51[] = { +65, 110, 32, 111, 112, 101, 110, 32, 100, 111, 111, 114, 0 }; +const uint8_t objtxt_52[] = { +80, 105, 108, 101, 32, 111, 102, 32, 74, 117, 110, 107, 0 }; +const uint8_t objtxt_53[] = { +71, 111, 108, 100, 101, 110, 32, 77, 97, 115, 107, 0 }; +const uint8_t objtxt_54[] = { +67, 117, 112, 98, 111, 97, 114, 100, 0 }; +const uint8_t objtxt_55[] = { +78, 97, 114, 114, 111, 119, 32, 99, 114, 97, 99, 107, 32, 105, 110, 32, 119, 97, 108, 108, 0 }; +const uint8_t objtxt_56[] = { +76, 111, 111, 115, 101, 32, 116, 114, 97, 112, 100, 111, 111, 114, 32, 105, 110, 32, 114, 111, 111, 102, 0 }; +const uint8_t objtxt_57[] = { +84, 114, 97, 112, 100, 111, 111, 114, 32, 115, 101, 99, 117, 114, 101, 100, 32, 98, 121, 32, 98, 101, 97, 109, 0 }; + + +const uint8_t *objtext[] = { + objtxt_0, + objtxt_1, + objtxt_2, + objtxt_3, + objtxt_4, + objtxt_5, + objtxt_6, + objtxt_7, + objtxt_8, + objtxt_9, + objtxt_10, + objtxt_11, + objtxt_12, + objtxt_13, + objtxt_14, + objtxt_15, + objtxt_16, + objtxt_17, + objtxt_18, + objtxt_19, + objtxt_20, + objtxt_21, + objtxt_22, + objtxt_23, + objtxt_24, + objtxt_25, + objtxt_26, + objtxt_27, + objtxt_28, + objtxt_29, + objtxt_30, + objtxt_31, + objtxt_32, + objtxt_33, + objtxt_34, + objtxt_35, + objtxt_36, + objtxt_37, + objtxt_38, + objtxt_39, + objtxt_40, + objtxt_41, + objtxt_42, + objtxt_43, + objtxt_44, + objtxt_45, + objtxt_46, + objtxt_47, + objtxt_48, + objtxt_49, + objtxt_50, + objtxt_51, + objtxt_52, + objtxt_53, + objtxt_54, + objtxt_55, + objtxt_56, + objtxt_57, +}; +const uint8_t msgtxt_0[] = { +79, 0 }; +const uint8_t msgtxt_1[] = { +73, 32, 109, 117, 115, 116, 32, 104, 97, 118, 101, 32, 100, 111, 122, 101, 100, 32, 111, 102, 102, 46, 32, 73, 39, 109, 32, 108, 111, 99, 107, 101, 100, 32, 105, 110, 33, 0 }; +const uint8_t msgtxt_2[] = { +84, 104, 101, 114, 101, 39, 115, 32, 97, 32, 67, 111, 105, 110, 32, 104, 101, 114, 101, 0 }; +const uint8_t msgtxt_3[] = { +73, 116, 32, 103, 105, 118, 101, 115, 32, 80, 114, 105, 122, 101, 115, 0 }; +const uint8_t msgtxt_4[] = { +73, 39, 118, 101, 32, 119, 111, 110, 32, 97, 32, 102, 108, 97, 115, 104, 108, 105, 103, 104, 116, 0 }; +const uint8_t msgtxt_5[] = { +80, 104, 111, 116, 111, 45, 101, 108, 101, 99, 116, 114, 105, 99, 32, 99, 101, 108, 108, 115, 32, 116, 114, 105, 103, 103, 101, 114, 32, 68, 105, 115, 112, 108, 97, 121, 0 }; +const uint8_t msgtxt_6[] = { +73, 39, 118, 101, 32, 108, 111, 115, 116, 33, 0 }; +const uint8_t msgtxt_7[] = { +67, 82, 73, 80, 69, 83, 33, 32, 84, 104, 101, 32, 83, 104, 97, 114, 107, 32, 98, 105, 116, 32, 109, 101, 32, 105, 110, 32, 72, 97, 108, 102, 0 }; +const uint8_t msgtxt_8[] = { +79, 46, 75, 46, 0 }; +const uint8_t msgtxt_9[] = { +73, 116, 39, 115, 32, 69, 109, 112, 116, 121, 33, 0 }; +const uint8_t msgtxt_10[] = { +73, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 115, 112, 101, 99, 105, 97, 108, 0 }; +const uint8_t msgtxt_11[] = { +73, 32, 99, 97, 110, 32, 115, 101, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_12[] = { +73, 116, 39, 115, 32, 79, 112, 101, 110, 0 }; +const uint8_t msgtxt_13[] = { +73, 116, 39, 115, 32, 76, 111, 99, 107, 101, 100, 0 }; +const uint8_t msgtxt_14[] = { +87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 77, 89, 83, 84, 69, 82, 73, 79, 85, 83, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 32, 35, 49, 49, 0 }; +const uint8_t msgtxt_15[] = { +68, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, 111, 32, 77, 97, 114, 103, 97, 114, 101, 116, 0 }; +const uint8_t msgtxt_16[] = { +72, 97, 118, 101, 32, 97, 32, 67, 111, 102, 102, 101, 101, 46, 46, 46, 97, 110, 100, 32, 84, 72, 73, 78, 75, 0 }; +const uint8_t msgtxt_17[] = { +78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 0 }; +const uint8_t msgtxt_18[] = { +83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 105, 115, 32, 72, 97, 112, 112, 101, 110, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_19[] = { +73, 32, 114, 101, 109, 101, 109, 98, 101, 114, 32, 99, 111, 109, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 87, 97, 120, 119, 111, 114, 107, 115, 46, 46, 0 }; +const uint8_t msgtxt_20[] = { +73, 116, 39, 115, 32, 83, 80, 79, 79, 75, 89, 33, 0 }; +const uint8_t msgtxt_21[] = { +83, 104, 97, 114, 107, 32, 115, 119, 105, 109, 115, 32, 99, 108, 111, 115, 101, 114, 46, 46, 46, 0 }; +const uint8_t msgtxt_22[] = { +73, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 97, 110, 121, 0 }; +const uint8_t msgtxt_23[] = { +73, 32, 99, 97, 110, 39, 116, 32, 115, 113, 117, 101, 101, 122, 101, 32, 116, 104, 114, 111, 117, 103, 104, 46, 46, 46, 121, 101, 116, 0 }; +const uint8_t msgtxt_24[] = { +82, 97, 116, 115, 32, 101, 97, 116, 32, 116, 104, 101, 32, 99, 104, 101, 101, 115, 101, 0 }; +const uint8_t msgtxt_25[] = { +82, 97, 116, 115, 32, 102, 111, 108, 108, 111, 119, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_26[] = { +84, 104, 101, 121, 32, 108, 111, 111, 107, 32, 104, 117, 110, 103, 114, 121, 33, 0 }; +const uint8_t msgtxt_27[] = { +82, 97, 116, 115, 32, 97, 114, 101, 110, 39, 116, 32, 104, 117, 110, 103, 114, 121, 32, 110, 111, 119, 0 }; +const uint8_t msgtxt_28[] = { +65, 32, 118, 111, 105, 99, 101, 32, 115, 97, 121, 115, 32, 58, 0 }; +const uint8_t msgtxt_29[] = { +39, 83, 97, 121, 32, 116, 104, 101, 32, 89, 101, 97, 114, 32, 105, 116, 32, 104, 97, 112, 112, 101, 110, 101, 100, 39, 0 }; +const uint8_t msgtxt_30[] = { +84, 111, 111, 116, 32, 116, 101, 32, 84, 111, 111, 116, 32, 116, 101, 32, 84, 111, 111, 116, 33, 0 }; +const uint8_t msgtxt_31[] = { +87, 104, 101, 110, 32, 73, 32, 119, 97, 115, 32, 51, 49, 32, 109, 121, 32, 115, 111, 110, 32, 119, 97, 115, 32, 56, 0 }; +const uint8_t msgtxt_32[] = { +32, 67, 111, 114, 114, 101, 99, 116, 33, 0 }; +const uint8_t msgtxt_33[] = { +46, 46, 46, 46, 46, 84, 104, 97, 116, 39, 115, 32, 66, 101, 116, 116, 101, 114, 33, 0 }; +const uint8_t msgtxt_34[] = { +73, 116, 39, 115, 32, 116, 111, 111, 32, 82, 105, 115, 107, 121, 33, 0 }; +const uint8_t msgtxt_35[] = { +84, 111, 114, 113, 117, 101, 109, 97, 100, 97, 39, 115, 32, 103, 111, 116, 32, 109, 101, 33, 46, 46, 46, 72, 101, 32, 75, 46, 79, 46, 115, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_36[] = { +84, 104, 97, 116, 32, 119, 97, 115, 32, 83, 84, 85, 80, 73, 68, 33, 32, 73, 39, 118, 101, 32, 100, 114, 111, 119, 110, 101, 100, 0 }; +const uint8_t msgtxt_37[] = { +73, 116, 39, 115, 32, 116, 111, 111, 32, 115, 109, 97, 108, 108, 0 }; +const uint8_t msgtxt_38[] = { +82, 97, 116, 115, 32, 103, 110, 97, 119, 32, 114, 111, 112, 101, 115, 46, 32, 70, 114, 101, 101, 32, 109, 101, 32, 106, 117, 115, 116, 32, 105, 110, 32, 116, 105, 109, 101, 33, 0 }; +const uint8_t msgtxt_39[] = { +72, 117, 110, 103, 114, 121, 32, 82, 97, 116, 115, 32, 119, 105, 108, 108, 32, 99, 104, 101, 119, 32, 97, 110, 121, 116, 104, 105, 110, 103, 46, 46, 0 }; +const uint8_t msgtxt_40[] = { +73, 32, 99, 97, 110, 32, 104, 101, 97, 114, 32, 82, 97, 116, 115, 32, 115, 99, 114, 97, 98, 98, 108, 105, 110, 103, 32, 97, 98, 111, 117, 116, 0 }; +const uint8_t msgtxt_41[] = { +65, 97, 97, 114, 114, 103, 103, 104, 104, 46, 46, 84, 104, 101, 32, 80, 101, 110, 100, 117, 108, 117, 109, 32, 114, 101, 97, 99, 104, 101, 100, 32, 109, 101, 33, 0 }; +const uint8_t msgtxt_42[] = { +80, 101, 110, 100, 117, 108, 117, 109, 32, 115, 119, 105, 110, 103, 115, 32, 108, 111, 119, 101, 114, 32, 97, 110, 100, 32, 108, 111, 119, 101, 114, 46, 46, 46, 0 }; +const uint8_t msgtxt_43[] = { +84, 114, 97, 112, 100, 111, 111, 114, 32, 105, 115, 32, 108, 111, 111, 115, 101, 33, 0 }; +const uint8_t msgtxt_44[] = { +72, 101, 39, 115, 32, 104, 105, 100, 105, 110, 103, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t msgtxt_45[] = { +73, 116, 39, 115, 32, 71, 117, 110, 112, 111, 119, 100, 101, 114, 32, 97, 110, 100, 32, 105, 116, 39, 115, 32, 70, 117, 115, 101, 100, 33, 0 }; +const uint8_t msgtxt_46[] = { +35, 33, 42, 46, 46, 115, 115, 46, 122, 122, 122, 46, 46, 73, 116, 39, 115, 32, 108, 105, 116, 0 }; +const uint8_t msgtxt_47[] = { +84, 105, 109, 101, 32, 112, 97, 115, 115, 101, 115, 46, 46, 46, 46, 0 }; +const uint8_t msgtxt_48[] = { +32, 105, 115, 32, 119, 114, 111, 110, 103, 0 }; +const uint8_t msgtxt_49[] = { +66, 32, 79, 32, 79, 32, 77, 32, 33, 46, 46, 32, 73, 32, 119, 97, 115, 32, 116, 111, 111, 32, 115, 108, 111, 119, 33, 0 }; +const uint8_t msgtxt_50[] = { +73, 116, 32, 104, 97, 110, 103, 115, 32, 98, 101, 104, 105, 110, 100, 32, 116, 104, 101, 32, 100, 111, 111, 114, 0 }; +const uint8_t msgtxt_51[] = { +73, 116, 39, 115, 32, 76, 111, 97, 100, 101, 100, 0 }; +const uint8_t msgtxt_52[] = { +70, 111, 114, 32, 65, 108, 108, 32, 116, 104, 101, 32, 77, 89, 83, 84, 69, 82, 73, 79, 85, 83, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 83, 0 }; +const uint8_t msgtxt_53[] = { +42, 32, 66, 32, 65, 32, 78, 32, 71, 32, 42, 32, 33, 0 }; +const uint8_t msgtxt_54[] = { +73, 39, 118, 101, 32, 75, 105, 108, 108, 101, 100, 32, 105, 116, 33, 0 }; +const uint8_t msgtxt_55[] = { +85, 117, 103, 103, 104, 104, 33, 32, 73, 116, 32, 98, 105, 116, 32, 109, 121, 32, 84, 104, 114, 111, 97, 116, 32, 79, 117, 116, 33, 0 }; +const uint8_t msgtxt_56[] = { +73, 116, 32, 109, 111, 118, 101, 115, 32, 99, 108, 111, 115, 101, 114, 46, 46, 46, 0 }; +const uint8_t msgtxt_57[] = { +73, 116, 32, 115, 97, 121, 115, 32, 39, 83, 101, 101, 32, 121, 111, 117, 114, 32, 76, 111, 99, 97, 108, 32, 68, 101, 97, 108, 101, 114, 0 }; +const uint8_t msgtxt_58[] = { +71, 101, 116, 32, 111, 117, 116, 32, 70, 65, 83, 84, 33, 0 }; +const uint8_t msgtxt_59[] = { +77, 97, 116, 99, 104, 32, 104, 97, 115, 32, 103, 111, 110, 101, 32, 111, 117, 116, 0 }; +const uint8_t msgtxt_60[] = { +77, 97, 116, 99, 104, 32, 98, 117, 114, 110, 115, 32, 100, 105, 109, 108, 121, 0 }; +const uint8_t msgtxt_61[] = { +85, 109, 109, 109, 109, 46, 46, 46, 86, 101, 114, 121, 32, 84, 97, 115, 116, 121, 33, 0 }; +const uint8_t msgtxt_62[] = { +89, 111, 117, 32, 97, 114, 101, 32, 65, 66, 79, 77, 73, 78, 65, 66, 76, 69, 33, 0 }; +const uint8_t msgtxt_63[] = { +73, 32, 110, 101, 101, 100, 32, 97, 32, 108, 101, 118, 101, 114, 0 }; +const uint8_t msgtxt_64[] = { +84, 114, 97, 112, 100, 111, 111, 114, 32, 105, 115, 32, 115, 101, 99, 117, 114, 101, 100, 0 }; +const uint8_t msgtxt_65[] = { +66, 32, 79, 32, 79, 32, 77, 32, 84, 104, 101, 114, 101, 39, 115, 32, 97, 110, 32, 69, 120, 112, 108, 111, 115, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_66[] = { +87, 104, 97, 116, 32, 97, 32, 77, 101, 115, 115, 33, 0 }; +const uint8_t msgtxt_67[] = { +73, 39, 118, 101, 32, 102, 97, 108, 108, 101, 110, 32, 100, 111, 119, 110, 32, 97, 110, 100, 32, 98, 114, 111, 107, 101, 110, 32, 109, 121, 32, 110, 101, 99, 107, 33, 0 }; +const uint8_t msgtxt_68[] = { +77, 117, 109, 109, 121, 32, 82, 101, 118, 105, 118, 101, 115, 32, 97, 110, 100, 32, 115, 101, 101, 115, 32, 84, 97, 108, 105, 115, 109, 97, 110, 0 }; +const uint8_t msgtxt_69[] = { +71, 105, 118, 101, 115, 32, 109, 101, 32, 97, 32, 71, 111, 108, 100, 101, 110, 32, 77, 97, 115, 107, 0 }; +const uint8_t msgtxt_70[] = { +46, 46, 46, 73, 39, 118, 101, 32, 98, 101, 101, 110, 32, 97, 115, 108, 101, 101, 112, 46, 32, 73, 116, 32, 119, 97, 115, 32, 97, 108, 108, 32, 97, 32, 68, 114, 101, 97, 109, 33, 0 }; +const uint8_t msgtxt_71[] = { +84, 104, 97, 110, 107, 32, 71, 111, 111, 100, 110, 101, 115, 115, 32, 73, 39, 118, 101, 32, 83, 117, 114, 118, 105, 118, 101, 100, 33, 0 }; +const uint8_t msgtxt_72[] = { +90, 111, 109, 98, 105, 101, 32, 98, 97, 114, 115, 32, 116, 104, 101, 32, 119, 97, 121, 33, 0 }; +const uint8_t msgtxt_73[] = { +73, 116, 39, 115, 32, 98, 101, 101, 110, 32, 86, 97, 110, 100, 97, 108, 105, 122, 101, 100, 33, 0 }; +const uint8_t msgtxt_74[] = { +85, 103, 104, 33, 46, 46, 73, 116, 39, 115, 32, 87, 65, 88, 33, 0 }; +const uint8_t msgtxt_75[] = { +77, 117, 109, 109, 121, 32, 82, 101, 118, 105, 118, 101, 115, 33, 46, 46, 83, 97, 121, 115, 32, 39, 85, 110, 98, 101, 108, 105, 101, 118, 101, 114, 33, 39, 0 }; +const uint8_t msgtxt_76[] = { +97, 110, 100, 32, 116, 104, 101, 110, 32, 83, 116, 114, 97, 110, 103, 108, 101, 115, 32, 109, 101, 33, 46, 46, 79, 111, 111, 111, 111, 103, 103, 104, 33, 0 }; +const uint8_t msgtxt_77[] = { +73, 39, 109, 32, 103, 111, 105, 110, 103, 32, 105, 110, 32, 99, 105, 114, 99, 108, 101, 115, 33, 0 }; +const uint8_t msgtxt_78[] = { +89, 111, 117, 114, 32, 80, 105, 101, 116, 121, 32, 105, 115, 32, 78, 111, 116, 101, 119, 111, 114, 116, 104, 121, 33, 0 }; +const uint8_t msgtxt_79[] = { +73, 116, 39, 115, 32, 76, 105, 116, 0 }; +const uint8_t msgtxt_80[] = { +73, 116, 39, 115, 32, 110, 111, 116, 32, 76, 105, 116, 0 }; +const uint8_t msgtxt_81[] = { +84, 104, 97, 116, 39, 115, 32, 85, 110, 110, 101, 99, 101, 115, 115, 97, 114, 121, 33, 32, 89, 111, 117, 32, 82, 97, 112, 115, 99, 97, 108, 108, 105, 111, 110, 33, 0 }; +const uint8_t msgtxt_82[] = { +39, 32, 87, 97, 120, 119, 111, 114, 107, 115, 32, 39, 32, 40, 67, 41, 32, 49, 57, 56, 51, 0 }; +const uint8_t msgtxt_83[] = { +98, 121, 32, 66, 114, 105, 97, 110, 32, 72, 111, 119, 97, 114, 116, 104, 32, 38, 32, 67, 108, 105, 102, 102, 32, 79, 103, 100, 101, 110, 0 }; +const uint8_t msgtxt_84[] = { +73, 32, 97, 109, 32, 110, 111, 119, 32, 100, 111, 117, 98, 108, 101, 32, 104, 105, 115, 32, 97, 103, 101, 0 }; +const uint8_t msgtxt_85[] = { +39, 83, 97, 121, 39, 32, 72, 111, 119, 32, 111, 108, 100, 32, 73, 32, 97, 109, 0 }; +const uint8_t msgtxt_86[] = { +111, 114, 32, 67, 111, 110, 116, 97, 99, 116, 32, 32, 68, 73, 71, 73, 84, 65, 76, 32, 70, 65, 78, 84, 65, 83, 73, 65, 39, 0 }; +const uint8_t msgtxt_87[] = { +83, 111, 109, 101, 111, 110, 101, 32, 99, 114, 101, 112, 116, 32, 117, 112, 32, 98, 101, 104, 105, 110, 100, 32, 109, 101, 33, 46, 46, 0 }; +const uint8_t msgtxt_88[] = { +66, 117, 116, 32, 87, 104, 97, 116, 32, 97, 110, 32, 65, 68, 86, 69, 78, 84, 85, 82, 69, 32, 105, 116, 32, 119, 97, 115, 33, 0 }; +const uint8_t msgtxt_89[] = { +66, 101, 97, 109, 32, 105, 115, 32, 116, 111, 111, 32, 108, 111, 110, 103, 33, 0 }; +const uint8_t msgtxt_90[] = { +85, 115, 101, 32, 116, 104, 101, 32, 80, 105, 115, 116, 111, 108, 33, 0 }; +const uint8_t msgtxt_91[] = { +86, 105, 111, 108, 101, 110, 99, 101, 32, 97, 99, 104, 105, 101, 118, 101, 115, 32, 78, 111, 116, 104, 105, 110, 103, 33, 0 }; +const uint8_t *msgptr[] = { + msgtxt_0, + msgtxt_1, + msgtxt_2, + msgtxt_3, + msgtxt_4, + msgtxt_5, + msgtxt_6, + msgtxt_7, + msgtxt_8, + msgtxt_9, + msgtxt_10, + msgtxt_11, + msgtxt_12, + msgtxt_13, + msgtxt_14, + msgtxt_15, + msgtxt_16, + msgtxt_17, + msgtxt_18, + msgtxt_19, + msgtxt_20, + msgtxt_21, + msgtxt_22, + msgtxt_23, + msgtxt_24, + msgtxt_25, + msgtxt_26, + msgtxt_27, + msgtxt_28, + msgtxt_29, + msgtxt_30, + msgtxt_31, + msgtxt_32, + msgtxt_33, + msgtxt_34, + msgtxt_35, + msgtxt_36, + msgtxt_37, + msgtxt_38, + msgtxt_39, + msgtxt_40, + msgtxt_41, + msgtxt_42, + msgtxt_43, + msgtxt_44, + msgtxt_45, + msgtxt_46, + msgtxt_47, + msgtxt_48, + msgtxt_49, + msgtxt_50, + msgtxt_51, + msgtxt_52, + msgtxt_53, + msgtxt_54, + msgtxt_55, + msgtxt_56, + msgtxt_57, + msgtxt_58, + msgtxt_59, + msgtxt_60, + msgtxt_61, + msgtxt_62, + msgtxt_63, + msgtxt_64, + msgtxt_65, + msgtxt_66, + msgtxt_67, + msgtxt_68, + msgtxt_69, + msgtxt_70, + msgtxt_71, + msgtxt_72, + msgtxt_73, + msgtxt_74, + msgtxt_75, + msgtxt_76, + msgtxt_77, + msgtxt_78, + msgtxt_79, + msgtxt_80, + msgtxt_81, + msgtxt_82, + msgtxt_83, + msgtxt_84, + msgtxt_85, + msgtxt_86, + msgtxt_87, + msgtxt_88, + msgtxt_89, + msgtxt_90, + msgtxt_91, +}; + + +const uint8_t status[] = { +/* AUTO 100 */ + 167, + 9, 1, + 14, 132, 133, 73, +/* AUTO 0 */ + 195, + 0, 15, 86, 73, +/* AUTO 0 */ + 199, + 0, 1, + 58, 19, 1, 20, +/* AUTO 100 */ + 182, + 1, 7, 12, 11, 8, 4, 0, 11, 0, 4, + 53, 60, 25, +/* AUTO 100 */ + 179, + 4, 34, 14, 3, 8, 6, 0, 6, + 5, 28, 29, 60, +/* AUTO 100 */ + 165, + 4, 2, + 57, 64, +/* AUTO 100 */ + 165, + 4, 31, + 56, 64, +/* AUTO 100 */ + 165, + 4, 3, + 57, 64, +/* AUTO 100 */ + 179, + 4, 35, 8, 7, 14, 8, 14, 42, + 5, 28, 31, 73, +/* AUTO 0 */ + 198, + 0, 7, + 60, 134, 135, +/* AUTO 100 */ + 168, + 7, 34, 0, 6, + 58, +/* AUTO 100 */ + 176, + 7, 35, 14, 8, 10, 55, 0, 7, + 58, +/* AUTO 100 */ + 171, + 4, 12, 6, 42, + 36, 88, 61, 63, +/* AUTO 100 */ + 165, + 4, 25, + 56, 64, +/* AUTO 100 */ + 164, + 4, 41, + 63, +/* AUTO 100 */ + 180, + 4, 20, 8, 4, 14, 19, 0, 11, 0, 37, + 62, +/* AUTO 100 */ + 183, + 4, 20, 0, 9, 0, 1, 0, 4, 0, 1, + 58, 81, 79, 81, +/* AUTO 100 */ + 171, + 4, 20, 14, 19, + 88, 35, 86, 73, +/* AUTO 0 */ + 199, + 0, 37, + 88, 88, 88, 54, +/* AUTO 100 */ + 170, + 4, 37, 0, 1, + 81, 77, 73, +/* AUTO 0 */ + 198, + 19, 3, + 40, 86, 86, +/* AUTO 0 */ + 198, + 19, 0, + 41, 61, 63, +/* AUTO 0 */ + 197, + 0, 1, + 81, 42, +/* AUTO 100 */ + 170, + 8, 8, 0, 2, + 81, 77, 73, +/* AUTO 0 */ + 202, + 19, 0, 3, 24, + 49, 61, 63, +/* AUTO 0 */ + 214, + 19, 0, 5, 24, 0, 24, 0, 49, 0, 2, + 72, 115, 81, +/* AUTO 0 */ + 200, + 19, 0, 0, 8, + 60, +/* AUTO 0 */ + 200, + 16, 0, 0, 2, + 81, +/* AUTO 100 */ + 168, + 2, 49, 7, 17, + 116, +/* AUTO 100 */ + 180, + 2, 49, 4, 17, 13, 48, 0, 48, 0, 50, + 72, +/* AUTO 40 */ + 145, 40, + 2, 46, 8, 12, 0, 46, 0, 47, + 72, 104, +/* AUTO 100 */ + 179, + 5, 46, 0, 4, 0, 4, 0, 4, + 0, 81, 79, 81, +/* AUTO 100 */ + 170, + 2, 46, 0, 4, + 81, 77, 73, +/* AUTO 0 */ + 198, + 19, 0, + 105, 61, 63, +/* AUTO 0 */ + 202, + 0, 4, 0, 12, + 81, 106, 60, +/* AUTO 100 */ + 171, + 8, 14, 0, 5, + 81, 77, 0, 73, +/* AUTO 0 */ + 196, + 16, 0, + 110, +/* AUTO 0 */ + 201, + 15, 0, 0, 14, + 109, 60, +/* AUTO 0 */ + 196, + 0, 5, + 81, +/* AUTO 100 */ + 178, + 7, 12, 0, 6, 0, 3, 0, 6, + 81, 79, 81, +/* AUTO 100 */ + 171, + 4, 12, 0, 6, + 81, 77, 0, 73, +/* AUTO 0 */ + 203, + 4, 12, 19, 0, + 7, 88, 61, 63, +/* AUTO 0 */ + 198, + 0, 6, + 81, 127, 21, +}; +const uint8_t actions[] = { +/* INSE COIN */ + 19, 28, 12, + 4, 1, 1, 1, 14, 37, 0, 37, + 18, 4, 53, 73, +/* AUTO 0 */ + 205, + 0, 1, 0, 19, 0, 37, + 62, 74, +/* HELP ANY */ + 4, 3, 0, + 4, 37, + 39, +/* LOOK PHON */ + 8, 7, 8, + 4, 1, 13, 1, + 123, +/* INSE COIN */ + 22, 28, 12, + 4, 1, 1, 30, 13, 37, 0, 30, 0, 19, + 62, 17, 6, +/* INSE COIN */ + 22, 28, 12, + 4, 1, 1, 1, 13, 37, 0, 1, 0, 19, + 17, 6, 62, +/* INSE COIN */ + 22, 28, 12, + 4, 1, 1, 30, 14, 37, 0, 37, 0, 30, + 18, 4, 72, +/* LOOK PHON */ + 13, 7, 8, + 4, 1, 14, 1, 0, 1, + 53, 2, +/* INSE COIN */ + 13, 28, 12, + 4, 1, 6, 30, 6, 1, + 22, 85, +/* LOOK SLOT */ + 4, 7, 67, + 4, 1, + 3, +/* SWIM ANY */ + 22, 53, 0, + 4, 12, 1, 42, 8, 13, 0, 11, 0, 13, + 54, 64, 60, +/* WASH ANY */ + 5, 31, 0, + 4, 2, + 8, 33, +/* INVE ANY */ + 0, 2, 0, + 66, +/* DROP TORC */ + 14, 18, 13, + 1, 9, 0, 9, 0, 37, + 59, 53, 64, +/* DROP TANN */ + 15, 18, 33, + 2, 28, 1, 13, 6, 22, + 8, 125, 126, 73, +/* AUTO 0 */ + 194, + 88, 61, 63, +/* OPEN GRID */ + 8, 23, 81, + 1, 2, 4, 2, + 12, +/* GO GRID */ + 13, 1, 81, + 4, 2, 1, 2, 0, 25, + 54, 8, +/* GO GRID */ + 8, 1, 81, + 4, 2, 6, 2, + 13, +/* LOOK SEAT */ + 13, 7, 7, + 4, 1, 14, 2, 0, 2, + 53, 11, +/* GET KEY */ + 11, 10, 83, + 2, 2, 0, 2, + 52, 0, 0, 8, +/* LOOK GRID */ + 8, 7, 81, + 4, 2, 1, 2, + 12, +/* LOOK GRID */ + 9, 7, 81, + 4, 2, 6, 2, + 0, 13, +/* PLAY FLUT */ + 14, 76, 82, + 1, 7, 2, 11, 0, 4, + 58, 8, 30, +/* GO CRAC */ + 8, 1, 63, + 4, 4, 10, 50, + 23, +/* GO CRAC */ + 13, 1, 63, + 4, 4, 11, 50, 0, 21, + 54, 64, +/* FEED RAT */ + 19, 37, 25, + 2, 11, 9, 5, 1, 5, 7, 37, + 0, 8, 24, 73, +/* AUTO 0 */ + 205, + 0, 5, 0, 19, 0, 5, + 62, 58, +/* LOOK RAT */ + 8, 7, 25, + 2, 11, 9, 5, + 26, +/* LOOK RAT */ + 8, 7, 25, + 2, 11, 8, 5, + 27, +/* LOOK PIPE */ + 13, 7, 85, + 4, 21, 14, 7, 0, 7, + 53, 11, +/* LIGH TORC */ + 19, 25, 13, + 1, 37, 0, 9, 0, 37, 0, 9, + 72, 74, 8, 64, +/* UNLI TORC */ + 19, 66, 13, + 1, 9, 0, 9, 0, 37, 0, 37, + 72, 74, 64, 8, +/* PLAY FLUT */ + 9, 76, 82, + 1, 7, 7, 36, + 8, 30, +/* SAY 1953 */ + 23, 57, 39, + 4, 34, 14, 3, 0, 3, 0, 31, 0, 6, + 62, 84, 32, 58, +/* SAY 46 */ + 23, 57, 24, + 4, 35, 14, 8, 14, 42, 0, 8, 0, 10, + 62, 84, 32, 73, +/* AUTO 0 */ + 196, + 0, 7, + 58, +/* WAIT ANY */ + 11, 77, 0, + 4, 21, 0, 31, + 47, 88, 88, 54, +/* SIT ANY */ + 0, 78, 0, + 8, +/* STAN ANY */ + 0, 79, 0, + 8, +/* GO TOIL */ + 6, 1, 65, + 4, 2, + 8, 88, 33, +/* WEAR AQUA */ + 18, 13, 17, + 1, 8, 0, 8, 0, 42, 0, 42, + 72, 74, 8, +/* GO AIRL */ + 4, 1, 69, + 1, 15, + 139, +/* GO AIRL */ + 14, 1, 69, + 4, 13, 0, 12, 0, 13, + 54, 64, 58, +/* GO AIRL */ + 14, 1, 69, + 4, 11, 0, 12, 0, 11, + 54, 64, 58, +/* SWIM ANY */ + 22, 53, 0, + 4, 12, 1, 42, 8, 11, 0, 13, 0, 11, + 54, 64, 60, +/* OPEN GRID */ + 8, 23, 81, + 4, 2, 6, 2, + 13, +/* TIE ROPE */ + 22, 68, 19, + 4, 31, 1, 3, 0, 3, 0, 43, 0, 43, + 8, 72, 53, +/* REMO AQUA */ + 22, 15, 17, + 1, 42, 7, 12, 0, 8, 0, 42, 0, 8, + 72, 53, 8, +/* REMO AQUA */ + 11, 15, 17, + 1, 42, 4, 12, + 36, 88, 61, 63, +/* GO WELL */ + 8, 1, 70, + 4, 31, 12, 43, + 34, +/* GO WELL */ + 13, 1, 70, + 4, 31, 2, 43, 0, 36, + 54, 64, +/* GET ROPE */ + 18, 10, 19, + 2, 43, 0, 43, 0, 3, 0, 3, + 72, 0, 52, +/* GET ROPE */ + 8, 10, 19, + 2, 3, 0, 3, + 52, +/* LOOK WELL */ + 8, 7, 70, + 4, 36, 17, 11, + 40, +/* PLAY FLUT */ + 14, 76, 82, + 17, 11, 1, 7, 0, 4, + 8, 30, 58, +/* PLAY FLUT */ + 5, 76, 82, + 1, 7, + 8, 30, +/* FEED RAT */ + 22, 37, 25, + 4, 37, 9, 5, 1, 5, 0, 5, 0, 19, + 62, 28, 73, +/* AUTO 0 */ + 207, + 0, 38, 0, 11, 0, 19, + 38, 88, 54, 62, +/* LOOK ALTA */ + 13, 7, 73, + 4, 38, 14, 19, 0, 19, + 11, 53, +/* LOOK TRAP */ + 15, 7, 27, + 3, 44, 14, 5, 0, 5, + 8, 88, 11, 53, +/* PRAY ANY */ + 0, 43, 0, + 128, +/* GO TUNN */ + 13, 1, 48, + 4, 36, 9, 9, 0, 20, + 54, 137, +/* GO TUNN */ + 12, 1, 48, + 4, 36, 8, 9, 0, 39, + 54, +/* WEAR TALI */ + 18, 13, 66, + 1, 19, 0, 19, 0, 22, 0, 22, + 72, 74, 8, +/* REMO TALI */ + 18, 15, 66, + 1, 22, 0, 22, 0, 19, 0, 19, + 72, 53, 8, +/* GO ROPE */ + 13, 1, 19, + 4, 31, 2, 43, 0, 36, + 54, 64, +/* LOOK GUY */ + 12, 7, 37, + 4, 21, 14, 24, 14, 49, + 44, +/* MOVE GUY */ + 18, 33, 37, + 4, 21, 14, 24, 14, 49, 0, 24, + 8, 11, 53, +/* LOOK BARR */ + 4, 7, 74, + 1, 24, + 45, +/* LIGH FUSE */ + 23, 25, 23, + 1, 24, 8, 14, 0, 2, 0, 3, 0, 2, + 81, 79, 81, 73, +/* AUTO 0 */ + 198, + 0, 8, + 46, 108, 58, +/* PLAY FLUT */ + 5, 76, 82, + 6, 7, + 22, 85, +/* SAY ANY */ + 9, 57, 0, + 4, 34, 9, 6, + 84, 48, +/* SAY ANY */ + 9, 57, 0, + 4, 35, 9, 7, + 84, 48, +/* SAY 1953 */ + 4, 57, 39, + 8, 6, + 85, +/* SAY 46 */ + 4, 57, 24, + 8, 7, + 85, +/* LOOK TOIL */ + 14, 7, 65, + 4, 2, 14, 45, 0, 45, + 11, 50, 53, +/* LOOK JACK */ + 14, 7, 21, + 1, 45, 14, 17, 0, 17, + 8, 11, 53, +/* LOOK JACK */ + 17, 7, 21, + 1, 45, 13, 17, 14, 18, 0, 18, + 11, 53, +/* LOOK PIST */ + 8, 7, 51, + 1, 17, 9, 10, + 9, +/* LOAD PIST */ + 23, 82, 51, + 1, 17, 1, 18, 9, 10, 0, 18, 0, 19, + 62, 8, 51, 73, +/* AUTO 0 */ + 211, + 0, 3, 0, 4, 0, 3, 0, 10, + 81, 79, 81, 58, +/* LOOK PIST */ + 8, 7, 51, + 1, 17, 8, 10, + 51, +/* FIRE ANY */ + 14, 80, 0, + 1, 17, 8, 10, 0, 3, + 81, 77, 73, +/* AUTO 0 */ + 201, + 19, 1, 0, 10, + 60, 73, +/* AUTO 0 */ + 201, + 19, 0, 0, 3, + 81, 9, +/* AUTO 0 */ + 200, + 2, 46, 0, 12, + 58, +/* AUTO 0 */ + 197, + 0, 3, + 81, 103, +/* RUB LAMP */ + 15, 64, 35, + 4, 40, 1, 14, 0, 1, + 87, 18, 88, 64, +/* RUB LAMP */ + 18, 64, 35, + 7, 40, 1, 14, 0, 1, 0, 40, + 87, 18, 54, +/* WEAR JACK */ + 4, 13, 21, + 1, 45, + 37, +/* LOOK PAPE */ + 6, 7, 76, + 1, 23, + 107, 102, 136, +/* READ PAPE */ + 6, 56, 76, + 1, 23, + 107, 102, 136, +/* LIGH MATC */ + 23, 25, 84, + 1, 21, 9, 14, 0, 5, 0, 2, 0, 5, + 81, 79, 81, 73, +/* AUTO 0 */ + 197, + 0, 14, + 58, 46, +/* EAT CHEE */ + 13, 34, 29, + 1, 5, 0, 5, 0, 19, + 111, 62, +/* EAT APPL */ + 6, 34, 57, + 1, 4, + 8, 88, 124, +/* EAT APPL */ + 5, 34, 57, + 6, 4, + 22, 85, +/* EAT CHEE */ + 5, 34, 29, + 6, 5, + 22, 85, +/* EAT ANY */ + 0, 34, 0, + 112, +/* GO DOOR */ + 4, 1, 60, + 2, 46, + 122, +/* GO DOOR */ + 9, 1, 60, + 2, 47, 0, 17, + 54, 64, +/* LOOK JUNK */ + 13, 7, 11, + 3, 52, 14, 20, 0, 20, + 53, 11, +/* LOOK JUNK */ + 14, 7, 11, + 3, 52, 14, 14, 0, 14, + 0, 53, 11, +/* GO PASS */ + 13, 1, 28, + 4, 17, 2, 50, 0, 18, + 54, 64, +/* OPEN CASK */ + 17, 23, 41, + 1, 12, 1, 26, 14, 13, 0, 13, + 53, 11, +/* OPEN SARC */ + 19, 23, 43, + 4, 18, 14, 28, 1, 20, 0, 28, + 12, 11, 53, 20, +/* OPEN SARC */ + 13, 23, 43, + 4, 18, 6, 20, 14, 28, + 13, 113, +/* TIE BEAM */ + 23, 68, 45, + 4, 24, 1, 15, 0, 15, 0, 56, 0, 57, + 8, 55, 72, 114, +/* TIE TRAP */ + 23, 68, 27, + 4, 24, 1, 15, 0, 15, 0, 56, 0, 57, + 8, 55, 72, 114, +/* GO DOOR */ + 13, 1, 60, + 4, 16, 13, 57, 0, 14, + 54, 64, +/* GO DOOR */ + 11, 1, 60, + 4, 16, 14, 57, + 43, 117, 61, 63, +/* DROP TANN */ + 23, 18, 33, + 2, 28, 1, 22, 1, 13, 0, 53, 0, 13, + 118, 119, 74, 55, +/* DROP TANN */ + 9, 18, 33, + 2, 28, 13, 53, + 8, 17, +/* WEAR MASK */ + 11, 13, 46, + 1, 53, 0, 33, + 54, 64, 86, 73, +/* AUTO 0 */ + 195, + 120, 138, 121, 63, +/* DROP CHEE */ + 22, 18, 29, + 4, 37, 9, 5, 1, 5, 0, 5, 0, 19, + 62, 18, 73, +/* AUTO 0 */ + 207, + 0, 38, 0, 11, 0, 19, + 38, 88, 54, 62, +/* DROP CHEE */ + 12, 18, 29, + 1, 5, 7, 37, 0, 5, + 53, +/* OPEN CUPB */ + 18, 23, 88, + 4, 22, 14, 4, 1, 26, 0, 4, + 8, 53, 11, +/* OPEN CUPB */ + 18, 23, 88, + 4, 22, 14, 4, 14, 26, 0, 4, + 8, 53, 11, +/* GET KEY */ + 22, 10, 83, + 4, 22, 14, 26, 0, 26, 0, 54, 0, 16, + 74, 72, 8, +/* GET KEY */ + 10, 10, 83, + 2, 26, 0, 26, + 52, 0, 8, +/* LOOK JEWE */ + 13, 7, 56, + 4, 14, 14, 12, 0, 12, + 11, 53, +/* OPEN CASK */ + 8, 23, 41, + 1, 12, 6, 26, + 13, +/* OPEN CASK */ + 12, 23, 41, + 1, 12, 1, 26, 13, 13, + 12, +/* OPEN CUPB */ + 8, 23, 88, + 4, 22, 13, 4, + 12, +/* DROP AQUA */ + 14, 18, 17, + 1, 42, 0, 42, 0, 8, + 8, 55, 53, +/* GO HOLE */ + 8, 1, 62, + 4, 22, 0, 3, + 54, +/* DROP TORC */ + 8, 18, 13, + 1, 37, 0, 37, + 53, +/* LOOK TORC */ + 4, 7, 13, + 1, 9, + 129, +/* LOOK TORC */ + 4, 7, 13, + 1, 37, + 130, +/* LOOK MUMM */ + 4, 7, 32, + 2, 28, + 20, +/* DROP TANN */ + 9, 18, 33, + 1, 13, 0, 13, + 53, 8, +/* SAY ANY */ + 4, 57, 0, + 4, 34, + 85, +/* SAY ANY */ + 4, 57, 0, + 4, 35, + 85, +/* SAY ANY */ + 0, 57, 0, + 85, +/* WAIT ANY */ + 3, 77, 0, + 47, 88, 88, 88, +/* SAVE ANY */ + 0, 4, 0, + 71, +/* HELP ANY */ + 1, 3, 0, + 0, 16, +/* QUIT ANY */ + 0, 5, 0, + 63, +/* LOOK ANY */ + 0, 7, 0, + 10, +/* USE PHON */ + 0, 30, 8, + 123, +/* BUGG ANY */ + 1, 83, 0, + 0, 131, +/* KILL ANY */ + 4, 46, 0, + 2, 46, + 140, +/* KILL ANY */ + 0, 46, 0, + 141, + 255, +}; + + +const uint8_t verbs[] = { + /* AUTO */ + 65, 85, 84, 79, + /* GO */ + 71, 79, 32, 32, + /* INVE */ + 73, 78, 86, 69, + /* HELP */ + 72, 69, 76, 80, + /* SAVE */ + 83, 65, 86, 69, + /* QUIT */ + 81, 85, 73, 84, + /* SCOR */ + 83, 67, 79, 82, + /* LOOK */ + 76, 79, 79, 75, + /* *EXAM */ + 197, 88, 65, 77, + /* *SEAR */ + 211, 69, 65, 82, + /* GET */ + 71, 69, 84, 32, + /* *TAKE */ + 212, 65, 75, 69, + /* *GRAB */ + 199, 82, 65, 66, + /* WEAR */ + 87, 69, 65, 82, + /* *DON */ + 196, 79, 78, 32, + /* REMO */ + 82, 69, 77, 79, + /* *DOFF */ + 196, 79, 70, 70, + /* */ + 32, 32, 32, 32, + /* DROP */ + 68, 82, 79, 80, + /* *PUT */ + 208, 85, 84, 32, + /* *LEAV */ + 204, 69, 65, 86, + /* *GIVE */ + 199, 73, 86, 69, + /* LOCK */ + 76, 79, 67, 75, + /* OPEN */ + 79, 80, 69, 78, + /* *UNLO */ + 213, 78, 76, 79, + /* LIGH */ + 76, 73, 71, 72, + /* *STRI */ + 211, 84, 82, 73, + /* *IGNI */ + 201, 71, 78, 73, + /* INSE */ + 73, 78, 83, 69, + /* MOUL */ + 77, 79, 85, 76, + /* USE */ + 85, 83, 69, 32, + /* WASH */ + 87, 65, 83, 72, + /* *RINS */ + 210, 73, 78, 83, + /* MOVE */ + 77, 79, 86, 69, + /* EAT */ + 69, 65, 84, 32, + /* *TAST */ + 212, 65, 83, 84, + /* *DRIN */ + 196, 82, 73, 78, + /* FEED */ + 70, 69, 69, 68, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* SMAS */ + 83, 77, 65, 83, + /* *BREA */ + 194, 82, 69, 65, + /* *SHAT */ + 211, 72, 65, 84, + /* PRAY */ + 80, 82, 65, 89, + /* CLIM */ + 67, 76, 73, 77, + /* */ + 32, 32, 32, 32, + /* KILL */ + 75, 73, 76, 76, + /* *ATTA */ + 193, 84, 84, 65, + /* */ + 32, 32, 32, 32, + /* CUT */ + 67, 85, 84, 32, + /* *CHOP */ + 195, 72, 79, 80, + /* *SLAS */ + 211, 76, 65, 83, + /* *HACK */ + 200, 65, 67, 75, + /* SWIM */ + 83, 87, 73, 77, + /* TURN */ + 84, 85, 82, 78, + /* */ + 32, 32, 32, 32, + /* READ */ + 82, 69, 65, 68, + /* SAY */ + 83, 65, 89, 32, + /* LEVE */ + 76, 69, 86, 69, + /* *PRIS */ + 208, 82, 73, 83, + /* */ + 32, 32, 32, 32, + /* BREA */ + 66, 82, 69, 65, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* RUB */ + 82, 85, 66, 32, + /* *POLI */ + 208, 79, 76, 73, + /* UNLI */ + 85, 78, 76, 73, + /* *DOUS */ + 196, 79, 85, 83, + /* TIE */ + 84, 73, 69, 32, + /* *FIX */ + 198, 73, 88, 32, + /* *ATTA */ + 193, 84, 84, 65, + /* *FAST */ + 198, 65, 83, 84, + /* TO */ + 84, 79, 32, 32, + /* HOT */ + 72, 79, 84, 32, + /* COLD */ + 67, 79, 76, 68, + /* FILL */ + 70, 73, 76, 76, + /* PLAY */ + 80, 76, 65, 89, + /* WAIT */ + 87, 65, 73, 84, + /* SIT */ + 83, 73, 84, 32, + /* STAN */ + 83, 84, 65, 78, + /* FIRE */ + 70, 73, 82, 69, + /* *SHOO */ + 211, 72, 79, 79, + /* LOAD */ + 76, 79, 65, 68, + /* BUGG */ + 66, 85, 71, 71, + /* *BOG */ + 194, 79, 71, 32, + /* *BAST */ + 194, 65, 83, 84, + /* *SHIT */ + 211, 72, 73, 84, + /* *PISS */ + 208, 73, 83, 83, + /* *BALL */ + 194, 65, 76, 76, + /* *FUCK */ + 198, 85, 67, 75, + /* *CUNT */ + 195, 85, 78, 84, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + /* */ + 32, 32, 32, 32, + 0, +}; +const uint8_t nouns[] = { + /* ANY */ + 65, 78, 89, 32, + /* NORT */ + 78, 79, 82, 84, + /* SOUT */ + 83, 79, 85, 84, + /* EAST */ + 69, 65, 83, 84, + /* WEST */ + 87, 69, 83, 84, + /* UP */ + 85, 80, 32, 32, + /* DOWN */ + 68, 79, 87, 78, + /* SEAT */ + 83, 69, 65, 84, + /* PHON */ + 80, 72, 79, 78, + /* *TELE */ + 212, 69, 76, 69, + /* ZOMB */ + 90, 79, 77, 66, + /* JUNK */ + 74, 85, 78, 75, + /* COIN */ + 67, 79, 73, 78, + /* TORC */ + 84, 79, 82, 67, + /* *FLAS */ + 198, 76, 65, 83, + /* 42 */ + 52, 50, 32, 32, + /* MIRR */ + 77, 73, 82, 82, + /* AQUA */ + 65, 81, 85, 65, + /* *SCUB */ + 211, 67, 85, 66, + /* ROPE */ + 82, 79, 80, 69, + /* DEBR */ + 68, 69, 66, 82, + /* JACK */ + 74, 65, 67, 75, + /* *COAT */ + 195, 79, 65, 84, + /* FUSE */ + 70, 85, 83, 69, + /* 46 */ + 52, 54, 32, 32, + /* RAT */ + 82, 65, 84, 32, + /* *RATS */ + 210, 65, 84, 83, + /* TRAP */ + 84, 82, 65, 80, + /* PASS */ + 80, 65, 83, 83, + /* CHEE */ + 67, 72, 69, 69, + /* CROW */ + 67, 82, 79, 87, + /* PEND */ + 80, 69, 78, 68, + /* MUMM */ + 77, 85, 77, 77, + /* TANN */ + 84, 65, 78, 78, + /* *LEAV */ + 204, 69, 65, 86, + /* LAMP */ + 76, 65, 77, 80, + /* WATE */ + 87, 65, 84, 69, + /* GUY */ + 71, 85, 89, 32, + /* *FAWK */ + 198, 65, 87, 75, + /* 1953 */ + 49, 57, 53, 51, + /* *53 */ + 181, 51, 32, 32, + /* CASK */ + 67, 65, 83, 75, + /* SIGN */ + 83, 73, 71, 78, + /* SARC */ + 83, 65, 82, 67, + /* LEVE */ + 76, 69, 86, 69, + /* BEAM */ + 66, 69, 65, 77, + /* MASK */ + 77, 65, 83, 75, + /* OFF */ + 79, 70, 70, 32, + /* TUNN */ + 84, 85, 78, 78, + /* DARK */ + 68, 65, 82, 75, + /* 52 */ + 53, 50, 32, 32, + /* PIST */ + 80, 73, 83, 84, + /* *GUN */ + 199, 85, 78, 32, + /* BULL */ + 66, 85, 76, 76, + /* *SHEL */ + 211, 72, 69, 76, + /* 51 */ + 53, 49, 32, 32, + /* JEWE */ + 74, 69, 87, 69, + /* APPL */ + 65, 80, 80, 76, + /* MODE */ + 77, 79, 68, 69, + /* 54 */ + 53, 52, 32, 32, + /* DOOR */ + 68, 79, 79, 82, + /* 48 */ + 52, 56, 32, 32, + /* HOLE */ + 72, 79, 76, 69, + /* CRAC */ + 67, 82, 65, 67, + /* CAVE */ + 67, 65, 86, 69, + /* TOIL */ + 84, 79, 73, 76, + /* TALI */ + 84, 65, 76, 73, + /* SLOT */ + 83, 76, 79, 84, + /* *MACH */ + 205, 65, 67, 72, + /* AIRL */ + 65, 73, 82, 76, + /* WELL */ + 87, 69, 76, 76, + /* *SHAF */ + 211, 72, 65, 70, + /* DUNG */ + 68, 85, 78, 71, + /* ALTA */ + 65, 76, 84, 65, + /* BARR */ + 66, 65, 82, 82, + /* GUNP */ + 71, 85, 78, 80, + /* PAPE */ + 80, 65, 80, 69, + /* 44 */ + 52, 52, 32, 32, + /* SHAR */ + 83, 72, 65, 82, + /* *JAWS */ + 202, 65, 87, 83, + /* SEWE */ + 83, 69, 87, 69, + /* GRID */ + 71, 82, 73, 68, + /* FLUT */ + 70, 76, 85, 84, + /* KEY */ + 75, 69, 89, 32, + /* MATC */ + 77, 65, 84, 67, + /* PIPE */ + 80, 73, 80, 69, + /* *PIED */ + 208, 73, 69, 68, + /* WORK */ + 87, 79, 82, 75, + /* CUPB */ + 67, 85, 80, 66, + /* GOLD */ + 71, 79, 76, 68, + /* WASH */ + 87, 65, 83, 72, + /* HAND */ + 72, 65, 78, 68, + /* FACE */ + 70, 65, 67, 69, + /* DISP */ + 68, 73, 83, 80, + /* LEIS */ + 76, 69, 73, 83, + /* *LOUN */ + 204, 79, 85, 78, + /* MORG */ + 77, 79, 82, 71, + /* WOOD */ + 87, 79, 79, 68, + /* TREE */ + 84, 82, 69, 69, + /* HALL */ + 72, 65, 76, 76, + /* FLES */ + 70, 76, 69, 83, + /* *ROTT */ + 210, 79, 84, 84, + /* HILA */ + 72, 73, 76, 65, + /* *TENS */ + 212, 69, 78, 83, + /* JACQ */ + 74, 65, 67, 81, + /* *COUS */ + 195, 79, 85, 83, + 0, +}; +const uint8_t automap[] = { + /* COIN */ + 67, 79, 73, 78, + 1, + /* KEY */ + 75, 69, 89, 32, + 2, + /* ROPE */ + 82, 79, 80, 69, + 3, + /* APPL */ + 65, 80, 80, 76, + 4, + /* CHEE */ + 67, 72, 69, 69, + 5, + /* FLUT */ + 70, 76, 85, 84, + 7, + /* AQUA */ + 65, 81, 85, 65, + 8, + /* CASK */ + 67, 65, 83, 75, + 12, + /* TANN */ + 84, 65, 78, 78, + 13, + /* LAMP */ + 76, 65, 77, 80, + 14, + /* BEAM */ + 66, 69, 65, 77, + 15, + /* PIST */ + 80, 73, 83, 84, + 17, + /* BULL */ + 66, 85, 76, 76, + 18, + /* TALI */ + 84, 65, 76, 73, + 19, + /* CROW */ + 67, 82, 79, 87, + 20, + /* MATC */ + 77, 65, 84, 67, + 21, + /* PAPE */ + 80, 65, 80, 69, + 23, + /* BARR */ + 66, 65, 82, 82, + 24, + /* KEY */ + 75, 69, 89, 32, + 26, + /* COIN */ + 67, 79, 73, 78, + 30, + /* TORC */ + 84, 79, 82, 67, + 37, + /* TRAP */ + 84, 82, 65, 80, + 44, + /* JACK */ + 74, 65, 67, 75, + 45, + /* JUNK */ + 74, 85, 78, 75, + 52, + /* MASK */ + 77, 65, 83, 75, + 53, + 0, +}; +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +#include +#endif + +static jmp_buf restart; + +static char linebuf[81]; +static char *nounbuf; +static char wordbuf[WORDSIZE + 1]; + +static uint8_t verb; +static uint8_t noun; +static const uint8_t *linestart; +static uint8_t linematch; +static uint8_t actmatch; +static uint8_t continuation; +static uint16_t *param; +static uint16_t param_buf[5]; +static uint8_t carried; +static uint8_t lighttime; +static uint8_t location; +static uint8_t objloc[NUM_OBJ]; +static uint8_t roomsave[6]; +static uint8_t savedroom; +static uint32_t bitflags; +static int16_t counter; +static int16_t counter_array[16]; +static uint8_t redraw; +static uint8_t rows, cols; + +static void error(const char *p); + +#define VERB_GO 1 +#define VERB_GET 10 +#define VERB_DROP 18 + +#define LIGHTOUT 16 +#define DARKFLAG 15 +#define LIGHT_SOURCE 9 + +#define REDRAW 1 +#define REDRAW_MAYBE 2 + +#ifdef CONFIG_IO_CURSES + +#include + +#define REDRAW_MASK (REDRAW|REDRAW_MAYBE) + +static char wbuf[81]; +static int wbp = 0; +static int xpos = 0, ypos = 0; +static int bottom; +WINDOW *topwin, *botwin, *curwin; + +static void flush_word(void) +{ + wbuf[wbp] = 0; + waddstr(curwin, wbuf); + xpos += wbp; + wbp = 0; +} + +static void new_line(void) +{ + xpos = 0; + if (curwin == topwin) + ypos++; + else { + scroll(curwin); + ypos = bottom; + } + wmove(curwin, ypos, xpos); +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + new_line(); + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) + new_line(); + flush_word(); + waddch(curwin, ' '); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + wrefresh(botwin); + return wgetch(botwin); +} + +static void line_input(void) +{ + int c; + char *p = linebuf; + + do { + wmove(botwin, ypos, xpos); + wrefresh(botwin); + c = wgetch(botwin); + if (c == 8 || c == 127) { + if (p > linebuf) { + xpos--; + mvwaddch(botwin, ypos, xpos, ' '); + p--; + } + continue; + } + if (c > 31 && c < 127) { + if (p < linebuf + 80 && xpos < cols - 1) { + *p++ = c; + mvwaddch(botwin, ypos, xpos, c); + xpos++; + } + continue; + } + } + while (c != 13 && c != 10); + *p = 0; + new_line(); +} + +static int saved_x; + +static void begin_upper(void) +{ + saved_x = xpos; + curwin = topwin; + werase(topwin); + ypos = 0; + xpos = 0; +} + +static void end_upper(void) +{ + flush_word(); + curwin = botwin; + xpos = saved_x; + ypos = bottom; + wrefresh(topwin); +} + +static void display_init(void) +{ + int trow; + + initscr(); + noecho(); + cbreak(); + nonl(); + + getmaxyx(stdscr, rows, cols); + + if (rows < 16) + error("display too small"); + + trow = 10; + if (rows / 2 < 10) + trow = rows / 2; + bottom = rows - trow; + + topwin = newwin(trow, cols, 0, 0); + botwin = newwin(bottom--, cols, trow, 0); + if (!topwin || !botwin) + error("curses"); + scrollok(botwin, TRUE); + curwin = botwin; + new_line(); +} + +static void display_exit(void) +{ + endwin(); +} + +#else + +#define REDRAW_MASK REDRAW + +static char wbuf[80]; +static int wbp = 0; +static int xpos = 0; + +static void display_init(void) +{ + char *c; +#ifdef TIOCGWINSZ + struct winsize w; + if (ioctl(0, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = ws.ws_col; + return; + } +#elif VTSIZE + int16_t v = ioctl(0, VTSIZE, 0); + if (v != -1) { + rows = v >> 8; + cols = v; + return; + } +#endif + c = getenv("COLS"); + rows = 25; + cols = c ? atoi(c): 80; + if (cols == 0) + cols = 80; +} + +static void display_exit(void) +{ +} + +static void flush_word(void) +{ + write(1, wbuf, wbp); + xpos += wbp; + wbp = 0; +} + +static void char_out(char c) +{ + if (c == '\n') { + flush_word(); + write(1, "\n", 1); + xpos = 0; + return; + } + if (c != ' ') { + if (wbp < 80) + wbuf[wbp++] = c; + return; + } + if (xpos + wbp >= cols) { + xpos = 0; + write(1,"\n", 1); + } + flush_word(); + write(1," ", 1); + xpos++; +} + +static void strout_lower(const uint8_t *p) +{ + while(*p) + char_out(*p++); +} + +static void strout_lower_spc(const uint8_t *p) +{ + strout_lower(p); + char_out(' '); +} + +static void decout_lower(uint16_t v) +{ +#ifdef __linux__ + char buf[9]; + snprintf(buf, 8, "%d", v); /* FIXME: avoid expensive snprintf */ + strout_lower((uint8_t *)buf); +#else + strout_lower((uint8_t *)_itoa(v)); +#endif +} + +static void strout_upper(const uint8_t *p) +{ + strout_lower(p); +} + +static char readchar(void) +{ + char c; + if (read(0, &c, 1) < 1) + return -1; + return c; +} + +static void line_input(void) +{ + int l = read(0, linebuf, sizeof(linebuf)); + if (l < 0) + error("read"); + linebuf[l] = 0; + if (l && linebuf[l-1] == '\n') + linebuf[l-1] = 0; +} + +static void begin_upper(void) +{ + strout_upper("\n\n\n\n"); +} + +static void end_upper(void) +{ + uint8_t l = cols; + char_out('\n'); + while(l--) + char_out('-'); + char_out('\n'); +} + + + +#endif + +/******************** Common code ******************/ + +static uint8_t yes_or_no(void) +{ + char c; + do { + c = readchar(); + if (c == 'Y' || c == 'y' || c == 'J' || c == 'j') + return 1; + } while(c != -1 && c != 'N' && c != 'n'); + return 0; +} + +static void exit_game(uint8_t code) +{ + display_exit(); + exit(code); +} + +static void error(const char *p) +{ + display_exit(); + write(2, p, strlen(p)); + exit(1); +} + +static uint8_t random_chance(uint8_t v) +{ + v = v + v + (v >> 1); /* scale as 0-249 */ + if (((rand() >> 3) & 0xFF) <= v) + return 1; + return 0; +} + +static char *skip_spaces(char *p) +{ + while(*p && isspace(*p)) + p++; + return p; +} + +static char *copyword(char *p) +{ + char *t = wordbuf; + p = skip_spaces(p); + memset(wordbuf, ' ', WORDSIZE+1); + while (*p && !isspace(*p) && t < wordbuf + WORDSIZE) + *t++ = *p++; + while(*p && !isspace(*p)) + p++; + return p; +} + +static int wordeq(const uint8_t *a, const char *b, uint8_t l) +{ + while(l--) + if ((*a++ & 0x7F) != toupper(*b++)) + return 0; + return 1; +} + +static uint8_t whichword(const uint8_t *p) +{ + uint8_t code = 0; + uint8_t i = 0; + + if (*wordbuf == 0 || *wordbuf == ' ') + return 0; /* No word */ + i--; + + do { + i++; + if (!(*p & 0x80)) + code = i; + if (wordeq(p, wordbuf, WORDSIZE)) + return code; + p += WORDSIZE; + } while(*p != 0); + return 255; +} + +static void scan_noun(char *x) +{ + x = skip_spaces(x); + nounbuf = x; + copyword(x); + noun = whichword(nouns); +} + +static void scan_input(void) +{ + char *x = copyword(linebuf); + verb = whichword(verbs); + scan_noun(x); +} + +void abbrevs(void) +{ + char *x = skip_spaces(linebuf); + const char *p = NULL; + if (x[1] != 0 && x[1] != ' ') + return; + switch(toupper(*x)) { + case 'N': + p = "NORTH"; + break; + case 'E': + p = "EAST"; + break; + case 'S': + p = "SOUTH"; + break; + case 'W': + p = "WEST"; + break; + case 'U': + p = "UP"; + break; + case 'D': + p = "DOWN"; + break; + case 'I': + p = "INVEN"; + break; + } + if (p) + strcpy(linebuf, p); +} + +static const uint8_t *run_conditions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t opc = *p++; + uint16_t par = *p++ | ((opc & 0xE0) >> 5); + uint8_t op = objloc[par]; + opc &= 0x1F; + + switch(opc) { + case 0: + *param++ = par; + break; + case 1: + if (op != 255) + return NULL; + break; + case 2: + if (op != location) + return NULL; + break; + case 3: + if (op != 255 && op != location) + return NULL; + break; + case 4: + if (location != par) + return NULL; + break; + case 5: + if (op == location) + return NULL; + break; + case 6: + if (op == 255) + return NULL; + break; + case 7: + if (location == par) + return NULL; + break; + case 8: + if (!(bitflags & (1 << par))) + return NULL; + break; + case 9: + if (bitflags & (1 << par)) + return NULL; + break; + case 10: + if (!carried) + return NULL; + break; + case 11: + if (carried) + return NULL; + break; + case 12: + if (op == 255 || op == location) + return NULL; + break; + case 13: + if (op == 0) + return NULL; + break; + case 14: + if (op != 0) + return NULL; + break; + case 15: + if (counter > par) + return NULL; + break; + case 16: + if (counter < par) + return NULL; + break; + case 17: + if (op != objinit[par]) + return NULL; + break; + case 18: + if (op == objinit[par]) + return NULL; + break; + case 19: + if (counter != par) + return NULL; + break; + default: + error("BADCOND"); + } + } + return p; +} + +uint8_t islight(void) +{ + uint8_t l = objloc[LIGHT_SOURCE]; + if (!(bitflags & (1 << DARKFLAG))) + return 1; + if (l == 255 || l == location) + return 1; + return 0; +} + +static void action_look(void) +{ + const uint8_t *e; + const uint8_t *p; + uint8_t c; + uint8_t f = 1; + const uint8_t **op = objtext; + + redraw = 0; + + begin_upper(); + + if (!islight()) { + strout_upper(itsdark); + end_upper(); + return; + } + p = locdata[location].text; + e = locdata[location].exit; + if (*p == '*') + p++; + else + strout_upper(youare); + strout_upper(p); + strout_upper(newline); + strout_upper(obexit); + + for (c = 0; c < 6; c++) { + if (*e++) { + if (f) + f = 0; + else + strout_upper(dashstr); + strout_upper(exitmsgptr[c]); + } + } + if (f) + strout_upper(nonestr); + strout_upper(dotnewline); + f = 1; + e = objloc; + while(e < objloc + NUM_OBJ) { + if (*e++ == location) { + if (f) { + strout_upper(canalsosee); + f = 0; + } else + strout_upper(dashstr); + strout_upper(*op); + } + op++; + } + end_upper(); +} + +static void action_delay(void) +{ + sleep(2); +} + +static void action_dead(void) +{ + strout_lower(dead); + bitflags &= ~(1 << DARKFLAG); + location = lastloc; + action_look(); +} + +static void action_quit(void) +{ + strout_lower(playagain); + if (yes_or_no()) + longjmp(restart, 0); + exit_game(0); +} + +static void action_score(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t t = 0, s = 0; + + while(p < objloc + NUM_OBJ) { + if (*m[0] == '*') { + t++; + if (*p == treasure) + s++; + } + m++; + p++; + } + + strout_lower(stored_msg); + decout_lower(s); + strout_lower(stored_msg2); + decout_lower((s * (uint16_t)100) / t); + strout_lower(dotnewline); + if (s == t) + action_quit(); +} + +static void action_inventory(void) +{ + uint8_t *p = objloc; + const uint8_t **m = objtext; + uint8_t f = 1; + + strout_lower(carrying); + if (carried == 0) + strout_lower(nothing); + else { + while(p < objloc + NUM_OBJ) { + if (*p == 255) { + if (!f) + strout_lower(dashstr); + else + f = 0; + strout_lower(*m); + } + m++; + p++; + } + } + strout_lower(dotnewline); +} + +static void moveitem(uint8_t i, uint8_t l) +{ + uint8_t *p = objloc + i; + if (*p == location) + redraw |= REDRAW_MAYBE; + if (l == location) + redraw |= REDRAW; + *p = l; +} + +static void run_actions(const uint8_t *p, uint8_t n) +{ + uint8_t i; + + for (i = 0; i < n; i++) { + uint8_t a = *p++; + uint8_t tmp; + uint16_t tmp16; + + if (a < 50) { + strout_lower_spc(msgptr[a]); + continue; + } + if (a > 102 ) { + strout_lower_spc(msgptr[a - 50]); + continue; + } + switch(a) { + case 51: /* nop - check */ + break; + case 52: /* Get */ + if (carried >= maxcar) + strout_lower(toomuch); + else + moveitem(*param++, 255); + break; + case 53: /* Drop */ + moveitem(*param++, location); + break; + case 54: /* Go */ + location = *param++; + redraw = REDRAW; + break; + case 55: /* Destroy */ + case 59: /* ?? */ + moveitem(*param++, 0); + break; + case 56: /* Set dark flag */ + bitflags |= (1 << DARKFLAG); + break; + case 57: /* Clear dark flag */ + bitflags &= ~(1 << DARKFLAG); + break; + case 58: /* Set bit */ + bitflags |= (1 << *param++); + break; + /* 59 see 55 */ + case 60: /* Clear bit */ + bitflags &= ~(1 << *param++); + break; + case 61: /* Dead */ + action_dead(); + break; + case 64: /* Look */ + case 76: /* Also Look ?? */ + action_look(); + break; + case 62: /* Place obj, loc */ + tmp = *param++; + moveitem(tmp, *param++); + break; + case 63: /* Game over */ + action_quit(); + case 65: /* Score */ + action_score(); + break; + case 66: /* Inventory */ + action_inventory(); + case 67: /* Set bit 0 */ + bitflags |= (1 << 0); + break; + case 68: /* Clear bit 0 */ + bitflags &= ~(1 << 0); + break; + case 69: /* Refill lamp */ + lighttime = lightfill; + bitflags &= ~(1 << LIGHTOUT); + moveitem(LIGHT_SOURCE, 255); + break; + case 70: /* Wipe lower */ + /* TODO */ + break; + case 71: /* Save */ + /* TODO */ + case 72: /* Swap two objects */ + tmp = objloc[*param]; + moveitem(*param, objloc[param[1]]); + moveitem(param[1], tmp); + param += 2; + break; + case 73: + continuation = 1; + break; + case 74: /* Get without weight rule */ + moveitem(*param++, 255); + break; + case 75: /* Put one item by another */ + moveitem(*param, objloc[param[1]]); + param += 2; + break; + case 77: /* Decrement counter */ + if (counter >= 0) + counter--; + break; + case 78: /* Display counter */ + decout_lower(counter); + break; + case 79: /* Set counter */ + counter = *param++; + break; + case 80: /* Swap player and saved room */ + tmp = savedroom; + savedroom = location; + location = tmp; + redraw = REDRAW; + break; + case 81: /* Swap counter and counter n */ + tmp16 = counter; + counter = counter_array[*param]; + counter_array[*param++] = tmp16; + break; + case 82: /* Add to counter */ + counter += *param++; + break; + case 83: /* Subtract from counter */ + counter -= *param++; + if (counter < 0) + counter = -1; + break; + case 84: /* Print noun, newline */ + strout_lower((uint8_t *)nounbuf); + /* Fall through */ + case 86: /* Print newline */ + strout_lower(newline); + break; + case 85: /* Print noun */ + strout_lower((uint8_t *)nounbuf); + break; + case 87: /* Swap player and saveroom array entry */ + tmp16 = *param++; + tmp = roomsave[tmp16]; + roomsave[tmp16] = location; + if (tmp != location) { + location = tmp; + redraw = REDRAW; + } + break; + case 88: + action_delay(); + break; + case 89: + param++; /* SAGA etc specials */ + break; + default: + error("BADACT"); + } + } +} + +void next_line(void) +{ + uint8_t c = *linestart++; + if (!(c & 0x80)) + linestart += 2; /* Skip verb/noun */ + else if (!(c & 0x60)) + linestart++; /* Skip random value */ + linestart += (c & 3) + 1; /* Actions 1 - 4 */ + c >>= 1; + c &= 0x0E; /* 2 x conditions */ + linestart += c; +} + +void run_line(const uint8_t *ptr, uint8_t c, uint8_t a) +{ + memset(param_buf, 0, sizeof(param_buf)); + param = param_buf; + if (c) + ptr = run_conditions(ptr, c); + if (ptr) { + actmatch = 1; + param = param_buf; + run_actions(ptr, a); + } + next_line(); +} + +void run_table(const uint8_t *tp) +{ + continuation = 0; + linestart = tp; + while(1) { + uint8_t hdr; + uint8_t c, a; + tp = linestart; + hdr = *tp++; + c = (hdr >> 2) & 0x07; + a = (hdr & 3) + 1; + +/* printf("H%02X c = %d a = %d\n", hdr, c, a); */ + if (hdr == 255) + return; /* End of table */ + if (hdr & 0x80) { + if (hdr & 0x40) { /* Auto 0 */ + if (continuation) + run_line(tp, c, a); + else + next_line(); + continue; + } + continuation = 0; + if (!(hdr & 0x20)) { /* Auto number */ + if (random_chance(*tp++)) + run_line(tp, c, a); + else + next_line(); + continue; + } + run_line(tp, c, a); + } else { + if (actmatch) + return; +/* printf("VN %d %d\n", *tp, tp[1]); */ + linematch = 1; + continuation = 0; + if (*tp++ == verb && (*tp == noun || *tp == 0)) + run_line(tp+1, c, a); + else + next_line(); + } + } +} + +uint8_t autonoun(uint8_t loc) +{ + const uint8_t *p = automap; + if (*wordbuf == ' ' || *wordbuf == 0) + return 255; + while(*p) { + if (strncasecmp((const char *)p, wordbuf, WORDSIZE) == 0 && objloc[p[WORDSIZE]] == loc) + return p[WORDSIZE]; + p += WORDSIZE + 1; + } + return 255; +} + +void run_command(void) +{ + uint8_t tmp; + run_table(actions); + if (actmatch) + return; + if (verb == VERB_GET) { /* Get */ + if (noun == 0) + strout_lower(whatstr); + else if (carried >= maxcar) + strout_lower(toomuch); + else { + tmp = autonoun(location); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, 255); + } + actmatch = 1; + return; + } + if (verb == VERB_DROP) { /* Drop */ + if (noun == 0) + strout_lower(whatstr); + else { + tmp = autonoun(255); + if (tmp == 255) + strout_lower(beyondpower); + else + moveitem(tmp, location); + } + actmatch = 1; + return; + } +} + +void process_light(void) +{ + uint8_t l; + if ((l = objloc[LIGHT_SOURCE]) == 0) + return; + if (lighttime == 255) + return; + if (!--lighttime) { + bitflags &= ~(1 << LIGHTOUT); /* Check clear ! */ + if (l == 255 || l == location) { + strout_lower(lightout); + redraw = REDRAW_MAYBE; + return; + } + } + if (lighttime > 25) + return; + strout_lower(lightoutin); + decout_lower(lighttime); + strout_lower(lighttime == 1 ? turn : turns); +} + +void main_loop(void) +{ + uint8_t first = 1; + char *p; + + action_look(); + + while (1) { + if (!first) + process_light(); + else + first = 0; + verb = 0; + noun = 0; + run_table(status); + + if (redraw & REDRAW_MASK) + action_look(); + + strout_lower(whattodo); + do { + do { + strout_lower(prompt); + line_input(); + abbrevs(); + p = skip_spaces(linebuf); + } + while(*p == 0); + + scan_noun(p); + if (noun && noun <= 6) { + verb = VERB_GO; + break; + } + scan_input(); + if (verb == 255) + strout_lower(dontknow); + } while (verb == 255); + + if (verb == VERB_GO) { + if (!noun) { + strout_lower(givedirn); + continue; + } + if (noun <= 6) { + uint8_t light = islight(); + uint8_t dir; + + if (!light) + strout_lower(darkdanger); + dir = locdata[location].exit[noun - 1]; + if (!dir) { + if (!light) { + strout_lower(brokeneck); + action_delay(); + action_dead(); + continue; + } + strout_lower(cantgo); + continue; + } + location = dir; + redraw = REDRAW; + continue; + } + } + linematch = 0; + actmatch = 0; + run_command(); + if (actmatch) + continue; + if (linematch) { + strout_lower(notyet); + continue; + } + strout_lower(dontunderstand); + } +} + +void start_game(void) +{ + memcpy(objloc, objinit, sizeof(objloc)); + bitflags = 0; + counter = 0; + memset(counter_array, 0, sizeof(counter_array)); + savedroom = 0; + memset(roomsave, 0, sizeof(roomsave)); + location = startloc; + lighttime = startlamp; + carried = startcarried; +} + +int main(int argc, char *argv[]) +{ + display_init(); + setjmp(restart); + start_game(); + main_loop(); +}