.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 =
--- /dev/null
+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!
+
+----------------------------------------------------------------------\r
+
+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.
+<h0142kdd@rz.hu-berlin.de> but revised by Alan Cox to reflect the Fuzix
+packaged versions.
--- /dev/null
+#define NUM_OBJ 65
+#define WORDSIZE 3
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 66
+#define WORDSIZE 3
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 53
+#define WORDSIZE 3
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 65
+#define WORDSIZE 3
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 72
+#define WORDSIZE 3
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 55
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 74
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 100
+#define WORDSIZE 3
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 77
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 58
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 48
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 79
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 75
+#define WORDSIZE 5
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 71
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 60
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 48
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 62
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 64
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 90
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 90
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 65
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 65
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 49
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 59
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 73
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}
--- /dev/null
+#define NUM_OBJ 57
+#define WORDSIZE 4
+#include <stdint.h>
+
+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 <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <setjmp.h>
+
+#ifdef __linux__
+#include <stdio.h>
+#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 <curses.h>
+
+#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();
+}