aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/plugins.cpp3
-rwxr-xr-xconfigure1
-rw-r--r--engines/dreamweb/console.cpp36
-rw-r--r--engines/dreamweb/console.h46
-rw-r--r--engines/dreamweb/detection.cpp148
-rw-r--r--engines/dreamweb/detection_tables.h51
-rw-r--r--engines/dreamweb/dreamgen.cpp22062
-rw-r--r--engines/dreamweb/dreamgen.h78
-rw-r--r--engines/dreamweb/dreamweb.cpp131
-rw-r--r--engines/dreamweb/dreamweb.h83
-rw-r--r--engines/dreamweb/module.mk15
-rw-r--r--engines/dreamweb/runtime.h330
-rw-r--r--engines/engines.mk5
13 files changed, 22989 insertions, 0 deletions
diff --git a/base/plugins.cpp b/base/plugins.cpp
index 4a3b201714..8ce7b53254 100644
--- a/base/plugins.cpp
+++ b/base/plugins.cpp
@@ -106,6 +106,9 @@ public:
#if PLUGIN_ENABLED_STATIC(DRASCULA)
LINK_PLUGIN(DRASCULA)
#endif
+ #if PLUGIN_ENABLED_STATIC(DREAMWEB)
+ LINK_PLUGIN(DREAMWEB)
+ #endif
#if PLUGIN_ENABLED_STATIC(GOB)
LINK_PLUGIN(GOB)
#endif
diff --git a/configure b/configure
index b012ccc7bd..e7a4335a52 100755
--- a/configure
+++ b/configure
@@ -83,6 +83,7 @@ add_engine cine "Cinematique evo 1" yes
add_engine cruise "Cinematique evo 2" yes
add_engine draci "Dragon History" yes
add_engine drascula "Drascula: The Vampire Strikes Back" yes
+add_engine dreamweb "Dreamweb" no
add_engine gob "Gobli*ns" yes
add_engine groovie "Groovie" yes "groovie2"
add_engine groovie2 "Groovie 2 games" no
diff --git a/engines/dreamweb/console.cpp b/engines/dreamweb/console.cpp
new file mode 100644
index 0000000000..e004746d8a
--- /dev/null
+++ b/engines/dreamweb/console.cpp
@@ -0,0 +1,36 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://svn.scummvm.org:4444/svn/dreamweb/console.cpp $
+ * $Id: console.cpp 70 2011-01-26 05:36:55Z digitall $
+ *
+ */
+
+#include "dreamweb/console.h"
+
+namespace DreamWeb {
+
+DreamWebConsole::DreamWebConsole(DreamWebEngine *vm) : GUI::Debugger(), _vm(vm) {
+}
+
+DreamWebConsole::~DreamWebConsole() {
+}
+
+} // End of namespace DreamWeb
diff --git a/engines/dreamweb/console.h b/engines/dreamweb/console.h
new file mode 100644
index 0000000000..58c8467b34
--- /dev/null
+++ b/engines/dreamweb/console.h
@@ -0,0 +1,46 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://svn.scummvm.org:4444/svn/dreamweb/console.h $
+ * $Id: console.h 70 2011-01-26 05:36:55Z digitall $
+ *
+ */
+
+#ifndef DREAMWEB_CONSOLE_H
+#define DREAMWEB_CONSOLE_H
+
+#include "gui/debugger.h"
+
+namespace DreamWeb {
+
+class DreamWebEngine;
+
+class DreamWebConsole : public GUI::Debugger {
+public:
+ DreamWebConsole(DreamWebEngine *vm);
+ virtual ~DreamWebConsole(void);
+
+private:
+ DreamWebEngine *_vm;
+};
+
+} // End of namespace DreamWeb
+
+#endif
diff --git a/engines/dreamweb/detection.cpp b/engines/dreamweb/detection.cpp
new file mode 100644
index 0000000000..f0d0f9e840
--- /dev/null
+++ b/engines/dreamweb/detection.cpp
@@ -0,0 +1,148 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://svn.scummvm.org:4444/svn/dreamweb/detection.cpp $
+ * $Id: detection.cpp 3 2010-09-16 19:32:18Z megath $
+ *
+ */
+
+#include "base/plugins.h"
+
+#include "engines/advancedDetector.h"
+#include "common/system.h"
+
+#include "dreamweb/dreamweb.h"
+
+namespace DreamWeb {
+
+struct DreamWebGameDescription {
+ ADGameDescription desc;
+};
+
+} // End of namespace DreamWeb
+
+static const PlainGameDescriptor dreamWebGames[] = {
+ { "dreamweb", "DreamWeb" },
+ { 0, 0 }
+};
+
+static const ADObsoleteGameID obsoleteGameIDsTable[] = {
+ { 0, 0, Common::kPlatformUnknown }
+};
+
+#include "dreamweb/detection_tables.h"
+
+static const ADParams detectionParams = {
+ // Pointer to ADGameDescription or its superset structure
+ (const byte *)DreamWeb::gameDescriptions,
+ // Size of that superset structure
+ sizeof(DreamWeb::DreamWebGameDescription),
+ // Number of bytes to compute MD5 sum for
+ 5000,
+ // List of all engine targets
+ dreamWebGames,
+ // Structure for autoupgrading obsolete targets
+ obsoleteGameIDsTable,
+ // Name of single gameid (optional)
+ "dreamweb",
+ // List of files for file-based fallback detection (optional)
+ 0,
+ // Flags
+ 0,
+ // Additional GUI options (for every game}
+ Common::GUIO_NOMIDI,
+ // Maximum directory depth
+ 1,
+ // List of directory globs
+ 0
+};
+
+class DreamWebMetaEngine : public AdvancedMetaEngine {
+public:
+ DreamWebMetaEngine() : AdvancedMetaEngine(detectionParams) {}
+
+ virtual const char *getName() const {
+ return "DreamWeb engine";
+ }
+
+ virtual const char *getOriginalCopyright() const {
+ return "DreamWeb (C) Creative Reality";
+ }
+
+ virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
+ virtual bool hasFeature(MetaEngineFeature f) const;
+ virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
+ virtual void removeSaveState(const char *target, int slot) const;
+};
+
+bool DreamWebMetaEngine::hasFeature(MetaEngineFeature f) const {
+ return false;
+}
+
+bool DreamWeb::DreamWebEngine::hasFeature(EngineFeature f) const {
+ return false;
+}
+
+bool DreamWebMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
+ const DreamWeb::DreamWebGameDescription *gd = (const DreamWeb::DreamWebGameDescription *)desc;
+ if (gd) {
+ *engine = new DreamWeb::DreamWebEngine(syst, gd);
+ }
+ return gd != 0;
+}
+
+SaveStateList DreamWebMetaEngine::listSaves(const char *target) const {
+ //Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ SaveStateList saveList;
+
+ return saveList;
+}
+
+int DreamWebMetaEngine::getMaximumSaveSlot() const { return 99; }
+
+void DreamWebMetaEngine::removeSaveState(const char *target, int slot) const {
+}
+
+#if PLUGIN_ENABLED_DYNAMIC(DREAMWEB)
+ REGISTER_PLUGIN_DYNAMIC(DREAMWEB, PLUGIN_TYPE_ENGINE, DreamWebMetaEngine);
+#else
+ REGISTER_PLUGIN_STATIC(DREAMWEB, PLUGIN_TYPE_ENGINE, DreamWebMetaEngine);
+#endif
+
+namespace DreamWeb {
+
+Common::Error DreamWebEngine::loadGameState(int slot) {
+ return Common::kNoError;
+}
+
+Common::Error DreamWebEngine::saveGameState(int slot, const char *desc) {
+ return Common::kNoError;
+}
+
+bool DreamWebEngine::canLoadGameStateCurrently() {
+ return false;
+}
+
+bool DreamWebEngine::canSaveGameStateCurrently() {
+ return false;
+}
+
+} // End of namespace DreamWeb
diff --git a/engines/dreamweb/detection_tables.h b/engines/dreamweb/detection_tables.h
new file mode 100644
index 0000000000..394236a72a
--- /dev/null
+++ b/engines/dreamweb/detection_tables.h
@@ -0,0 +1,51 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://svn.scummvm.org:4444/svn/dreamweb/detection_tables.h $
+ * $Id: detection_tables.h 66 2010-11-07 08:31:21Z eriktorbjorn $
+ *
+ */
+
+#ifndef DREAMWEB_DETECTION_TABLES_H
+#define DREAMWEB_DETECTION_TABLES_H
+
+namespace DreamWeb {
+
+using Common::GUIO_NONE;
+
+static const DreamWebGameDescription gameDescriptions[] = {
+ {
+ {
+ "dreamweb",
+ "",
+ AD_ENTRY1s("dreamweb.r00", "3b5c87717fc40cc5a5ae19c155662ee3", 152918),
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ ADGF_NO_FLAGS,
+ GUIO_NONE
+ },
+ },
+
+ { AD_TABLE_END_MARKER }
+};
+
+} // End of namespace DreamWeb
+
+#endif
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
new file mode 100644
index 0000000000..ec243cc81a
--- /dev/null
+++ b/engines/dreamweb/dreamgen.cpp
@@ -0,0 +1,22062 @@
+#include "dreamgen.h"
+
+namespace dreamgen {
+
+static inline void allocatebuffers(Context &context);
+static inline void clearbuffers(Context &context);
+static inline void clearpalette(Context &context);
+static inline void readsetdata(Context &context);
+static inline void loadpalfromiff(Context &context);
+static inline void titles(Context &context);
+static inline void credits(Context &context);
+static inline void cls(Context &context);
+static inline void decide(Context &context);
+static inline void clearchanges(Context &context);
+static inline void loadroom(Context &context);
+static inline void clearsprites(Context &context);
+static inline void initman(Context &context);
+static inline void entrytexts(Context &context);
+static inline void entryanims(Context &context);
+static inline void initialinv(Context &context);
+static inline void startup1(Context &context);
+static inline void clearbeforeload(Context &context);
+static inline void startup(Context &context);
+static inline void worktoscreenm(Context &context);
+static inline void screenupdate(Context &context);
+static inline void showgun(Context &context);
+static inline void fadescreendown(Context &context);
+static inline void hangon(Context &context);
+static inline void fadescreendowns(Context &context);
+static inline void endgame(Context &context);
+static inline void loadtemptext(Context &context);
+static inline void monkspeaking(Context &context);
+static inline void gettingshot(Context &context);
+static inline void getridoftemptext(Context &context);
+static inline void loadintroroom(Context &context);
+static inline void fadescreenups(Context &context);
+static inline void runendseq(Context &context);
+static inline void atmospheres(Context &context);
+static inline void spriteupdate(Context &context);
+static inline void deleverything(Context &context);
+static inline void printsprites(Context &context);
+static inline void reelsonscreen(Context &context);
+static inline void afterintroroom(Context &context);
+static inline void usetimedtext(Context &context);
+static inline void dumpmap(Context &context);
+static inline void dumptimedtext(Context &context);
+static inline void multidump(Context &context);
+static inline void getundertimed(Context &context);
+static inline void printdirect(Context &context);
+static inline void putundertimed(Context &context);
+static inline void multiput(Context &context);
+static inline void getnumber(Context &context);
+static inline void modifychar(Context &context);
+static inline void printchar(Context &context);
+static inline void showframe(Context &context);
+static inline void kernchars(Context &context);
+static inline void frameoutfx(Context &context);
+static inline void frameoutnm(Context &context);
+static inline void frameoutbh(Context &context);
+static inline void frameoutv(Context &context);
+static inline void getnextword(Context &context);
+static inline void multiget(Context &context);
+static inline void clearwork(Context &context);
+static inline void findroominloc(Context &context);
+static inline void drawfloor(Context &context);
+static inline void worktoscreen(Context &context);
+static inline void width160(Context &context);
+static inline void eraseoldobs(Context &context);
+static inline void drawflags(Context &context);
+static inline void calcmapad(Context &context);
+static inline void doblocks(Context &context);
+static inline void showallobs(Context &context);
+static inline void showallfree(Context &context);
+static inline void showallex(Context &context);
+static inline void paneltomap(Context &context);
+static inline void initrain(Context &context);
+static inline void splitintolines(Context &context);
+static inline void getblockofpixel(Context &context);
+static inline void checkone(Context &context);
+static inline void getmapad(Context &context);
+static inline void calcfrframe(Context &context);
+static inline void finalframe(Context &context);
+static inline void getxad(Context &context);
+static inline void getyad(Context &context);
+static inline void makebackob(Context &context);
+static inline void makesprite(Context &context);
+static inline void getdimension(Context &context);
+static inline void addalong(Context &context);
+static inline void addlength(Context &context);
+static inline void reconstruct(Context &context);
+static inline void updatepeople(Context &context);
+static inline void watchreel(Context &context);
+static inline void showrain(Context &context);
+static inline void randomnum1(Context &context);
+static inline void playchannel1(Context &context);
+static inline void plotreel(Context &context);
+static inline void checkforshake(Context &context);
+static inline void autosetwalk(Context &context);
+static inline void getroomspaths(Context &context);
+static inline void checkdest(Context &context);
+static inline void bresenhams(Context &context);
+static inline void workoutframes(Context &context);
+static inline void getreelstart(Context &context);
+static inline void dealwithspecial(Context &context);
+static inline void showreelframe(Context &context);
+static inline void soundonreels(Context &context);
+static inline void playchannel0(Context &context);
+static inline void findsource(Context &context);
+static inline void placesetobject(Context &context);
+static inline void removesetobject(Context &context);
+static inline void placefreeobject(Context &context);
+static inline void removefreeobject(Context &context);
+static inline void switchryanoff(Context &context);
+static inline void switchryanon(Context &context);
+static inline void movemap(Context &context);
+static inline void getfreead(Context &context);
+static inline void findormake(Context &context);
+static inline void getsetad(Context &context);
+static inline void undertextline(Context &context);
+static inline void printasprite(Context &context);
+static inline void maptopanel(Context &context);
+static inline void cancelch0(Context &context);
+static inline void clearstartpal(Context &context);
+static inline void paltoendpal(Context &context);
+static inline void loadroomssample(Context &context);
+static inline void loadintotemp(Context &context);
+static inline void showmonk(Context &context);
+static inline void getridoftemp(Context &context);
+static inline void standardload(Context &context);
+static inline void readheader(Context &context);
+static inline void twodigitnum(Context &context);
+static inline void cancelch1(Context &context);
+static inline void paltostartpal(Context &context);
+static inline void clearendpal(Context &context);
+static inline void greyscalesum(Context &context);
+static inline void endpaltostart(Context &context);
+static inline void createpanel2(Context &context);
+static inline void fadescreenup(Context &context);
+static inline void rollendcredits2(Context &context);
+static inline void rollem(Context &context);
+static inline void hangone(Context &context);
+static inline void createpanel(Context &context);
+static inline void newplace(Context &context);
+static inline void mainscreen(Context &context);
+static inline void animpointer(Context &context);
+static inline void showpointer(Context &context);
+static inline void readmouse1(Context &context);
+static inline void dumppointer(Context &context);
+static inline void dumptextline(Context &context);
+static inline void delpointer(Context &context);
+static inline void autolook(Context &context);
+static inline void watchcount(Context &context);
+static inline void zoom(Context &context);
+static inline void readmouse2(Context &context);
+static inline void dumpzoom(Context &context);
+static inline void afternewroom(Context &context);
+static inline void readmouse3(Context &context);
+static inline void readmouse4(Context &context);
+static inline void dumpwatch(Context &context);
+static inline void findpathofpoint(Context &context);
+static inline void findxyfrompath(Context &context);
+static inline void showicon(Context &context);
+static inline void getunderzoom(Context &context);
+static inline void walkintoroom(Context &context);
+static inline void reminders(Context &context);
+static inline void isryanholding(Context &context);
+static inline void findexobject(Context &context);
+static inline void compare(Context &context);
+static inline void setuptimeduse(Context &context);
+static inline void getanyaddir(Context &context);
+static inline void getexad(Context &context);
+static inline void showpanel(Context &context);
+static inline void showman(Context &context);
+static inline void roomname(Context &context);
+static inline void panelicons1(Context &context);
+static inline void zoomicon(Context &context);
+static inline void middlepanel(Context &context);
+static inline void showwatch(Context &context);
+static inline void showtime(Context &context);
+static inline void printmessage(Context &context);
+static inline void usecharset1(Context &context);
+static inline void putunderzoom(Context &context);
+static inline void crosshair(Context &context);
+static inline void dolook(Context &context);
+static inline void findnextcolon(Context &context);
+static inline void printslow(Context &context);
+static inline void hangonp(Context &context);
+static inline void redrawmainscrn(Context &context);
+static inline void readmouse(Context &context);
+static inline void printboth(Context &context);
+static inline void waitframes(Context &context);
+static inline void dumpblink(Context &context);
+static inline void showblink(Context &context);
+static inline void getflagunderp(Context &context);
+static inline void checkcoords(Context &context);
+static inline void walkandexamine(Context &context);
+static inline void finishedwalking(Context &context);
+static inline void examineob(Context &context);
+static inline void setwalk(Context &context);
+static inline void examineobtext(Context &context);
+static inline void blocknametext(Context &context);
+static inline void personnametext(Context &context);
+static inline void walktotext(Context &context);
+static inline void commandwithob(Context &context);
+static inline void deltextline(Context &context);
+static inline void copyname(Context &context);
+static inline void findobname(Context &context);
+static inline void facerightway(Context &context);
+static inline void showexit(Context &context);
+static inline void obicons(Context &context);
+static inline void obpicture(Context &context);
+static inline void describeob(Context &context);
+static inline void makemainscreen(Context &context);
+static inline void getobtextstart(Context &context);
+static inline void obsthatdothings(Context &context);
+static inline void additionaltext(Context &context);
+static inline void findpuztext(Context &context);
+static inline void getlocation(Context &context);
+static inline void setlocation(Context &context);
+static inline void lookatcard(Context &context);
+static inline void getridofreels(Context &context);
+static inline void loadkeypad(Context &context);
+static inline void hangonw(Context &context);
+static inline void restorereels(Context &context);
+static inline void putbackobstuff(Context &context);
+static inline void getroomdata(Context &context);
+static inline void allocateload(Context &context);
+static inline void searchforsame(Context &context);
+static inline void getanyad(Context &context);
+static inline void selectlocation(Context &context);
+static inline void readcitypic(Context &context);
+static inline void showcity(Context &context);
+static inline void readdesticon(Context &context);
+static inline void loadtraveltext(Context &context);
+static inline void showarrows(Context &context);
+static inline void locationpic(Context &context);
+static inline void getridoftemp2(Context &context);
+static inline void getridoftemp3(Context &context);
+static inline void getdestinfo(Context &context);
+static inline void loadintotemp2(Context &context);
+static inline void loadintotemp3(Context &context);
+static inline void clearreels(Context &context);
+static inline void clearrest(Context &context);
+static inline void pickupob(Context &context);
+static inline void transfertoex(Context &context);
+static inline void emergencypurge(Context &context);
+static inline void getexpos(Context &context);
+static inline void transfermap(Context &context);
+static inline void transferinv(Context &context);
+static inline void transfertext(Context &context);
+static inline void pickupconts(Context &context);
+static inline void transfercontoex(Context &context);
+static inline void purgeanitem(Context &context);
+static inline void deleteexobject(Context &context);
+static inline void deleteexframe(Context &context);
+static inline void deleteextext(Context &context);
+static inline void resetlocation(Context &context);
+static inline void checkifpathison(Context &context);
+static inline void turnpathon(Context &context);
+static inline void turnanypathon(Context &context);
+static inline void purgealocation(Context &context);
+static inline void startloading(Context &context);
+static inline void fillspace(Context &context);
+static inline void sortoutmap(Context &context);
+static inline void deletetaken(Context &context);
+static inline void setallchanges(Context &context);
+static inline void autoappear(Context &context);
+static inline void dochange(Context &context);
+static inline void loadsavebox(Context &context);
+static inline void showdecisions(Context &context);
+static inline void showopbox(Context &context);
+static inline void realcredits(Context &context);
+static inline void allpalette(Context &context);
+static inline void dumpcurrent(Context &context);
+static inline void biblequote(Context &context);
+static inline void intro(Context &context);
+static inline void runintroseq(Context &context);
+static inline void trysoundalloc(Context &context);
+static inline void allocatework(Context &context);
+static inline void checkforemm(Context &context);
+static inline void printcurs(Context &context);
+static inline void delcurs(Context &context);
+static inline void commandonly(Context &context);
+static inline void talk(Context &context);
+static inline void obname(Context &context);
+static inline void pixelcheckset(Context &context);
+static inline void isitdescribed(Context &context);
+static inline void getreelframeax(Context &context);
+static inline void blank(Context &context);
+static inline void findfirstpath(Context &context);
+static inline void checkifex(Context &context);
+static inline void checkiffree(Context &context);
+static inline void checkifperson(Context &context);
+static inline void checkifset(Context &context);
+static inline void identifyob(Context &context);
+static inline void convnum(Context &context);
+static inline void onedigit(Context &context);
+static inline void parseblaster(Context &context);
+static inline void volumeadjust(Context &context);
+static inline void loopchannel0(Context &context);
+static inline void createname(Context &context);
+static inline void doload(Context &context);
+static inline void showloadops(Context &context);
+static inline void showslots(Context &context);
+static inline void shownames(Context &context);
+static inline void namestoold(Context &context);
+static inline void storeit(Context &context);
+static inline void makeheader(Context &context);
+static inline void oldtonames(Context &context);
+static inline void showsaveops(Context &context);
+static inline void readkey(Context &context);
+static inline void getnamepos(Context &context);
+static inline void selectslot(Context &context);
+static inline void restoreall(Context &context);
+static inline void checkinput(Context &context);
+static inline void showdiscops(Context &context);
+static inline void getback1(Context &context);
+static inline void getridofall(Context &context);
+static inline void showmainops(Context &context);
+static inline void dosaveload(Context &context);
+static inline void findtext1(Context &context);
+static inline void usetempcharset(Context &context);
+static inline void showdiary(Context &context);
+static inline void showdiarypage(Context &context);
+static inline void loadtempcharset(Context &context);
+static inline void showdiarykeys(Context &context);
+static inline void dumpdiarykeys(Context &context);
+static inline void getridoftempcharset(Context &context);
+static inline void nextsymbol(Context &context);
+static inline void showsymbol(Context &context);
+static inline void updatesymboltop(Context &context);
+static inline void updatesymbolbot(Context &context);
+static inline void dumpsymbol(Context &context);
+static inline void turnanypathoff(Context &context);
+static inline void folderexit(Context &context);
+static inline void showleftpage(Context &context);
+static inline void showrightpage(Context &context);
+static inline void showfolder(Context &context);
+static inline void folderhints(Context &context);
+static inline void loadfolder(Context &context);
+static inline void loadmenu(Context &context);
+static inline void getundermenu(Context &context);
+static inline void putundermenu(Context &context);
+static inline void showmenu(Context &context);
+static inline void dumpmenu(Context &context);
+static inline void singlekey(Context &context);
+static inline void buttonpress(Context &context);
+static inline void showouterpad(Context &context);
+static inline void showkeypad(Context &context);
+static inline void dumpkeypad(Context &context);
+static inline void addtopresslist(Context &context);
+static inline void isitright(Context &context);
+static inline void checkinside(Context &context);
+static inline void showfirstuse(Context &context);
+static inline void withwhat(Context &context);
+static inline void showpuztext(Context &context);
+static inline void issetobonmap(Context &context);
+static inline void showseconduse(Context &context);
+static inline void removeobfrominv(Context &context);
+static inline void turnpathoff(Context &context);
+static inline void findinvpos(Context &context);
+static inline void useroutine(Context &context);
+static inline void printmessage2(Context &context);
+static inline void fillryan(Context &context);
+static inline void findsetobject(Context &context);
+static inline void usetext(Context &context);
+static inline void moneypoke(Context &context);
+static inline void nextcolon(Context &context);
+static inline void entercode(Context &context);
+static inline void makeworn(Context &context);
+static inline void nothelderror(Context &context);
+static inline void triggermessage(Context &context);
+static inline void monprint(Context &context);
+static inline void showcurrentfile(Context &context);
+static inline void printlogo(Context &context);
+static inline void printundermon(Context &context);
+static inline void randomaccess(Context &context);
+static inline void locklighton(Context &context);
+static inline void locklightoff(Context &context);
+static inline void makecaps(Context &context);
+static inline void monmessage(Context &context);
+static inline void scrollmonitor(Context &context);
+static inline void searchforstring(Context &context);
+static inline void getkeyandlogo(Context &context);
+static inline void monitorlogo(Context &context);
+static inline void parser(Context &context);
+static inline void neterror(Context &context);
+static inline void processtrigger(Context &context);
+static inline void input(Context &context);
+static inline void dirfile(Context &context);
+static inline void searchforfiles(Context &context);
+static inline void dircom(Context &context);
+static inline void signon(Context &context);
+static inline void read(Context &context);
+static inline void showkeys(Context &context);
+static inline void delchar(Context &context);
+static inline void accesslighton(Context &context);
+static inline void accesslightoff(Context &context);
+static inline void powerlighton(Context &context);
+static inline void powerlightoff(Context &context);
+static inline void lookininterface(Context &context);
+static inline void loadpersonal(Context &context);
+static inline void loadnews(Context &context);
+static inline void loadcart(Context &context);
+static inline void printoutermon(Context &context);
+static inline void initialmoncols(Context &context);
+static inline void turnonpower(Context &context);
+static inline void fadeupyellows(Context &context);
+static inline void fadeupmonfirst(Context &context);
+static inline void hangoncurs(Context &context);
+static inline void execcommand(Context &context);
+static inline void getundercentre(Context &context);
+static inline void putundercentre(Context &context);
+static inline void convicons(Context &context);
+static inline void starttalk(Context &context);
+static inline void hangonpq(Context &context);
+static inline void redes(Context &context);
+static inline void dosometalk(Context &context);
+static inline void getpersontext(Context &context);
+static inline void getpersframe(Context &context);
+static inline void findopenpos(Context &context);
+static inline void reexfromopen(Context &context);
+static inline void geteitherad(Context &context);
+static inline void fillopen(Context &context);
+static inline void useopened(Context &context);
+static inline void getopenedsize(Context &context);
+static inline void errormessage3(Context &context);
+static inline void errormessage2(Context &context);
+static inline void examicon(Context &context);
+static inline void outofopen(Context &context);
+static inline void swapwithopen(Context &context);
+static inline void isitworn(Context &context);
+static inline void wornerror(Context &context);
+static inline void errormessage1(Context &context);
+static inline void checkobjectsize(Context &context);
+static inline void openinv(Context &context);
+static inline void openob(Context &context);
+static inline void droperror(Context &context);
+static inline void cantdrop(Context &context);
+static inline void reexfrominv(Context &context);
+static inline void intoinv(Context &context);
+static inline void outofinv(Context &context);
+static inline void swapwithinv(Context &context);
+static inline void findallopen(Context &context);
+static inline void obtoinv(Context &context);
+static inline void findallryan(Context &context);
+static inline void showryanpage(Context &context);
+static inline void lockmon(Context &context);
+static inline void fadecalculation(Context &context);
+static inline void dodoor(Context &context);
+static inline void liftnoise(Context &context);
+static inline void widedoor(Context &context);
+static inline void random(Context &context);
+static inline void lockeddoorway(Context &context);
+static inline void liftsprite(Context &context);
+static inline void doorway(Context &context);
+static inline void constant(Context &context);
+static inline void steady(Context &context);
+static inline void adjustleft(Context &context);
+static inline void adjustright(Context &context);
+static inline void adjustdown(Context &context);
+static inline void adjustup(Context &context);
+static inline void aboutturn(Context &context);
+static inline void checkforexit(Context &context);
+static inline void walking(Context &context);
+static inline void showgamereel(Context &context);
+static inline void checkspeed(Context &context);
+static inline void addtopeoplelist(Context &context);
+static inline void setuptimedtemp(Context &context);
+static inline void madmantext(Context &context);
+static inline void madmode(Context &context);
+static inline void priesttext(Context &context);
+static inline void fadescreenuphalf(Context &context);
+static inline void textforend(Context &context);
+static inline void fadescreendownhalf(Context &context);
+static inline void rollendcredits(Context &context);
+static inline void textformonk(Context &context);
+static inline void monks2text(Context &context);
+static inline void intro2text(Context &context);
+static inline void intro3text(Context &context);
+static inline void intro1text(Context &context);
+
+static inline void alleybarksound(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._sub(context.ax, 1);
+ context._cmp(context.ax, 0);
+ if (!context.flags.z()) goto nobark;
+ context.push(context.bx);
+ context.push(context.es);
+ context.al = 14;
+ playchannel1(context);
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.ax = 1000;
+nobark:
+ context.data.word(context.bx+3) = context.ax;
+ return;
+}
+
+static inline void intromusic(Context & context) {
+ return;
+}
+
+static inline void foghornsound(Context & context) {
+ randomnumber(context);
+ context._cmp(context.al, 198);
+ if (!context.flags.z()) goto nofog;
+ context.al = 13;
+ playchannel1(context);
+nofog:
+ return;
+}
+
+static inline void receptionist(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto gotrecep;
+ context._cmp(context.data.byte(52), 1);
+ if (!context.flags.z()) goto notsetcard;
+ context._add(context.data.byte(52), 1);
+ context.data.byte(context.bx+7) = 1;
+ context.data.word(context.bx+3) = 64;
+notsetcard:
+ context._cmp(context.data.word(context.bx+3), 58);
+ if (!context.flags.z()) goto notdes1;
+ randomnumber(context);
+ context._cmp(context.al, 30);
+ if (context.flags.c()) goto notdes2;
+ context.data.word(context.bx+3) = 55;
+ goto gotrecep;
+notdes1:
+ context._cmp(context.data.word(context.bx+3), 60);
+ if (!context.flags.z()) goto notdes2;
+ randomnumber(context);
+ context._cmp(context.al, 240);
+ if (context.flags.c()) goto gotrecep;
+ context.data.word(context.bx+3) = 53;
+ goto gotrecep;
+notdes2:
+ context._cmp(context.data.word(context.bx+3), 88);
+ if (!context.flags.z()) goto notendcard;
+ context.data.word(context.bx+3) = 53;
+ goto gotrecep;
+notendcard:
+ context._add(context.data.word(context.bx+3), 1);
+gotrecep:
+ showgamereel(context);
+ addtopeoplelist(context);
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 128);
+ if (context.flags.z()) goto nottalkedrecep;
+ context.data.byte(51) = 1;
+nottalkedrecep:
+ return;
+}
+
+static inline void smokebloke(Context & context) {
+ context._cmp(context.data.byte(41), 0);
+ if (!context.flags.z()) goto notspokento;
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 128);
+ if (context.flags.z()) goto notspokento;
+ context.push(context.es);
+ context.push(context.bx);
+ context.al = 5;
+ setlocation(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+notspokento:
+ checkspeed(context);
+ if (!context.flags.z()) goto gotsmokeb;
+ context._cmp(context.data.word(context.bx+3), 100);
+ if (!context.flags.z()) goto notsmokeb1;
+ randomnumber(context);
+ context._cmp(context.al, 30);
+ if (context.flags.c()) goto notsmokeb2;
+ context.data.word(context.bx+3) = 96;
+ goto gotsmokeb;
+notsmokeb1:
+ context._cmp(context.data.word(context.bx+3), 117);
+ if (!context.flags.z()) goto notsmokeb2;
+ context.data.word(context.bx+3) = 96;
+ goto gotsmokeb;
+notsmokeb2:
+ context._add(context.data.word(context.bx+3), 1);
+gotsmokeb:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void attendant(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 128);
+ if (context.flags.z()) goto nottalked;
+ context.data.byte(48) = 1;
+nottalked:
+ return;
+}
+
+static inline void manasleep(Context & context) {
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 127);
+ context.data.byte(context.bx+7) = context.al;
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void eden(Context & context) {
+ context._cmp(context.data.byte(42), 0);
+ if (!context.flags.z()) goto notinbed;
+ showgamereel(context);
+ addtopeoplelist(context);
+notinbed:
+ return;
+}
+
+static inline void edeninbath(Context & context) {
+ context._cmp(context.data.byte(42), 0);
+ if (context.flags.z()) goto notinbed;
+ context._cmp(context.data.byte(43), 0);
+ if (!context.flags.z()) goto notinbath;
+ showgamereel(context);
+ addtopeoplelist(context);
+notinbath:
+ return;
+/*continuing to unbounded code: notinbed from eden:5-6*/
+notinbed:
+ return;
+ return;
+}
+
+static inline void malefan(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void femalefan(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void louis(Context & context) {
+ context._cmp(context.data.byte(41), 0);
+ if (!context.flags.z()) goto notlouis1;
+ showgamereel(context);
+ addtopeoplelist(context);
+notlouis1:
+ return;
+}
+
+static inline void louischair(Context & context) {
+ context._cmp(context.data.byte(41), 0);
+ if (context.flags.z()) goto notlouis2;
+ checkspeed(context);
+ if (!context.flags.z()) goto notlouisanim;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 191);
+ if (context.flags.z()) goto restartlouis;
+ context._cmp(context.ax, 185);
+ if (context.flags.z()) goto randomlouis;
+ context.data.word(context.bx+3) = context.ax;
+ goto notlouisanim;
+randomlouis:
+ context.data.word(context.bx+3) = context.ax;
+ randomnumber(context);
+ context._cmp(context.al, 245);
+ if (!context.flags.c()) goto notlouisanim;
+restartlouis:
+ context.ax = 182;
+ context.data.word(context.bx+3) = context.ax;
+notlouisanim:
+ showgamereel(context);
+ addtopeoplelist(context);
+notlouis2:
+ return;
+}
+
+static inline void manasleep2(Context & context) {
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 127);
+ context.data.byte(context.bx+7) = context.al;
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void mansatstill(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void tattooman(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void drinker(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto gotdrinker;
+ context._add(context.data.word(context.bx+3), 1);
+ context._cmp(context.data.word(context.bx+3), 115);
+ if (!context.flags.z()) goto notdrinker1;
+ context.data.word(context.bx+3) = 105;
+ goto gotdrinker;
+notdrinker1:
+ context._cmp(context.data.word(context.bx+3), 106);
+ if (!context.flags.z()) goto gotdrinker;
+ randomnumber(context);
+ context._cmp(context.al, 3);
+ if (context.flags.c()) goto gotdrinker;
+ context.data.word(context.bx+3) = 105;
+gotdrinker:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void bartender(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto gotsmoket;
+ context._cmp(context.data.word(context.bx+3), 86);
+ if (!context.flags.z()) goto notsmoket1;
+ randomnumber(context);
+ context._cmp(context.al, 18);
+ if (context.flags.c()) goto notsmoket2;
+ context.data.word(context.bx+3) = 81;
+ goto gotsmoket;
+notsmoket1:
+ context._cmp(context.data.word(context.bx+3), 103);
+ if (!context.flags.z()) goto notsmoket2;
+ context.data.word(context.bx+3) = 81;
+ goto gotsmoket;
+notsmoket2:
+ context._add(context.data.word(context.bx+3), 1);
+gotsmoket:
+ showgamereel(context);
+ context._cmp(context.data.byte(46), 1);
+ if (!context.flags.z()) goto notgotgun;
+ context.data.byte(context.bx+7) = 9;
+notgotgun:
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void othersmoker(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void barwoman(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void interviewer(Context & context) {
+ context._cmp(context.data.word(23), 68);
+ if (!context.flags.z()) goto notgeneralstart;
+ context._add(context.data.word(context.bx+3), 1);
+notgeneralstart:
+ context._cmp(context.data.word(context.bx+3), 250);
+ if (context.flags.z()) goto talking;
+ checkspeed(context);
+ if (!context.flags.z()) goto talking;
+ context._cmp(context.data.word(context.bx+3), 259);
+ if (context.flags.z()) goto talking;
+ context._add(context.data.word(context.bx+3), 1);
+talking:
+ showgamereel(context);
+ return;
+}
+
+static inline void soldier1(Context & context) {
+ context._cmp(context.data.word(context.bx+3), 0);
+ if (context.flags.z()) goto soldierwait;
+ context.data.word(21) = 10;
+ context._cmp(context.data.word(context.bx+3), 30);
+ if (!context.flags.z()) goto notaftersshot;
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 40);
+ if (!context.flags.z()) goto gotsoldframe;
+ context.data.byte(56) = 2;
+ goto gotsoldframe;
+notaftersshot:
+ checkspeed(context);
+ if (!context.flags.z()) goto gotsoldframe;
+ context._add(context.data.word(context.bx+3), 1);
+ goto gotsoldframe;
+soldierwait:
+ context._cmp(context.data.byte(65), 1);
+ if (!context.flags.z()) goto gotsoldframe;
+ context.data.word(21) = 10;
+ context._cmp(context.data.byte(475), 2);
+ if (!context.flags.z()) goto gotsoldframe;
+ context._cmp(context.data.byte(133), 4);
+ if (!context.flags.z()) goto gotsoldframe;
+ context._add(context.data.word(context.bx+3), 1);
+ context.data.byte(65) = -1;
+ context.data.byte(64) = 0;
+gotsoldframe:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void rockstar(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 303);
+ if (context.flags.z()) goto rockcombatend;
+ context._cmp(context.ax, 118);
+ if (context.flags.z()) goto rockcombatend;
+ checkspeed(context);
+ if (!context.flags.z()) goto rockspeed;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 118);
+ if (!context.flags.z()) goto notbeforedead;
+ context.data.byte(56) = 2;
+ goto gotrockframe;
+notbeforedead:
+ context._cmp(context.ax, 79);
+ if (!context.flags.z()) goto gotrockframe;
+ context._sub(context.ax, 1);
+ context._cmp(context.data.byte(65), 1);
+ if (!context.flags.z()) goto notgunonrock;
+ context.data.byte(65) = -1;
+ context.ax = 123;
+ goto gotrockframe;
+notgunonrock:
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 40);
+ if (!context.flags.z()) goto gotrockframe;
+ context.data.byte(64) = 0;
+ context.ax = 79;
+gotrockframe:
+ context.data.word(context.bx+3) = context.ax;
+rockspeed:
+ showgamereel(context);
+ context._cmp(context.data.word(context.bx+3), 78);
+ if (!context.flags.z()) goto notalkrock;
+ addtopeoplelist(context);
+ context.data.byte(234) = 2;
+ context.data.word(21) = 0;
+ return;
+notalkrock:
+ context.data.word(21) = 2;
+ context.data.byte(234) = 0;
+ context.al = context.data.byte(149);
+ context.data.byte(context.bx+2) = context.al;
+ return;
+rockcombatend:
+ context.data.byte(188) = 45;
+ showgamereel(context);
+ return;
+}
+
+static inline void helicopter(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 203);
+ if (context.flags.z()) goto heliwon;
+ checkspeed(context);
+ if (!context.flags.z()) goto helispeed;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 53);
+ if (!context.flags.z()) goto notbeforehdead;
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 8);
+ if (context.flags.c()) goto waitabit;
+ context.data.byte(56) = 2;
+waitabit:
+ context.ax = 49;
+ goto gotheliframe;
+notbeforehdead:
+ context._cmp(context.ax, 9);
+ if (!context.flags.z()) goto gotheliframe;
+ context._sub(context.ax, 1);
+ context._cmp(context.data.byte(65), 1);
+ if (!context.flags.z()) goto notgunonheli;
+ context.data.byte(65) = -1;
+ context.ax = 55;
+ goto gotheliframe;
+notgunonheli:
+ context.ax = 5;
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 20);
+ if (!context.flags.z()) goto gotheliframe;
+ context.data.byte(64) = 0;
+ context.ax = 9;
+gotheliframe:
+ context.data.word(context.bx+3) = context.ax;
+helispeed:
+ showgamereel(context);
+ context.al = context.data.byte(148);
+ context.data.byte(context.bx+1) = context.al;
+helicombatend:
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 9);
+ if (!context.flags.c()) goto notwaitingheli;
+ context._cmp(context.data.byte(64), 7);
+ if (context.flags.c()) goto notwaitingheli;
+ context.data.byte(234) = 2;
+ context.data.word(21) = 0;
+ return;
+notwaitingheli:
+ context.data.byte(234) = 0;
+ context.data.word(21) = 2;
+ return;
+heliwon:
+ context.data.byte(234) = 0;
+ return;
+}
+
+static inline void mugger(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 138);
+ if (context.flags.z()) goto endmugger1;
+ context._cmp(context.ax, 176);
+ if (context.flags.z()) goto endmugger2;
+ context._cmp(context.ax, 2);
+ if (!context.flags.z()) goto havesetwatch;
+ context.data.word(21) = 175*2;
+havesetwatch:
+ checkspeed(context);
+ if (!context.flags.z()) goto notmugger;
+ context._add(context.data.word(context.bx+3), 1);
+notmugger:
+ showgamereel(context);
+ context.al = context.data.byte(148);
+ context.data.byte(context.bx+1) = context.al;
+ return;
+endmugger1:
+ context.push(context.es);
+ context.push(context.bx);
+ createpanel2(context);
+ showicon(context);
+ context.al = 41;
+ findpuztext(context);
+ context.di = 33+20;
+ context.bx = 104;
+ context.dl = 241;
+ context.ah = 0;
+ printdirect(context);
+ worktoscreen(context);
+ context.cx = 300;
+ hangon(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.push(context.es);
+ context.push(context.bx);
+ context.data.word(context.bx+3) = 140;
+ context.data.byte(475) = 2;
+ context.data.byte(477) = 2;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ context.al = 'W';
+ context.ah = 'E';
+ context.cl = 'T';
+ context.ch = 'A';
+ findexobject(context);
+ context.data.byte(99) = context.al;
+ context.data.byte(102) = 4;
+ removeobfrominv(context);
+ context.al = 'W';
+ context.ah = 'E';
+ context.cl = 'T';
+ context.ch = 'B';
+ findexobject(context);
+ context.data.byte(99) = context.al;
+ context.data.byte(102) = 4;
+ removeobfrominv(context);
+ makemainscreen(context);
+ context.al = 48;
+ context.bl = 68-32;
+ context.bh = 54+64;
+ context.cx = 70;
+ context.dx = 10;
+ setuptimeduse(context);
+ context.data.byte(45) = 1;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+endmugger2:
+ return;
+}
+
+static inline void aide(Context & context) {
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void businessman(Context & context) {
+ context.data.byte(234) = 0;
+ context.data.word(21) = 2;
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 2);
+ if (!context.flags.z()) goto notfirstbiz;
+ context.push(context.ax);
+ context.push(context.bx);
+ context.push(context.es);
+ context.al = 49;
+ context.cx = 30;
+ context.dx = 1;
+ context.bl = 68;
+ context.bh = 174;
+ setuptimeduse(context);
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.ax = context.pop();
+notfirstbiz:
+ context._cmp(context.ax, 95);
+ if (context.flags.z()) goto buscombatwonend;
+ context._cmp(context.ax, 49);
+ if (context.flags.z()) goto buscombatend;
+ checkspeed(context);
+ if (!context.flags.z()) goto busspeed;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 48);
+ if (!context.flags.z()) goto notbeforedeadb;
+ context.data.byte(56) = 2;
+ goto gotbusframe;
+notbeforedeadb:
+ context._cmp(context.ax, 15);
+ if (!context.flags.z()) goto buscombatwon;
+ context._sub(context.ax, 1);
+ context._cmp(context.data.byte(65), 3);
+ if (!context.flags.z()) goto notshieldonbus;
+ context.data.byte(65) = -1;
+ context.data.byte(64) = 0;
+ context.ax = 51;
+ goto gotbusframe;
+notshieldonbus:
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 20);
+ if (!context.flags.z()) goto gotbusframe;
+ context.data.byte(64) = 0;
+ context.ax = 15;
+ goto gotbusframe;
+buscombatwon:
+ context._cmp(context.ax, 91);
+ if (!context.flags.z()) goto gotbusframe;
+ context.push(context.bx);
+ context.push(context.es);
+ context.al = 0;
+ turnpathon(context);
+ context.al = 1;
+ turnpathon(context);
+ context.al = 2;
+ turnpathon(context);
+ context.al = 3;
+ turnpathoff(context);
+ context.data.byte(475) = 5;
+ context.data.byte(477) = 5;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.ax = 92;
+ goto gotbusframe;
+gotbusframe:
+ context.data.word(context.bx+3) = context.ax;
+busspeed:
+ showgamereel(context);
+ context.al = context.data.byte(149);
+ context.data.byte(context.bx+2) = context.al;
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 14);
+ if (!context.flags.z()) goto buscombatend;
+ context.data.word(21) = 0;
+ context.data.byte(234) = 2;
+ return;
+buscombatend:
+ return;
+buscombatwonend:
+ context.data.byte(234) = 0;
+ context.data.word(21) = 0;
+ return;
+}
+
+static inline void poolguard(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 214);
+ if (context.flags.z()) goto combatover2;
+ context._cmp(context.ax, 258);
+ if (context.flags.z()) goto combatover2;
+ context._cmp(context.ax, 185);
+ if (context.flags.z()) goto combatover1;
+ context._cmp(context.ax, 0);
+ if (!context.flags.z()) goto notfirstpool;
+ context.al = 0;
+ turnpathon(context);
+notfirstpool:
+ checkspeed(context);
+ if (!context.flags.z()) goto guardspeed;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 122);
+ if (!context.flags.z()) goto notendguard1;
+ context._sub(context.ax, 1);
+ context._cmp(context.data.byte(65), 2);
+ if (!context.flags.z()) goto notaxeonpool;
+ context.data.byte(65) = -1;
+ context.ax = 122;
+ goto gotguardframe;
+notaxeonpool:
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 40);
+ if (!context.flags.z()) goto gotguardframe;
+ context.data.byte(64) = 0;
+ context.ax = 195;
+ goto gotguardframe;
+notendguard1:
+ context._cmp(context.ax, 147);
+ if (!context.flags.z()) goto gotguardframe;
+ context._sub(context.ax, 1);
+ context._cmp(context.data.byte(65), 1);
+ if (!context.flags.z()) goto notgunonpool;
+ context.data.byte(65) = -1;
+ context.ax = 147;
+ goto gotguardframe;
+notgunonpool:
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 40);
+ if (!context.flags.z()) goto gotguardframe;
+ context.data.byte(64) = 0;
+ context.ax = 220;
+gotguardframe:
+ context.data.word(context.bx+3) = context.ax;
+guardspeed:
+ showgamereel(context);
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 121);
+ if (context.flags.z()) goto iswaitingpool;
+ context._cmp(context.ax, 146);
+ if (context.flags.z()) goto iswaitingpool;
+ context.data.byte(234) = 0;
+ context.data.word(21) = 2;
+ return;
+iswaitingpool:
+ context.data.byte(234) = 2;
+ context.data.word(21) = 0;
+ return;
+combatover1:
+ context.data.word(21) = 0;
+ context.data.byte(234) = 0;
+ context.al = 0;
+ turnpathon(context);
+ context.al = 1;
+ turnpathoff(context);
+ return;
+combatover2:
+ showgamereel(context);
+ context.data.word(21) = 2;
+ context.data.byte(234) = 0;
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 100);
+ if (context.flags.c()) goto doneover2;
+ context.data.word(21) = 0;
+ context.data.byte(56) = 2;
+doneover2:
+ return;
+}
+
+static inline void security(Context & context) {
+ context._cmp(context.data.word(context.bx+3), 32);
+ if (context.flags.z()) goto securwait;
+ context._cmp(context.data.word(context.bx+3), 69);
+ if (!context.flags.z()) goto notaftersec;
+ return;
+notaftersec:
+ context.data.word(21) = 10;
+ checkspeed(context);
+ if (!context.flags.z()) goto gotsecurframe;
+ context._add(context.data.word(context.bx+3), 1);
+ goto gotsecurframe;
+securwait:
+ context._cmp(context.data.byte(65), 1);
+ if (!context.flags.z()) goto gotsecurframe;
+ context.data.word(21) = 10;
+ context._cmp(context.data.byte(475), 9);
+ if (!context.flags.z()) goto gotsecurframe;
+ context._cmp(context.data.byte(133), 0);
+ if (!context.flags.z()) goto gotsecurframe;
+ context.data.byte(65) = -1;
+ context._add(context.data.word(context.bx+3), 1);
+gotsecurframe:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void heavy(Context & context) {
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 127);
+ context.data.byte(context.bx+7) = context.al;
+ context._cmp(context.data.word(context.bx+3), 43);
+ if (context.flags.z()) goto heavywait;
+ context.data.word(21) = 10;
+ context._cmp(context.data.word(context.bx+3), 70);
+ if (!context.flags.z()) goto notafterhshot;
+ context._add(context.data.byte(64), 1);
+ context._cmp(context.data.byte(64), 80);
+ if (!context.flags.z()) goto gotheavyframe;
+ context.data.byte(56) = 2;
+ goto gotheavyframe;
+notafterhshot:
+ checkspeed(context);
+ if (!context.flags.z()) goto gotheavyframe;
+ context._add(context.data.word(context.bx+3), 1);
+ goto gotheavyframe;
+heavywait:
+ context._cmp(context.data.byte(65), 1);
+ if (!context.flags.z()) goto gotheavyframe;
+ context._cmp(context.data.byte(475), 5);
+ if (!context.flags.z()) goto gotheavyframe;
+ context._cmp(context.data.byte(133), 4);
+ if (!context.flags.z()) goto gotheavyframe;
+ context.data.byte(65) = -1;
+ context._add(context.data.word(context.bx+3), 1);
+ context.data.byte(64) = 0;
+gotheavyframe:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void bossman(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto notboss;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 4);
+ if (context.flags.z()) goto firstdes;
+ context._cmp(context.ax, 20);
+ if (context.flags.z()) goto secdes;
+ context._cmp(context.ax, 41);
+ if (!context.flags.z()) goto gotallboss;
+ context.ax = 0;
+ context._add(context.data.byte(46), 1);
+ context.data.byte(context.bx+7) = 10;
+ goto gotallboss;
+firstdes:
+ context._cmp(context.data.byte(46), 1);
+ if (context.flags.z()) goto gotallboss;
+ context.push(context.ax);
+ randomnumber(context);
+ context.cl = context.al;
+ context.ax = context.pop();
+ context._cmp(context.cl, 10);
+ if (context.flags.c()) goto gotallboss;
+ context.ax = 0;
+ goto gotallboss;
+secdes:
+ context._cmp(context.data.byte(46), 1);
+ if (context.flags.z()) goto gotallboss;
+ context.ax = 0;
+gotallboss:
+ context.data.word(context.bx+3) = context.ax;
+notboss:
+ showgamereel(context);
+ addtopeoplelist(context);
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 128);
+ if (context.flags.z()) goto nottalkedboss;
+ context.data.byte(50) = 1;
+nottalkedboss:
+ return;
+}
+
+static inline void gamer(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto gamerfin;
+gameragain:
+ randomnum1(context);
+ context._and(context.al, 7);
+ context._cmp(context.al, 5);
+ if (!context.flags.c()) goto gameragain;
+ context._add(context.al, 20);
+ context._cmp(context.al, context.data.byte(context.bx+3));
+ if (context.flags.z()) goto gameragain;
+ context.ah = 0;
+ context.data.word(context.bx+3) = context.ax;
+gamerfin:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void sparkydrip(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto cantdrip;
+ context.al = 14;
+ context.ah = 0;
+ playchannel0(context);
+cantdrip:
+ return;
+}
+
+static inline void carparkdrip(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto cantdrip2;
+ context.al = 14;
+ playchannel1(context);
+cantdrip2:
+ return;
+}
+
+static inline void keeper(Context & context) {
+ context._cmp(context.data.byte(54), 0);
+ if (!context.flags.z()) goto notwaiting;
+ context._cmp(context.data.word(23), 190);
+ if (context.flags.c()) goto waiting;
+ context._add(context.data.byte(54), 1);
+ context.ah = context.data.byte(context.bx+7);
+ context._and(context.ah, 127);
+ context._cmp(context.ah, context.data.byte(66));
+ if (context.flags.z()) goto notdiff;
+ context.al = context.data.byte(66);
+ context.data.byte(context.bx+7) = context.al;
+notdiff:
+ return;
+notwaiting:
+ addtopeoplelist(context);
+ showgamereel(context);
+waiting:
+ return;
+}
+
+static inline void candles1(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto candle1;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 44);
+ if (!context.flags.z()) goto notendcandle1;
+ context.ax = 39;
+notendcandle1:
+ context.data.word(context.bx+3) = context.ax;
+candle1:
+ showgamereel(context);
+ return;
+}
+
+static inline void smallcandle(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto smallcandlef;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 37);
+ if (!context.flags.z()) goto notendsmallcandle;
+ context.ax = 25;
+notendsmallcandle:
+ context.data.word(context.bx+3) = context.ax;
+smallcandlef:
+ showgamereel(context);
+ return;
+}
+
+static inline void intromagic1(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto introm1fin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 145);
+ if (!context.flags.z()) goto gotintrom1;
+ context.ax = 121;
+gotintrom1:
+ context.data.word(context.bx+3) = context.ax;
+ context._cmp(context.ax, 121);
+ if (!context.flags.z()) goto introm1fin;
+ context._add(context.data.byte(139), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ intro1text(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.data.byte(139), 8);
+ if (!context.flags.z()) goto introm1fin;
+ context._add(context.data.byte(149), 10);
+ context.data.byte(186) = 1;
+introm1fin:
+ showgamereel(context);
+ return;
+}
+
+static inline void candles(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto candlesfin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 167);
+ if (!context.flags.z()) goto gotcandles;
+ context.ax = 162;
+gotcandles:
+ context.data.word(context.bx+3) = context.ax;
+candlesfin:
+ showgamereel(context);
+ return;
+}
+
+static inline void candles2(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto candles2fin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 238);
+ if (!context.flags.z()) goto gotcandles2;
+ context.ax = 233;
+gotcandles2:
+ context.data.word(context.bx+3) = context.ax;
+candles2fin:
+ showgamereel(context);
+ return;
+}
+
+static inline void gates(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto gatesfin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 116);
+ if (!context.flags.z()) goto notbang;
+ context.push(context.ax);
+ context.push(context.bx);
+ context.push(context.es);
+ context.al = 17;
+ playchannel1(context);
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.ax = context.pop();
+notbang:
+ context._cmp(context.ax, 110);
+ if (context.flags.c()) goto slowgates;
+ context.data.byte(context.bx+5) = 2;
+slowgates:
+ context._cmp(context.ax, 120);
+ if (!context.flags.z()) goto gotgates;
+ context.data.byte(103) = 1;
+ context.ax = 119;
+gotgates:
+ context.data.word(context.bx+3) = context.ax;
+ context.push(context.es);
+ context.push(context.bx);
+ intro3text(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+gatesfin:
+ showgamereel(context);
+ return;
+}
+
+static inline void intromagic2(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto introm2fin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 216);
+ if (!context.flags.z()) goto gotintrom2;
+ context.ax = 192;
+gotintrom2:
+ context.data.word(context.bx+3) = context.ax;
+introm2fin:
+ showgamereel(context);
+ return;
+}
+
+static inline void intromagic3(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto introm3fin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 218);
+ if (!context.flags.z()) goto gotintrom3;
+ context.data.byte(103) = 1;
+gotintrom3:
+ context.data.word(context.bx+3) = context.ax;
+introm3fin:
+ showgamereel(context);
+ context.al = context.data.byte(148);
+ context.data.byte(context.bx+1) = context.al;
+ return;
+}
+
+static inline void intromonks1(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto intromonk1fin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 80);
+ if (!context.flags.z()) goto notendmonk1;
+ context._add(context.data.byte(149), 10);
+ context.data.byte(186) = 1;
+ showgamereel(context);
+ return;
+notendmonk1:
+ context._cmp(context.ax, 30);
+ if (!context.flags.z()) goto gotintromonk1;
+ context._sub(context.data.byte(149), 10);
+ context.data.byte(186) = 1;
+ context.ax = 51;
+gotintromonk1:
+ context.data.word(context.bx+3) = context.ax;
+ context._cmp(context.ax, 5);
+ if (context.flags.z()) goto waitstep;
+ context._cmp(context.ax, 15);
+ if (context.flags.z()) goto waitstep;
+ context._cmp(context.ax, 25);
+ if (context.flags.z()) goto waitstep;
+ context._cmp(context.ax, 61);
+ if (context.flags.z()) goto waitstep;
+ context._cmp(context.ax, 71);
+ if (context.flags.z()) goto waitstep;
+ goto intromonk1fin;
+waitstep:
+ context.push(context.es);
+ context.push(context.bx);
+ intro2text(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.data.byte(context.bx+6) = -20;
+intromonk1fin:
+ showgamereel(context);
+ context.al = context.data.byte(149);
+ context.data.byte(context.bx+2) = context.al;
+ return;
+}
+
+static inline void intromonks2(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto intromonk2fin;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 87);
+ if (!context.flags.z()) goto nottalk1;
+ context._add(context.data.byte(139), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ monks2text(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.data.byte(139), 19);
+ if (!context.flags.z()) goto notlasttalk1;
+ context.ax = 87;
+ goto gotintromonk2;
+notlasttalk1:
+ context.ax = 74;
+ goto gotintromonk2;
+nottalk1:
+ context._cmp(context.ax, 110);
+ if (!context.flags.z()) goto notraisearm;
+ context._add(context.data.byte(139), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ monks2text(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.data.byte(139), 35);
+ if (!context.flags.z()) goto notlastraise;
+ context.ax = 111;
+ goto gotintromonk2;
+notlastraise:
+ context.ax = 98;
+ goto gotintromonk2;
+notraisearm:
+ context._cmp(context.ax, 176);
+ if (!context.flags.z()) goto notendmonk2;
+ context.data.byte(103) = 1;
+ goto gotintromonk2;
+notendmonk2:
+ context._cmp(context.ax, 125);
+ if (!context.flags.z()) goto gotintromonk2;
+ context.ax = 140;
+gotintromonk2:
+ context.data.word(context.bx+3) = context.ax;
+intromonk2fin:
+ showgamereel(context);
+ return;
+}
+
+static inline void handclap(Context & context) {
+ return;
+}
+
+static inline void monks2text(Context & context) {
+ context._cmp(context.data.byte(139), 1);
+ if (!context.flags.z()) goto notmonk2text1;
+ context.al = 8;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text1:
+ context._cmp(context.data.byte(139), 4);
+ if (!context.flags.z()) goto notmonk2text2;
+ context.al = 9;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text2:
+ context._cmp(context.data.byte(139), 7);
+ if (!context.flags.z()) goto notmonk2text3;
+ context.al = 10;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text3:
+ context._cmp(context.data.byte(139), 10);
+ if (!context.flags.z()) goto notmonk2text4;
+ context.al = 11;
+ context.bl = 0;
+ context.bh = 105;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text4:
+ context._cmp(context.data.byte(139), 13);
+ if (!context.flags.z()) goto notmonk2text5;
+ context.al = 12;
+ context.bl = 0;
+ context.bh = 120;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text5:
+ context._cmp(context.data.byte(139), 16);
+ if (!context.flags.z()) goto notmonk2text6;
+ context.al = 13;
+ context.bl = 0;
+ context.bh = 135;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text6:
+ context._cmp(context.data.byte(139), 19);
+ if (!context.flags.z()) goto notmonk2text7;
+ context.al = 14;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ context.dx = 1;
+ context.ah = 82;
+ { setuptimedtemp(context); return; };
+notmonk2text7:
+ context._cmp(context.data.byte(139), 22);
+ if (!context.flags.z()) goto notmonk2text8;
+ context.al = 15;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text8:
+ context._cmp(context.data.byte(139), 25);
+ if (!context.flags.z()) goto notmonk2text9;
+ context.al = 16;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text9:
+ context._cmp(context.data.byte(139), 28);
+ if (!context.flags.z()) goto notmonk2text10;
+ context.al = 17;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text10:
+ context._cmp(context.data.byte(139), 31);
+ if (!context.flags.z()) goto notmonk2text11;
+ context.al = 18;
+ context.bl = 36;
+ context.bh = 160;
+ context.cx = 100;
+ goto gotmonks2text;
+notmonk2text11:
+ return;
+gotmonks2text:
+ context.dx = 1;
+ context.cx = 120;
+ context.ah = 82;
+ setuptimedtemp(context);
+ return;
+}
+
+static inline void intro1text(Context & context) {
+ context._cmp(context.data.byte(139), 2);
+ if (!context.flags.z()) goto notintro1text1;
+ context.al = 40;
+ context.bl = 34;
+ context.bh = 130;
+ context.cx = 90;
+ goto gotintro1text;
+notintro1text1:
+ context._cmp(context.data.byte(139), 4);
+ if (!context.flags.z()) goto notintro1text2;
+ context.al = 41;
+ context.bl = 34;
+ context.bh = 130;
+ context.cx = 90;
+ goto gotintro1text;
+notintro1text2:
+ context._cmp(context.data.byte(139), 6);
+ if (!context.flags.z()) goto notintro1text3;
+ context.al = 42;
+ context.bl = 34;
+ context.bh = 130;
+ context.cx = 90;
+ goto gotintro1text;
+notintro1text3:
+ return;
+gotintro1text:
+ context.dx = 1;
+ context.ah = 82;
+oktalk2:
+ setuptimedtemp(context);
+ return;
+}
+
+static inline void intro2text(Context & context) {
+ context._cmp(context.ax, 5);
+ if (!context.flags.z()) goto notintro2text1;
+ context.al = 43;
+ context.bl = 34;
+ context.bh = 40;
+ context.cx = 90;
+ goto gotintro2text;
+notintro2text1:
+ context._cmp(context.ax, 15);
+ if (!context.flags.z()) goto notintro2text2;
+ context.al = 44;
+ context.bl = 34;
+ context.bh = 40;
+ context.cx = 90;
+ goto gotintro2text;
+notintro2text2:
+ return;
+gotintro2text:
+ context.dx = 1;
+ context.ah = 82;
+ setuptimedtemp(context);
+ return;
+}
+
+static inline void intro3text(Context & context) {
+ context._cmp(context.ax, 107);
+ if (!context.flags.z()) goto notintro3text1;
+ context.al = 45;
+ context.bl = 36;
+ context.bh = 56;
+ context.cx = 100;
+ goto gotintro3text;
+notintro3text1:
+ context._cmp(context.ax, 109);
+ if (!context.flags.z()) goto notintro3text2;
+ context.al = 46;
+ context.bl = 36;
+ context.bh = 56;
+ context.cx = 100;
+ goto gotintro3text;
+notintro3text2:
+ return;
+gotintro3text:
+ context.dx = 1;
+ context.ah = 82;
+ setuptimedtemp(context);
+ return;
+}
+
+static inline void monkandryan(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto notmonkryan;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 83);
+ if (!context.flags.z()) goto gotmonkryan;
+ context._add(context.data.byte(139), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ textformonk(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.ax = 77;
+ context._cmp(context.data.byte(139), 57);
+ if (!context.flags.z()) goto gotmonkryan;
+ context.data.byte(103) = 1;
+ return;
+gotmonkryan:
+ context.data.word(context.bx+3) = context.ax;
+notmonkryan:
+ showgamereel(context);
+ return;
+}
+
+static inline void endgameseq(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto notendseq;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 51);
+ if (!context.flags.z()) goto gotendseq;
+ context._cmp(context.data.byte(139), 140);
+ if (context.flags.z()) goto gotendseq;
+ context._add(context.data.byte(139), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ textforend(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.ax = 50;
+gotendseq:
+ context.data.word(context.bx+3) = context.ax;
+ context._cmp(context.ax, 134);
+ if (!context.flags.z()) goto notfadedown;
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.ax);
+ fadescreendownhalf(context);
+ context.ax = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ goto notendseq;
+notfadedown:
+ context._cmp(context.ax, 324);
+ if (!context.flags.z()) goto notfadeend;
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.ax);
+ fadescreendowns(context);
+ context.data.byte(387) = 7;
+ context.data.byte(388) = 1;
+ context.ax = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+notfadeend:
+ context._cmp(context.ax, 340);
+ if (!context.flags.z()) goto notendseq;
+ context.data.byte(103) = 1;
+notendseq:
+ showgamereel(context);
+ context.al = context.data.byte(149);
+ context.data.byte(context.bx+2) = context.al;
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 145);
+ if (!context.flags.z()) goto notendcreds;
+ context.data.word(context.bx+3) = 146;
+ rollendcredits(context);
+notendcreds:
+ return;
+}
+
+static inline void rollendcredits(Context & context) {
+ context.al = 16;
+ context.ah = 255;
+ playchannel0(context);
+ context.data.byte(386) = 7;
+ context.data.byte(387) = 0;
+ context.data.byte(388) = -1;
+ context.cl = 160;
+ context.ch = 160;
+ context.di = 75;
+ context.bx = 20;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ multiget(context);
+ context.es = context.data.word(466);
+ context.si = 3*2;
+ context.ax = context.data.word(context.si);
+ context.si = context.ax;
+ context._add(context.si, 66*2);
+ context.cx = 254;
+endcredits1:
+ context.push(context.cx);
+ context.bx = 10;
+ context.cx = context.data.word(77);
+endcredits2:
+ context.push(context.cx);
+ context.push(context.si);
+ context.push(context.di);
+ context.push(context.es);
+ context.push(context.bx);
+ vsync(context);
+ context.cl = 160;
+ context.ch = 160;
+ context.di = 75;
+ context.bx = 20;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ multiput(context);
+ vsync(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.di = context.pop();
+ context.si = context.pop();
+ context.push(context.si);
+ context.push(context.di);
+ context.push(context.es);
+ context.push(context.bx);
+ context.cx = 18;
+onelot:
+ context.push(context.cx);
+ context.di = 75;
+ context.dx = 161;
+ context.ax = 0;
+ printdirect(context);
+ context._add(context.bx, context.data.word(77));
+ context.cx = context.pop();
+ if (--context.cx) goto onelot;
+ vsync(context);
+ context.cl = 160;
+ context.ch = 160;
+ context.di = 75;
+ context.bx = 20;
+ multidump(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.di = context.pop();
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._sub(context.bx, 1);
+ if (--context.cx) goto endcredits2;
+ context.cx = context.pop();
+looknext:
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto gotnext;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto gotnext;
+ goto looknext;
+gotnext:
+ if (--context.cx) goto endcredits1;
+ context.cx = 100;
+ hangon(context);
+ paneltomap(context);
+ fadescreenuphalf(context);
+ return;
+}
+
+static inline void priest(Context & context) {
+ context._cmp(context.data.word(context.bx+3), 8);
+ if (context.flags.z()) goto priestspoken;
+ context.data.byte(234) = 0;
+ context.data.word(21) = 2;
+ checkspeed(context);
+ if (!context.flags.z()) goto priestwait;
+ context._add(context.data.word(context.bx+3), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ priesttext(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+priestwait:
+ return;
+priestspoken:
+ return;
+}
+
+static inline void madmanstelly(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 307);
+ if (!context.flags.z()) goto notendtelly;
+ context.ax = 300;
+notendtelly:
+ context.data.word(context.bx+3) = context.ax;
+ showgamereel(context);
+ return;
+}
+
+static inline void madman(Context & context) {
+ context.data.word(21) = 2;
+ checkspeed(context);
+ if (!context.flags.z()) goto nomadspeed;
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 364);
+ if (!context.flags.c()) goto ryansded;
+ context._cmp(context.ax, 10);
+ if (!context.flags.z()) goto notfirstmad;
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.ax);
+ context.dx = 2260;
+ loadtemptext(context);
+ context.ax = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.data.byte(64) = -1;
+ context.data.byte(69) = 0;
+notfirstmad:
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 294);
+ if (context.flags.z()) goto madmanspoken;
+ context._cmp(context.ax, 66);
+ if (!context.flags.z()) goto nomadspeak;
+ context._add(context.data.byte(64), 1);
+ context.push(context.es);
+ context.push(context.bx);
+ madmantext(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.ax = 53;
+ context._cmp(context.data.byte(64), 62);
+ if (context.flags.c()) goto nomadspeak;
+ context._cmp(context.data.byte(64), 68);
+ if (context.flags.z()) goto killryan;
+ context._cmp(context.data.byte(65), 8);
+ if (!context.flags.z()) goto nomadspeak;
+ context.data.byte(64) = 70;
+ context.data.byte(65) = -1;
+ context.data.byte(53) = 1;
+ context.ax = 67;
+ goto nomadspeak;
+killryan:
+ context.ax = 310;
+nomadspeak:
+ context.data.word(context.bx+3) = context.ax;
+nomadspeed:
+ showgamereel(context);
+ context.al = context.data.byte(148);
+ context.data.byte(context.bx+1) = context.al;
+ madmode(context);
+ return;
+madmanspoken:
+ context._cmp(context.data.byte(391), 1);
+ if (context.flags.z()) goto alreadywon;
+ context.data.byte(391) = 1;
+ context.push(context.es);
+ context.push(context.bx);
+ getridoftemptext(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+alreadywon:
+ return;
+ryansded:
+ context.data.byte(56) = 2;
+ showgamereel(context);
+ return;
+}
+
+static inline void madmantext(Context & context) {
+ context._cmp(context.data.byte(64), 61);
+ if (!context.flags.c()) goto nomadtext;
+ context.al = context.data.byte(64);
+ context._and(context.al, 3);
+ if (!context.flags.z()) goto nomadtext;
+ context.al = context.data.byte(64);
+ context._shr(context.al, 1);
+ context._shr(context.al, 1);
+ context._add(context.al, 47);
+ context.bl = 72;
+ context.bh = 80;
+ context.cx = 90;
+ context.dx = 1;
+ context.ah = 82;
+ setuptimedtemp(context);
+nomadtext:
+ return;
+}
+
+static inline void madmode(Context & context) {
+ context.data.word(21) = 2;
+ context.data.byte(234) = 0;
+ context._cmp(context.data.byte(64), 63);
+ if (context.flags.c()) goto iswatchmad;
+ context._cmp(context.data.byte(64), 68);
+ if (!context.flags.c()) goto iswatchmad;
+ context.data.byte(234) = 2;
+iswatchmad:
+ return;
+}
+
+static inline void priesttext(Context & context) {
+ context._cmp(context.data.word(context.bx+3), 2);
+ if (context.flags.c()) goto nopriesttext;
+ context._cmp(context.data.word(context.bx+3), 7);
+ if (!context.flags.c()) goto nopriesttext;
+ context.al = context.data.byte(context.bx+3);
+ context._and(context.al, 1);
+ if (!context.flags.z()) goto nopriesttext;
+ context.al = context.data.byte(context.bx+3);
+ context._shr(context.al, 1);
+ context._add(context.al, 50);
+ context.bl = 72;
+ context.bh = 80;
+ context.cx = 54;
+ context.dx = 1;
+ setuptimeduse(context);
+nopriesttext:
+ return;
+}
+
+static inline void textforend(Context & context) {
+ context._cmp(context.data.byte(139), 20);
+ if (!context.flags.z()) goto notendtext1;
+ context.al = 0;
+ context.bl = 34;
+ context.bh = 20;
+ context.cx = 60;
+ goto gotendtext;
+notendtext1:
+ context._cmp(context.data.byte(139), 65);
+ if (!context.flags.z()) goto notendtext2;
+ context.al = 1;
+ context.bl = 34;
+ context.bh = 20;
+ context.cx = 60;
+ goto gotendtext;
+notendtext2:
+ context._cmp(context.data.byte(139), 110);
+ if (!context.flags.z()) goto notendtext3;
+ context.al = 2;
+ context.bl = 34;
+ context.bh = 20;
+ context.cx = 60;
+ goto gotendtext;
+notendtext3:
+ return;
+gotendtext:
+ context.dx = 1;
+ context.ah = 83;
+ setuptimedtemp(context);
+ return;
+}
+
+static inline void textformonk(Context & context) {
+ context._cmp(context.data.byte(139), 1);
+ if (!context.flags.z()) goto notmonktext1;
+ context.al = 19;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext1:
+ context._cmp(context.data.byte(139), 5);
+ if (!context.flags.z()) goto notmonktext2;
+ context.al = 20;
+ context.bl = 68;
+ context.bh = 38;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext2:
+ context._cmp(context.data.byte(139), 9);
+ if (!context.flags.z()) goto notmonktext3;
+ context.al = 21;
+ context.bl = 48;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext3:
+ context._cmp(context.data.byte(139), 13);
+ if (!context.flags.z()) goto notmonktext4;
+ context.al = 22;
+ context.bl = 68;
+ context.bh = 38;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext4:
+ context._cmp(context.data.byte(139), 17);
+ if (!context.flags.z()) goto notmonktext5;
+ context.al = 23;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext5:
+ context._cmp(context.data.byte(139), 21);
+ if (!context.flags.z()) goto notmonktext6;
+ context.al = 24;
+ context.bl = 68;
+ context.bh = 38;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext6:
+ context._cmp(context.data.byte(139), 25);
+ if (!context.flags.z()) goto notmonktext7;
+ context.al = 25;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext7:
+ context._cmp(context.data.byte(139), 29);
+ if (!context.flags.z()) goto notmonktext8;
+ context.al = 26;
+ context.bl = 68;
+ context.bh = 38;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext8:
+ context._cmp(context.data.byte(139), 33);
+ if (!context.flags.z()) goto notmonktext9;
+ context.al = 27;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext9:
+ context._cmp(context.data.byte(139), 37);
+ if (!context.flags.z()) goto notmonktext10;
+ context.al = 28;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext10:
+ context._cmp(context.data.byte(139), 41);
+ if (!context.flags.z()) goto notmonktext11;
+ context.al = 29;
+ context.bl = 68;
+ context.bh = 38;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext11:
+ context._cmp(context.data.byte(139), 45);
+ if (!context.flags.z()) goto notmonktext12;
+ context.al = 30;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 120;
+ goto gotmonktext;
+notmonktext12:
+ context._cmp(context.data.byte(139), 49);
+ if (!context.flags.z()) goto notmonktext13;
+ context.al = 31;
+ context.bl = 68;
+ context.bh = 154;
+ context.cx = 220;
+ goto gotmonktext;
+notmonktext13:
+ context._cmp(context.data.byte(139), 53);
+ if (!context.flags.z()) goto notendtitles;
+ fadescreendowns(context);
+notendtitles:
+ return;
+gotmonktext:
+ context.dx = 1;
+ context.ah = 82;
+oktalk:
+ setuptimedtemp(context);
+ return;
+}
+
+static inline void drunk(Context & context) {
+ context._cmp(context.data.byte(42), 0);
+ if (!context.flags.z()) goto trampgone;
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 127);
+ context.data.byte(context.bx+7) = context.al;
+ showgamereel(context);
+ addtopeoplelist(context);
+trampgone:
+ return;
+}
+
+static inline void advisor(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto noadvisor;
+ goto noadvisor;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 123);
+ if (!context.flags.z()) goto notendadvis;
+ context.ax = 106;
+ goto gotadvframe;
+notendadvis:
+ context._cmp(context.ax, 108);
+ if (!context.flags.z()) goto gotadvframe;
+ context.push(context.ax);
+ randomnumber(context);
+ context.cl = context.al;
+ context.ax = context.pop();
+ context._cmp(context.cl, 3);
+ if (context.flags.c()) goto gotadvframe;
+ context.ax = 106;
+gotadvframe:
+ context.data.word(context.bx+3) = context.ax;
+noadvisor:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void copper(Context & context) {
+ checkspeed(context);
+ if (!context.flags.z()) goto nocopper;
+ context.ax = context.data.word(context.bx+3);
+ context._add(context.ax, 1);
+ context._cmp(context.ax, 94);
+ if (!context.flags.z()) goto notendcopper;
+ context.ax = 64;
+ goto gotcopframe;
+notendcopper:
+ context._cmp(context.ax, 81);
+ if (context.flags.z()) goto mightwait;
+ context._cmp(context.ax, 66);
+ if (!context.flags.z()) goto gotcopframe;
+mightwait:
+ context.push(context.ax);
+ randomnumber(context);
+ context.cl = context.al;
+ context.ax = context.pop();
+ context._cmp(context.cl, 7);
+ if (context.flags.c()) goto gotcopframe;
+ context._sub(context.ax, 1);
+gotcopframe:
+ context.data.word(context.bx+3) = context.ax;
+nocopper:
+ showgamereel(context);
+ addtopeoplelist(context);
+ return;
+}
+
+static inline void sparky(Context & context) {
+ context._cmp(context.data.word(16), 0);
+ if (context.flags.z()) goto animsparky;
+ context.data.byte(context.bx+7) = 3;
+ goto animsparky;
+animsparky:
+ checkspeed(context);
+ if (!context.flags.z()) goto finishsparky;
+ context._cmp(context.data.word(context.bx+3), 34);
+ if (!context.flags.z()) goto notsparky1;
+ randomnumber(context);
+ context._cmp(context.al, 30);
+ if (context.flags.c()) goto dosparky;
+ context.data.word(context.bx+3) = 27;
+ goto finishsparky;
+notsparky1:
+ context._cmp(context.data.word(context.bx+3), 48);
+ if (!context.flags.z()) goto dosparky;
+ context.data.word(context.bx+3) = 27;
+ goto finishsparky;
+dosparky:
+ context._add(context.data.word(context.bx+3), 1);
+finishsparky:
+ showgamereel(context);
+ addtopeoplelist(context);
+ context.al = context.data.byte(context.bx+7);
+ context._and(context.al, 128);
+ if (context.flags.z()) goto nottalkedsparky;
+ context.data.byte(49) = 1;
+nottalkedsparky:
+ return;
+}
+
+static inline void train(Context & context) {
+ return;
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 21);
+ if (!context.flags.c()) goto notrainyet;
+ context._add(context.ax, 1);
+ goto gottrainframe;
+notrainyet:
+ randomnumber(context);
+ context._cmp(context.al, 253);
+ if (context.flags.c()) goto notrainatall;
+ context._cmp(context.data.byte(475), 5);
+ if (!context.flags.z()) goto notrainatall;
+ context._cmp(context.data.byte(477), 5);
+ if (!context.flags.z()) goto notrainatall;
+ context.ax = 5;
+gottrainframe:
+ context.data.word(context.bx+3) = context.ax;
+ showgamereel(context);
+notrainatall:
+ return;
+}
+
+static inline void addtopeoplelist(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.bx);
+ context.cl = context.data.byte(context.bx+7);
+ context.ax = context.data.word(context.bx+3);
+ context.bx = context.data.word(18);
+ context.es = context.data.word(412);
+ context.data.word(context.bx) = context.ax;
+ context.ax = context.pop();
+ context.data.word(context.bx+2) = context.ax;
+ context.data.byte(context.bx+4) = context.cl;
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._add(context.data.word(18), 5);
+ return;
+}
+
+static inline void showgamereel(Context & context) {
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.ax, 512);
+ if (!context.flags.c()) goto noshow;
+ context.data.word(239) = context.ax;
+ context.push(context.es);
+ context.push(context.bx);
+ plotreel(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.ax = context.data.word(239);
+ context.data.word(context.bx+3) = context.ax;
+noshow:
+ return;
+}
+
+static inline void checkspeed(Context & context) {
+ context._cmp(context.data.byte(65), -1);
+ if (!context.flags.z()) goto forcenext;
+ context._add(context.data.byte(context.bx+6), 1);
+ context.al = context.data.byte(context.bx+6);
+ context._cmp(context.al, context.data.byte(context.bx+5));
+ if (!context.flags.z()) goto notspeed;
+ context.al = 0;
+ context.data.byte(context.bx+6) = context.al;
+ context._cmp(context.al, context.al);
+notspeed:
+ return;
+forcenext:
+ context._cmp(context.al, context.al);
+ return;
+}
+
+static inline void delsprite(Context & context) {
+ context.di = context.bx;
+ context.cx = 32;
+ context.al = 255;
+ while(--context.cx) context._stosb();
+ return;
+}
+
+static inline void mainman(Context & context) {
+ context._cmp(context.data.byte(187), 1);
+ if (!context.flags.z()) goto notinnewroom;
+ context.data.byte(187) = 0;
+ context.al = context.data.byte(151);
+ context.ah = context.data.byte(152);
+ context.data.word(context.bx+10) = context.ax;
+ context.data.byte(context.bx+29) = 0;
+ goto executewalk;
+notinnewroom:
+ context._sub(context.data.byte(context.bx+22), 1);
+ context._cmp(context.data.byte(context.bx+22), -1);
+ if (context.flags.z()) goto executewalk;
+ return;
+executewalk:
+ context.data.byte(context.bx+22) = 0;
+ context.al = context.data.byte(135);
+ context._cmp(context.al, context.data.byte(133));
+ if (context.flags.z()) goto facingok;
+ aboutturn(context);
+ goto notwalk;
+facingok:
+ context._cmp(context.data.byte(136), 0);
+ if (context.flags.z()) goto alreadyturned;
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto alreadyturned;
+ context.data.byte(473) = 1;
+ context.al = context.data.byte(133);
+ context._cmp(context.al, context.data.byte(134));
+ if (!context.flags.z()) goto alreadyturned;
+ checkforexit(context);
+alreadyturned:
+ context.data.byte(136) = 0;
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto walkman;
+ context.data.byte(context.bx+29) = 0;
+ goto notwalk;
+walkman:
+ context.al = context.data.byte(context.bx+29);
+ context._add(context.al, 1);
+ context._cmp(context.al, 11);
+ if (!context.flags.z()) goto notanimend1;
+ context.al = 1;
+notanimend1:
+ context.data.byte(context.bx+29) = context.al;
+ walking(context);
+ context._cmp(context.data.byte(492), 254);
+ if (context.flags.z()) goto afterwalk;
+ context.al = context.data.byte(133);
+ context._and(context.al, 1);
+ if (context.flags.z()) goto isdouble;
+ context.al = context.data.byte(context.bx+29);
+ context._cmp(context.al, 2);
+ if (context.flags.z()) goto afterwalk;
+ context._cmp(context.al, 7);
+ if (context.flags.z()) goto afterwalk;
+isdouble:
+ walking(context);
+afterwalk:
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto notwalk;
+ context.al = context.data.byte(135);
+ context._cmp(context.al, context.data.byte(133));
+ if (!context.flags.z()) goto notwalk;
+ context.data.byte(473) = 1;
+ context.al = context.data.byte(133);
+ context._cmp(context.al, context.data.byte(134));
+ if (!context.flags.z()) goto notwalk;
+ checkforexit(context);
+notwalk:
+ context.al = context.data.byte(133);
+ context.ah = 0;
+ context.di = 1105;
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(context.di);
+ context._add(context.al, context.data.byte(context.bx+29));
+ context.data.byte(context.bx+15) = context.al;
+ context.ax = context.data.word(context.bx+10);
+ context.data.byte(151) = context.al;
+ context.data.byte(152) = context.ah;
+ return;
+}
+
+static inline void aboutturn(Context & context) {
+ context._cmp(context.data.byte(136), 1);
+ if (context.flags.z()) goto incdir;
+ context._cmp(context.data.byte(136), -1);
+ if (context.flags.z()) goto decdir;
+ context.al = context.data.byte(133);
+ context._sub(context.al, context.data.byte(135));
+ if (!context.flags.c()) goto higher;
+ context._neg(context.al);
+ context._cmp(context.al, 4);
+ if (!context.flags.c()) goto decdir;
+ goto incdir;
+higher:
+ context._cmp(context.al, 4);
+ if (!context.flags.c()) goto incdir;
+ goto decdir;
+incdir:
+ context.data.byte(136) = 1;
+ context.al = context.data.byte(133);
+ context._add(context.al, 1);
+ context._and(context.al, 7);
+ context.data.byte(133) = context.al;
+ context.data.byte(context.bx+29) = 0;
+ return;
+decdir:
+ context.data.byte(136) = -1;
+ context.al = context.data.byte(133);
+ context._sub(context.al, 1);
+ context._and(context.al, 7);
+ context.data.byte(133) = context.al;
+ context.data.byte(context.bx+29) = 0;
+ return;
+}
+
+static inline void walking(Context & context) {
+ context._cmp(context.data.byte(493), 0);
+ if (context.flags.z()) goto normalwalk;
+ context.al = context.data.byte(492);
+ context._sub(context.al, 1);
+ context.data.byte(492) = context.al;
+ context._cmp(context.al, 200);
+ if (!context.flags.c()) goto endofline;
+ goto continuewalk;
+normalwalk:
+ context.al = context.data.byte(492);
+ context._add(context.al, 1);
+ context.data.byte(492) = context.al;
+ context._cmp(context.al, context.data.byte(494));
+ if (!context.flags.c()) goto endofline;
+continuewalk:
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.push(context.es);
+ context.push(context.bx);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.bx = 8344;
+ context._add(context.bx, context.ax);
+ context.ax = context.data.word(context.bx);
+ context.bx = context.pop();
+ context.es = context.pop();
+stillline:
+ context.data.word(context.bx+10) = context.ax;
+ return;
+endofline:
+ context.data.byte(492) = 254;
+ context.al = context.data.byte(478);
+ context.data.byte(475) = context.al;
+ context._cmp(context.al, context.data.byte(477));
+ if (context.flags.z()) goto finishedwalk;
+ context.al = context.data.byte(477);
+ context.data.byte(478) = context.al;
+ context.push(context.es);
+ context.push(context.bx);
+ autosetwalk(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+finishedwalk:
+ facerightway(context);
+ return;
+}
+
+static inline void checkforexit(Context & context) {
+ context.cl = context.data.byte(151);
+ context._add(context.cl, 12);
+ context.ch = context.data.byte(152);
+ context._add(context.ch, 12);
+ checkone(context);
+ context.data.byte(153) = context.cl;
+ context.data.byte(154) = context.ch;
+ context.data.byte(155) = context.dl;
+ context.data.byte(156) = context.dh;
+ context.al = context.data.byte(153);
+ context._test(context.al, 64);
+ if (context.flags.z()) goto notnewdirect;
+ context.al = context.data.byte(154);
+ context.data.byte(189) = context.al;
+ return;
+notnewdirect:
+ context._test(context.al, 32);
+ if (context.flags.z()) goto notleave;
+ context.push(context.es);
+ context.push(context.bx);
+ context._cmp(context.data.byte(184), 2);
+ if (!context.flags.z()) goto notlouis;
+ context.bl = 0;
+ context.push(context.bx);
+ context.al = 'W';
+ context.ah = 'E';
+ context.cl = 'T';
+ context.ch = 'A';
+ isryanholding(context);
+ context.bx = context.pop();
+ if (context.flags.z()) goto noshoe1;
+ context._add(context.bl, 1);
+noshoe1:
+ context.push(context.bx);
+ context.al = 'W';
+ context.ah = 'E';
+ context.cl = 'T';
+ context.ch = 'B';
+ isryanholding(context);
+ context.bx = context.pop();
+ if (context.flags.z()) goto noshoe2;
+ context._add(context.bl, 1);
+noshoe2:
+ context._cmp(context.bl, 2);
+ if (context.flags.z()) goto notlouis;
+ context.al = 42;
+ context._cmp(context.bl, 0);
+ if (context.flags.z()) goto notravmessage;
+ context._add(context.al, 1);
+notravmessage:
+ context.cx = 80;
+ context.dx = 10;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ context.al = context.data.byte(133);
+ context._add(context.al, 4);
+ context._and(context.al, 7);
+ context.data.byte(135) = context.al;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+notlouis:
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.data.byte(60) = 1;
+ return;
+notleave:
+ context._test(context.al, 4);
+ if (context.flags.z()) goto notaleft;
+ adjustleft(context);
+ return;
+notaleft:
+ context._test(context.al, 2);
+ if (context.flags.z()) goto notaright;
+ adjustright(context);
+ return;
+notaright:
+ context._test(context.al, 8);
+ if (context.flags.z()) goto notadown;
+ adjustdown(context);
+ return;
+notadown:
+ context._test(context.al, 16);
+ if (context.flags.z()) goto notanup;
+ adjustup(context);
+ return;
+notanup:
+ return;
+}
+
+static inline void adjustdown(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context._add(context.data.byte(149), 10);
+ context.al = context.data.byte(154);
+ context.cl = 16;
+ context._mul(context.cl);
+ context.data.byte(context.bx+11) = context.al;
+ context.data.byte(186) = 1;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void adjustup(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context._sub(context.data.byte(149), 10);
+ context.al = context.data.byte(154);
+ context.cl = 16;
+ context._mul(context.cl);
+ context.data.byte(context.bx+11) = context.al;
+ context.data.byte(186) = 1;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void adjustleft(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.data.byte(153) = 0;
+ context._sub(context.data.byte(148), 11);
+ context.al = context.data.byte(154);
+ context.cl = 16;
+ context._mul(context.cl);
+ context.data.byte(context.bx+10) = context.al;
+ context.data.byte(186) = 1;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void adjustright(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context._add(context.data.byte(148), 11);
+ context.al = context.data.byte(154);
+ context.cl = 16;
+ context._mul(context.cl);
+ context._sub(context.al, 2);
+ context.data.byte(context.bx+10) = context.al;
+ context.data.byte(186) = 1;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void backobject(Context & context) {
+ context.ds = context.data.word(428);
+ context.di = context.data.word(context.bx+20);
+ context.al = context.data.byte(context.bx+18);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto _tmp48z;
+ context._sub(context.al, 1);
+ context.data.byte(context.bx+18) = context.al;
+ goto finishback;
+_tmp48z:
+ context.al = context.data.byte(context.di+7);
+ context.data.byte(context.bx+18) = context.al;
+ context.al = context.data.byte(context.di+8);
+ context._cmp(context.al, 6);
+ if (!context.flags.z()) goto notwidedoor;
+ widedoor(context);
+ goto finishback;
+notwidedoor:
+ context._cmp(context.al, 5);
+ if (!context.flags.z()) goto notrandom;
+ random(context);
+ goto finishback;
+notrandom:
+ context._cmp(context.al, 4);
+ if (!context.flags.z()) goto notlockdoor;
+ lockeddoorway(context);
+ goto finishback;
+notlockdoor:
+ context._cmp(context.al, 3);
+ if (!context.flags.z()) goto notlift;
+ liftsprite(context);
+ goto finishback;
+notlift:
+ context._cmp(context.al, 2);
+ if (!context.flags.z()) goto notdoor;
+ doorway(context);
+ goto finishback;
+notdoor:
+ context._cmp(context.al, 1);
+ if (!context.flags.z()) goto steadyob;
+ constant(context);
+ goto finishback;
+steadyob:
+ steady(context);
+finishback:
+ return;
+}
+
+static inline void liftsprite(Context & context) {
+ context.al = context.data.byte(35);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto liftclosed;
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto liftopen;
+ context._cmp(context.al, 3);
+ if (context.flags.z()) goto openlift;
+ context.al = context.data.byte(context.bx+19);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishclose;
+ context._sub(context.al, 1);
+ context._cmp(context.al, 11);
+ if (!context.flags.z()) goto pokelift;
+ context.push(context.ax);
+ context.al = 3;
+ liftnoise(context);
+ context.ax = context.pop();
+ goto pokelift;
+finishclose:
+ context.data.byte(35) = 0;
+ return;
+openlift:
+ context.al = context.data.byte(context.bx+19);
+ context._cmp(context.al, 12);
+ if (context.flags.z()) goto endoflist;
+ context._add(context.al, 1);
+ context._cmp(context.al, 1);
+ if (!context.flags.z()) goto pokelift;
+ context.push(context.ax);
+ context.al = 2;
+ liftnoise(context);
+ context.ax = context.pop();
+pokelift:
+ context.data.byte(context.bx+19) = context.al;
+ context.ah = 0;
+ context.push(context.di);
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(context.di+18);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ return;
+endoflist:
+ context.data.byte(35) = 1;
+ return;
+liftopen:
+ context.al = context.data.byte(36);
+ context.push(context.es);
+ context.push(context.bx);
+ turnpathon(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.data.byte(40), 0);
+ if (context.flags.z()) goto nocountclose;
+ context._sub(context.data.byte(40), 1);
+ context._cmp(context.data.byte(40), 0);
+ if (!context.flags.z()) goto nocountclose;
+ context.data.byte(35) = 2;
+nocountclose:
+ context.al = 12;
+ goto pokelift;
+liftclosed:
+ context.al = context.data.byte(36);
+ context.push(context.es);
+ context.push(context.bx);
+ turnpathoff(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.data.byte(39), 0);
+ if (context.flags.z()) goto nocountopen;
+ context._sub(context.data.byte(39), 1);
+ context._cmp(context.data.byte(39), 0);
+ if (!context.flags.z()) goto nocountopen;
+ context.data.byte(35) = 3;
+nocountopen:
+ context.al = 0;
+ goto pokelift;
+}
+
+static inline void liftnoise(Context & context) {
+ context._cmp(context.data.byte(184), 5);
+ if (context.flags.z()) goto hissnoise;
+ context._cmp(context.data.byte(184), 21);
+ if (context.flags.z()) goto hissnoise;
+ playchannel1(context);
+ return;
+hissnoise:
+ context.al = 13;
+ playchannel1(context);
+ return;
+}
+
+static inline void random(Context & context) {
+ randomnum1(context);
+ context.push(context.di);
+ context._and(context.ax, 7);
+ context._add(context.di, 18);
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(context.di);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ return;
+}
+
+static inline void steady(Context & context) {
+ context.al = context.data.byte(context.di+18);
+ context.data.byte(context.di+17) = context.al;
+ context.data.byte(context.bx+15) = context.al;
+ return;
+}
+
+static inline void constant(Context & context) {
+ context._add(context.data.byte(context.bx+19), 1);
+ context.cl = context.data.byte(context.bx+19);
+ context.ch = 0;
+ context._add(context.di, context.cx);
+ context._cmp(context.data.byte(context.di+18), 255);
+ if (!context.flags.z()) goto gotconst;
+ context._sub(context.di, context.cx);
+ context.cx = 0;
+ context.data.byte(context.bx+19) = context.cl;
+gotconst:
+ context.al = context.data.byte(context.di+18);
+ context._sub(context.di, context.cx);
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ return;
+}
+
+static inline void doorway(Context & context) {
+ context.data.byte(193) = -24;
+ context.data.byte(194) = 10;
+ context.data.byte(195) = -30;
+ context.data.byte(196) = 10;
+ dodoor(context);
+ return;
+}
+
+static inline void widedoor(Context & context) {
+ context.data.byte(193) = -24;
+ context.data.byte(194) = 24;
+ context.data.byte(195) = -30;
+ context.data.byte(196) = 24;
+ dodoor(context);
+ return;
+}
+
+static inline void dodoor(Context & context) {
+ context.al = context.data.byte(151);
+ context.ah = context.data.byte(152);
+ context.cl = context.data.byte(context.bx+10);
+ context.ch = context.data.byte(context.bx+11);
+ context._cmp(context.al, context.cl);
+ if (!context.flags.c()) goto rtofdoor;
+ context._sub(context.al, context.cl);
+ context._cmp(context.al, context.data.byte(193));
+ if (!context.flags.c()) goto upordown;
+ goto shutdoor;
+rtofdoor:
+ context._sub(context.al, context.cl);
+ context._cmp(context.al, context.data.byte(194));
+ if (!context.flags.c()) goto shutdoor;
+upordown:
+ context._cmp(context.ah, context.ch);
+ if (!context.flags.c()) goto botofdoor;
+ context._sub(context.ah, context.ch);
+ context._cmp(context.ah, context.data.byte(195));
+ if (context.flags.c()) goto shutdoor;
+ goto opendoor;
+botofdoor:
+ context._sub(context.ah, context.ch);
+ context._cmp(context.ah, context.data.byte(196));
+ if (!context.flags.c()) goto shutdoor;
+opendoor:
+ context.cl = context.data.byte(context.bx+19);
+ context._cmp(context.data.byte(61), 1);
+ if (!context.flags.z()) goto notthrough;
+ context._cmp(context.cl, 0);
+ if (!context.flags.z()) goto notthrough;
+ context.cl = 6;
+notthrough:
+ context._add(context.cl, 1);
+ context._cmp(context.cl, 1);
+ if (!context.flags.z()) goto notdoorsound2;
+ context.al = 0;
+ context._cmp(context.data.byte(184), 5);
+ if (!context.flags.z()) goto nothoteldoor2;
+ context.al = 13;
+nothoteldoor2:
+ playchannel1(context);
+notdoorsound2:
+ context.ch = 0;
+ context.push(context.di);
+ context._add(context.di, context.cx);
+ context.al = context.data.byte(context.di+18);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto atlast1;
+ context._sub(context.di, 1);
+ context._sub(context.cl, 1);
+atlast1:
+ context.data.byte(context.bx+19) = context.cl;
+ context.al = context.data.byte(context.di+18);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ context.data.byte(61) = 1;
+ return;
+shutdoor:
+ context.cl = context.data.byte(context.bx+19);
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto notdoorsound1;
+ context.al = 1;
+ context._cmp(context.data.byte(184), 5);
+ if (!context.flags.z()) goto nothoteldoor1;
+ context.al = 13;
+nothoteldoor1:
+ playchannel1(context);
+notdoorsound1:
+ context._cmp(context.cl, 0);
+ if (context.flags.z()) goto atlast2;
+ context._sub(context.cl, 1);
+ context.data.byte(context.bx+19) = context.cl;
+atlast2:
+ context.ch = 0;
+ context.push(context.di);
+ context._add(context.di, context.cx);
+ context.al = context.data.byte(context.di+18);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto notnearly;
+ context.data.byte(61) = 0;
+notnearly:
+ return;
+}
+
+static inline void lockeddoorway(Context & context) {
+ context.al = context.data.byte(151);
+ context.ah = context.data.byte(152);
+ context.cl = context.data.byte(context.bx+10);
+ context.ch = context.data.byte(context.bx+11);
+ context._cmp(context.al, context.cl);
+ if (!context.flags.c()) goto rtofdoor2;
+ context._sub(context.al, context.cl);
+ context._cmp(context.al, -24);
+ if (!context.flags.c()) goto upordown2;
+ goto shutdoor2;
+rtofdoor2:
+ context._sub(context.al, context.cl);
+ context._cmp(context.al, 10);
+ if (!context.flags.c()) goto shutdoor2;
+upordown2:
+ context._cmp(context.ah, context.ch);
+ if (!context.flags.c()) goto botofdoor2;
+ context._sub(context.ah, context.ch);
+ context._cmp(context.ah, -30);
+ if (context.flags.c()) goto shutdoor2;
+ goto opendoor2;
+botofdoor2:
+ context._sub(context.ah, context.ch);
+ context._cmp(context.ah, 12);
+ if (!context.flags.c()) goto shutdoor2;
+opendoor2:
+ context._cmp(context.data.byte(61), 1);
+ if (context.flags.z()) goto mustbeopen;
+ context._cmp(context.data.byte(37), 1);
+ if (context.flags.z()) goto shutdoor;
+mustbeopen:
+ context.cl = context.data.byte(context.bx+19);
+ context._cmp(context.cl, 1);
+ if (!context.flags.z()) goto notdoorsound4;
+ context.al = 0;
+ playchannel1(context);
+notdoorsound4:
+ context._cmp(context.cl, 6);
+ if (!context.flags.z()) goto noturnonyet;
+ context.al = context.data.byte(38);
+ context.push(context.es);
+ context.push(context.bx);
+ turnpathon(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+noturnonyet:
+ context.cl = context.data.byte(context.bx+19);
+ context._cmp(context.data.byte(61), 1);
+ if (!context.flags.z()) goto notthrough2;
+ context._cmp(context.cl, 0);
+ if (!context.flags.z()) goto notthrough2;
+ context.cl = 6;
+notthrough2:
+ context._add(context.cl, 1);
+ context.ch = 0;
+ context.push(context.di);
+ context._add(context.di, context.cx);
+ context.al = context.data.byte(context.di+18);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto atlast3;
+ context._sub(context.di, 1);
+ context._sub(context.cl, 1);
+atlast3:
+ context.data.byte(context.bx+19) = context.cl;
+ context.al = context.data.byte(context.di+18);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto justshutting;
+ context.data.byte(61) = 1;
+justshutting:
+ return;
+shutdoor2:
+ context.cl = context.data.byte(context.bx+19);
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto notdoorsound3;
+ context.al = 1;
+ playchannel1(context);
+notdoorsound3:
+ context._cmp(context.cl, 0);
+ if (context.flags.z()) goto atlast4;
+ context._sub(context.cl, 1);
+ context.data.byte(context.bx+19) = context.cl;
+atlast4:
+ context.ch = 0;
+ context.data.byte(61) = 0;
+ context.push(context.di);
+ context._add(context.di, context.cx);
+ context.al = context.data.byte(context.di+18);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ context._cmp(context.cl, 0);
+ if (!context.flags.z()) goto notlocky;
+ context.al = context.data.byte(38);
+ context.push(context.es);
+ context.push(context.bx);
+ turnpathoff(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.data.byte(37) = 1;
+notlocky:
+ return;
+/*continuing to unbounded code: shutdoor from dodoor:60-87*/
+shutdoor:
+ context.cl = context.data.byte(context.bx+19);
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto notdoorsound1;
+ context.al = 1;
+ context._cmp(context.data.byte(184), 5);
+ if (!context.flags.z()) goto nothoteldoor1;
+ context.al = 13;
+nothoteldoor1:
+ playchannel1(context);
+notdoorsound1:
+ context._cmp(context.cl, 0);
+ if (context.flags.z()) goto atlast2;
+ context._sub(context.cl, 1);
+ context.data.byte(context.bx+19) = context.cl;
+atlast2:
+ context.ch = 0;
+ context.push(context.di);
+ context._add(context.di, context.cx);
+ context.al = context.data.byte(context.di+18);
+ context.di = context.pop();
+ context.data.byte(context.bx+15) = context.al;
+ context.data.byte(context.di+17) = context.al;
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto notnearly;
+ context.data.byte(61) = 0;
+notnearly:
+ return;
+ return;
+}
+
+static inline void getreelframeax(Context & context) {
+ context.push(context.ds);
+ context.data.word(160) = context.ax;
+ findsource(context);
+ context.es = context.ds;
+ context.ds = context.pop();
+ context.ax = context.data.word(160);
+ context._sub(context.ax, context.data.word(244));
+ context._add(context.ax, context.ax);
+ context.cx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.cx);
+ context.bx = context.ax;
+ return;
+}
+
+static inline void dumpeverything(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40);
+dumpevery1:
+ context.ax = context.data.word(context.bx);
+ context.cx = context.data.word(context.bx+2);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto finishevery1;
+ context._cmp(context.ax, context.data.word(context.bx+(40*5)));
+ if (!context.flags.z()) goto notskip1;
+ context._cmp(context.cx, context.data.word(context.bx+(40*5)+2));
+ if (context.flags.z()) goto skip1;
+notskip1:
+ context.push(context.bx);
+ context.push(context.es);
+ context.push(context.ds);
+ context.bl = context.ah;
+ context.bh = 0;
+ context.ah = 0;
+ context.di = context.ax;
+ context._add(context.di, context.data.word(117));
+ context._add(context.bx, context.data.word(119));
+ multidump(context);
+ context.ds = context.pop();
+ context.es = context.pop();
+ context.bx = context.pop();
+skip1:
+ context._add(context.bx, 5);
+ goto dumpevery1;
+finishevery1:
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(40*5);
+dumpevery2:
+ context.ax = context.data.word(context.bx);
+ context.cx = context.data.word(context.bx+2);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto finishevery2;
+ context.push(context.bx);
+ context.push(context.es);
+ context.push(context.ds);
+ context.bl = context.ah;
+ context.bh = 0;
+ context.ah = 0;
+ context.di = context.ax;
+ context._add(context.di, context.data.word(117));
+ context._add(context.bx, context.data.word(119));
+ multidump(context);
+ context.ds = context.pop();
+ context.es = context.pop();
+ context.bx = context.pop();
+ context._add(context.bx, 5);
+ goto dumpevery2;
+finishevery2:
+ return;
+}
+
+static inline void readabyte(Context & context) {
+ context._cmp(context.si, 30000);
+ if (!context.flags.z()) goto notendblock;
+ context.push(context.bx);
+ context.push(context.es);
+ context.push(context.di);
+ context.push(context.ds);
+ context.push(context.si);
+ readoneblock(context);
+ context.si = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.si = 0;
+notendblock:
+ context._lodsb();
+ return;
+}
+
+static inline void printundermon(Context & context) {
+ context.si = (320*43)+76;
+ context.di = context.si;
+ context.es = context.data.word(400);
+ context._add(context.si, 8*320);
+ context.dx = 0x0a000;
+ context.ds = context.dx;
+ context.cx = 104;
+scrollmonloop1:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.si);
+ context.cx = 170;
+scrollmonloop2:
+ context._lodsb();
+ context._cmp(context.al, 231);
+ if (!context.flags.c()) goto dontplace;
+placeit:
+ context._stosb();
+ if (--context.cx) goto scrollmonloop2;
+ goto finmonscroll;
+dontplace:
+ context._add(context.di, 1);
+ if (--context.cx) goto scrollmonloop2;
+finmonscroll:
+ context.si = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 320);
+ context._add(context.di, 320);
+ if (--context.cx) goto scrollmonloop1;
+ return;
+}
+
+static inline void pixelcheckset(Context & context) {
+ context.push(context.ax);
+ context._sub(context.al, context.data.byte(context.bx));
+ context._sub(context.ah, context.data.byte(context.bx+1));
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.ax);
+ context.al = context.data.byte(context.bx+4);
+ getsetad(context);
+ context.al = context.data.byte(context.bx+17);
+ context.es = context.data.word(444);
+ context.bx = 0;
+ context.ah = 0;
+ context.cx = 6;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.ax = context.pop();
+ context.push(context.ax);
+ context.al = context.ah;
+ context.ah = 0;
+ context.cl = context.data.byte(context.bx);
+ context.ch = 0;
+ context._mul(context.cx);
+ context.cx = context.pop();
+ context.ch = 0;
+ context._add(context.ax, context.cx);
+ context._add(context.ax, context.data.word(context.bx+2));
+ context.bx = context.ax;
+ context._add(context.bx, 0+2080);
+ context.al = context.data.byte(context.bx);
+ context.dl = context.al;
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.ax = context.pop();
+ context._cmp(context.dl, 0);
+ return;
+}
+
+static inline void delthisone(Context & context) {
+ context.push(context.ax);
+ context.push(context.ax);
+ context.al = context.ah;
+ context.ah = 0;
+ context._add(context.ax, context.data.word(119));
+ context.bx = 320;
+ context._mul(context.bx);
+ context.bx = context.pop();
+ context.bh = 0;
+ context._add(context.bx, context.data.word(117));
+ context._add(context.ax, context.bx);
+ context.di = context.ax;
+ context.ax = context.pop();
+ context.push(context.ax);
+ context.al = context.ah;
+ context.ah = 0;
+ context.bx = 22*8;
+ context._mul(context.bx);
+ context.bx = context.pop();
+ context.bh = 0;
+ context._add(context.ax, context.bx);
+ context.si = context.ax;
+ context.es = context.data.word(400);
+ context.ds = context.data.word(402);
+ context.dl = context.cl;
+ context.dh = 0;
+ context.ax = 320;
+ context._sub(context.ax, context.dx);
+ context._neg(context.dx);
+ context._add(context.dx, 22*8);
+deloneloop:
+ context.push(context.cx);
+ context.ch = 0;
+ while(--context.cx) context._movsb();
+ context.cx = context.pop();
+ context._add(context.di, context.ax);
+ context._add(context.si, context.dx);
+ context._sub(context.ch, 1);
+ if (!context.flags.z()) goto deloneloop;
+ return;
+}
+
+static inline void dofade(Context & context) {
+ context._cmp(context.data.byte(344), 0);
+ if (context.flags.z()) goto finishfade;
+ context.cl = context.data.byte(345);
+ context.ch = 0;
+ context.al = context.data.byte(343);
+ context.ah = 0;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context._add(context.si, context.ax);
+ context._add(context.si, context.ax);
+ context._add(context.si, context.ax);
+ showgroup(context);
+ context.al = context.data.byte(345);
+ context._add(context.al, context.data.byte(343));
+ context.data.byte(343) = context.al;
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto finishfade;
+ fadecalculation(context);
+finishfade:
+ return;
+}
+
+static inline void fadetowhite(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.cx = 768;
+ context.al = 63;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.al = 0;
+ context._stosb();
+ context._stosb();
+ context._stosb();
+ paltostartpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ return;
+}
+
+static inline void fadefromwhite(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.cx = 768;
+ context.al = 63;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.al = 0;
+ context._stosb();
+ context._stosb();
+ context._stosb();
+ paltoendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ return;
+}
+
+static inline void fadescreendownhalf(Context & context) {
+ paltostartpal(context);
+ paltoendpal(context);
+ context.cx = 768;
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+halfend:
+ context.al = context.data.byte(context.bx);
+ context._shr(context.al, 1);
+ context.data.byte(context.bx) = context.al;
+ context._add(context.bx, 1);
+ if (--context.cx) goto halfend;
+ context.ds = context.data.word(412);
+ context.es = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+(56*3);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(56*3);
+ context.cx = 3*5;
+ while(--context.cx) context._movsb();
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+(77*3);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(77*3);
+ context.cx = 3*2;
+ while(--context.cx) context._movsb();
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 31;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 32;
+ return;
+}
+
+static inline void fadescreenuphalf(Context & context) {
+ endpaltostart(context);
+ paltoendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 31;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 32;
+ return;
+}
+
+static inline void fadecalculation(Context & context) {
+ context._cmp(context.data.byte(346), 0);
+ if (context.flags.z()) goto nomorefading;
+ context.bl = context.data.byte(346);
+ context.es = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.cx = 768;
+fadecolloop:
+ context.al = context.data.byte(context.si);
+ context.ah = context.data.byte(context.di);
+ context._cmp(context.al, context.ah);
+ if (context.flags.z()) goto gotthere;
+ if (context.flags.c()) goto lesscolour;
+ context._sub(context.data.byte(context.si), 1);
+ goto gotthere;
+lesscolour:
+ context._cmp(context.bl, context.ah);
+ if (context.flags.z()) goto withit;
+ if (!context.flags.c()) goto gotthere;
+withit:
+ context._add(context.data.byte(context.si), 1);
+gotthere:
+ context._add(context.si, 1);
+ context._add(context.di, 1);
+ if (--context.cx) goto fadecolloop;
+ context._sub(context.data.byte(346), 1);
+ return;
+nomorefading:
+ context.data.byte(344) = 0;
+ return;
+}
+
+static inline void startpaltoend(Context & context) {
+ context.es = context.data.word(412);
+ context.ds = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.cx = 768/2;
+ while(--context.cx) context._movsw();
+ return;
+}
+
+static inline void fadedownmon(Context & context) {
+ paltostartpal(context);
+ paltoendpal(context);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(231*3);
+ context.cx = 3*8;
+ context.ax = 0;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(246*3);
+ context._stosb();
+ context._stosw();
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ context.cx = 64;
+ hangon(context);
+ return;
+}
+
+static inline void fadeupmon(Context & context) {
+ paltostartpal(context);
+ paltoendpal(context);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(231*3);
+ context.cx = 3*8;
+ context.ax = 0;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(246*3);
+ context._stosb();
+ context._stosw();
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ context.cx = 128;
+ hangon(context);
+ return;
+}
+
+static inline void fadeupmonfirst(Context & context) {
+ paltostartpal(context);
+ paltoendpal(context);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(231*3);
+ context.cx = 3*8;
+ context.ax = 0;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(246*3);
+ context._stosb();
+ context._stosw();
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ context.cx = 64;
+ hangon(context);
+ context.al = 26;
+ playchannel1(context);
+ context.cx = 64;
+ hangon(context);
+ return;
+}
+
+static inline void fadeupyellows(Context & context) {
+ paltoendpal(context);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(231*3);
+ context.cx = 3*8;
+ context.ax = 0;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(246*3);
+ context._stosb();
+ context._stosw();
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ context.cx = 128;
+ hangon(context);
+ return;
+}
+
+static inline void initialmoncols(Context & context) {
+ paltostartpal(context);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(230*3);
+ context.cx = 3*9;
+ context.ax = 0;
+ while(--context.cx) context._stosb();
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(246*3);
+ context._stosb();
+ context._stosw();
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+(230*3);
+ context.al = 230;
+ context.cx = 18;
+ showgroup(context);
+ return;
+}
+
+static inline void monprint(Context & context) {
+ context.data.byte(72) = 1;
+ context.si = context.bx;
+ context.dl = 166;
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.ds = context.data.word(406);
+printloop8:
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.dx);
+ getnumber(context);
+ context.ch = 0;
+printloop7:
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto finishmon2;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishmon;
+ context._cmp(context.al, 34);
+ if (context.flags.z()) goto finishmon;
+ context._cmp(context.al, '=');
+ if (context.flags.z()) goto finishmon;
+ context._cmp(context.al, '%');
+ if (!context.flags.z()) goto nottrigger;
+ context.ah = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._add(context.si, 1);
+ goto finishmon;
+nottrigger:
+ context.push(context.cx);
+ context.push(context.es);
+ modifychar(context);
+ printchar(context);
+ context.data.word(312) = context.di;
+ context.data.word(314) = context.bx;
+ context.data.word(138) = 1;
+ printcurs(context);
+ vsync(context);
+ context.push(context.si);
+ context.push(context.dx);
+ context.push(context.ds);
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.di);
+ lockmon(context);
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.ds = context.pop();
+ context.dx = context.pop();
+ context.si = context.pop();
+ delcurs(context);
+ context.es = context.pop();
+ context.cx = context.pop();
+ if (--context.cx) goto printloop7;
+finishmon2:
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ scrollmonitor(context);
+ context.data.word(312) = context.di;
+ goto printloop8;
+finishmon:
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context._cmp(context.al, '%');
+ if (!context.flags.z()) goto nottrigger2;
+ context.data.byte(55) = context.ah;
+nottrigger2:
+ context.data.word(312) = context.di;
+ scrollmonitor(context);
+ context.bx = context.si;
+ context.data.byte(72) = 0;
+ return;
+}
+
+static inline void fillryan(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32;
+ findallryan(context);
+ context.si = 0+(228*13)+32;
+ context.al = context.data.byte(19);
+ context.ah = 0;
+ context.cx = 20;
+ context._mul(context.cx);
+ context._add(context.si, context.ax);
+ context.di = 80;
+ context.bx = 58;
+ context.cx = 2;
+ryanloop2:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.bx);
+ context.cx = 5;
+ryanloop1:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.bx);
+ context.ax = context.data.word(context.si);
+ context._add(context.si, 2);
+ context.push(context.si);
+ context.push(context.es);
+ obtoinv(context);
+ context.es = context.pop();
+ context.si = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.di, 44);
+ if (--context.cx) goto ryanloop1;
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 44);
+ if (--context.cx) goto ryanloop2;
+ showryanpage(context);
+ return;
+}
+
+static inline void fillopen(Context & context) {
+ deltextline(context);
+ getopenedsize(context);
+ context._cmp(context.ah, 4);
+ if (context.flags.c()) goto lessthanapage;
+ context.ah = 4;
+lessthanapage:
+ context.al = 1;
+ context.push(context.ax);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13);
+ findallopen(context);
+ context.si = 0+(228*13);
+ context.di = 80;
+ context.bx = 58+96;
+ context.cx = context.pop();
+openloop1:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.bx);
+ context.ax = context.data.word(context.si);
+ context._add(context.si, 2);
+ context.push(context.si);
+ context.push(context.es);
+ context._cmp(context.ch, context.cl);
+ if (context.flags.c()) goto nextopenslot;
+ obtoinv(context);
+nextopenslot:
+ context.es = context.pop();
+ context.si = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.di, 44);
+ context._add(context.cl, 1);
+ context._cmp(context.cl, 5);
+ if (!context.flags.z()) goto openloop1;
+ undertextline(context);
+ return;
+}
+
+static inline void findallryan(Context & context) {
+ context.push(context.di);
+ context.cx = 30;
+ context.ax = 0x0ffff;
+ while(--context.cx) context._stosw();
+ context.di = context.pop();
+ context.cl = 4;
+ context.ds = context.data.word(398);
+ context.bx = 0+2080+30000;
+ context.ch = 0;
+findryanloop:
+ context._cmp(context.data.byte(context.bx+2), context.cl);
+ if (!context.flags.z()) goto notinryaninv;
+ context._cmp(context.data.byte(context.bx+3), 255);
+ if (!context.flags.z()) goto notinryaninv;
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 0;
+ context.push(context.di);
+ context._add(context.di, context.ax);
+ context._add(context.di, context.ax);
+ context.al = context.ch;
+ context.ah = 4;
+ context._stosw();
+ context.di = context.pop();
+notinryaninv:
+ context._add(context.bx, 16);
+ context._add(context.ch, 1);
+ context._cmp(context.ch, 114);
+ if (!context.flags.z()) goto findryanloop;
+ return;
+}
+
+static inline void findallopen(Context & context) {
+ context.push(context.di);
+ context.cx = 16;
+ context.ax = 0x0ffff;
+ while(--context.cx) context._stosw();
+ context.di = context.pop();
+ context.cl = context.data.byte(110);
+ context.dl = context.data.byte(111);
+ context.ds = context.data.word(398);
+ context.bx = 0+2080+30000;
+ context.ch = 0;
+findopen1:
+ context._cmp(context.data.byte(context.bx+3), context.cl);
+ if (!context.flags.z()) goto findopen2;
+ context._cmp(context.data.byte(context.bx+2), context.dl);
+ if (!context.flags.z()) goto findopen2;
+ context._cmp(context.data.byte(111), 4);
+ if (context.flags.z()) goto noloccheck;
+ context.al = context.data.byte(context.bx+5);
+ context._cmp(context.al, context.data.byte(184));
+ if (!context.flags.z()) goto findopen2;
+noloccheck:
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 0;
+ context.push(context.di);
+ context._add(context.di, context.ax);
+ context._add(context.di, context.ax);
+ context.al = context.ch;
+ context.ah = 4;
+ context._stosw();
+ context.di = context.pop();
+findopen2:
+ context._add(context.bx, 16);
+ context._add(context.ch, 1);
+ context._cmp(context.ch, 114);
+ if (!context.flags.z()) goto findopen1;
+ context.cl = context.data.byte(110);
+ context.dl = context.data.byte(111);
+ context.push(context.dx);
+ context.ds = context.data.word(426);
+ context.dx = context.pop();
+ context.bx = 0;
+ context.ch = 0;
+findopen1a:
+ context._cmp(context.data.byte(context.bx+3), context.cl);
+ if (!context.flags.z()) goto findopen2a;
+ context._cmp(context.data.byte(context.bx+2), context.dl);
+ if (!context.flags.z()) goto findopen2a;
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 0;
+ context.push(context.di);
+ context._add(context.di, context.ax);
+ context._add(context.di, context.ax);
+ context.al = context.ch;
+ context.ah = 2;
+ context._stosw();
+ context.di = context.pop();
+findopen2a:
+ context._add(context.bx, 16);
+ context._add(context.ch, 1);
+ context._cmp(context.ch, 80);
+ if (!context.flags.z()) goto findopen1a;
+ return;
+}
+
+static inline void obtoinv(Context & context) {
+ context.push(context.bx);
+ context.push(context.es);
+ context.push(context.si);
+ context.push(context.ax);
+ context.push(context.ax);
+ context.push(context.di);
+ context.push(context.bx);
+ context.ds = context.data.word(408);
+ context._sub(context.di, 2);
+ context._sub(context.bx, 1);
+ context.al = 10;
+ context.ah = 0;
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.ax = context.pop();
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto finishfill;
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.ax);
+ context.ds = context.data.word(398);
+ context._cmp(context.ah, 4);
+ if (context.flags.z()) goto isanextra;
+ context.ds = context.data.word(446);
+isanextra:
+ context.cl = context.al;
+ context._add(context.al, context.al);
+ context._add(context.al, context.cl);
+ context._add(context.al, 1);
+ context.ah = 128;
+ context._add(context.bx, 19);
+ context._add(context.di, 18);
+ showframe(context);
+ context.ax = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.push(context.bx);
+ getanyaddir(context);
+ isitworn(context);
+ context.bx = context.pop();
+ if (!context.flags.z()) goto finishfill;
+ context.ds = context.data.word(408);
+ context._sub(context.di, 3);
+ context._sub(context.bx, 2);
+ context.al = 7;
+ context.ah = 0;
+ showframe(context);
+finishfill:
+ context.ax = context.pop();
+ context.si = context.pop();
+ context.es = context.pop();
+ context.bx = context.pop();
+ return;
+}
+
+static inline void isitworn(Context & context) {
+ context.al = context.data.byte(context.bx+12);
+ context._cmp(context.al, 'W'-'A');
+ if (!context.flags.z()) goto notworn;
+ context.al = context.data.byte(context.bx+13);
+ context._cmp(context.al, 'E'-'A');
+notworn:
+ return;
+}
+
+static inline void makeworn(Context & context) {
+ context.data.byte(context.bx+12) = 'W'-'A';
+ context.data.byte(context.bx+13) = 'E'-'A';
+ return;
+}
+
+static inline void getbackfromob(Context & context) {
+ context._cmp(context.data.byte(106), 1);
+ if (!context.flags.z()) goto notheldob;
+ blank(context);
+ return;
+notheldob:
+ getback1(context);
+ return;
+}
+
+static inline void incryanpage(Context & context) {
+ context._cmp(context.data.byte(100), 222);
+ if (context.flags.z()) goto alreadyincryan;
+ context.data.byte(100) = 222;
+ context.al = 31;
+ commandonly(context);
+alreadyincryan:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto noincryan;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doincryan;
+noincryan:
+ return;
+doincryan:
+ context.ax = context.data.word(198);
+ context._sub(context.ax, 80+167);
+ context.data.byte(19) = -1;
+findnewpage:
+ context._add(context.data.byte(19), 1);
+ context._sub(context.ax, 18);
+ if (!context.flags.c()) goto findnewpage;
+ delpointer(context);
+ fillryan(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void openinv(Context & context) {
+ context.data.byte(104) = 1;
+ context.al = 61;
+ context.di = 80;
+ context.bx = 58-10;
+ context.dl = 240;
+ printmessage(context);
+ fillryan(context);
+ context.data.byte(100) = 255;
+ return;
+}
+
+static inline void showryanpage(Context & context) {
+ context.ds = context.data.word(408);
+ context.di = 80+167;
+ context.bx = 58-12;
+ context.al = 12;
+ context.ah = 0;
+ showframe(context);
+ context.al = 13;
+ context._add(context.al, context.data.byte(19));
+ context.push(context.ax);
+ context.al = context.data.byte(19);
+ context.ah = 0;
+ context.cx = 18;
+ context._mul(context.cx);
+ context.ds = context.data.word(408);
+ context.di = 80+167;
+ context._add(context.di, context.ax);
+ context.bx = 58-12;
+ context.ax = context.pop();
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void openob(Context & context) {
+ context.al = context.data.byte(110);
+ context.ah = context.data.byte(111);
+ context.di = 5674;
+ copyname(context);
+ context.di = 80;
+ context.bx = 58+86;
+ context.al = 62;
+ context.dl = 240;
+ printmessage(context);
+ context.di = context.data.word(84);
+ context._add(context.di, 5);
+ context.bx = 58+86;
+ context.es = context.cs;
+ context.si = 5674;
+ context.dl = 220;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ fillopen(context);
+ getopenedsize(context);
+ context.al = context.ah;
+ context.ah = 0;
+ context.cx = 44;
+ context._mul(context.cx);
+ context._add(context.ax, 80);
+ context.bx = 2588;
+ context.data.word(context.bx) = context.ax;
+ return;
+}
+
+static inline void examicon(Context & context) {
+ context.ds = context.data.word(410);
+ context.di = 254;
+ context.bx = 5;
+ context.al = 3;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void inventory(Context & context) {
+ context._cmp(context.data.byte(56), 1);
+ if (context.flags.z()) goto iswatchinv;
+ context._cmp(context.data.word(21), 0);
+ if (context.flags.z()) goto notwatchinv;
+iswatchinv:
+ blank(context);
+ return;
+notwatchinv:
+ context._cmp(context.data.byte(100), 239);
+ if (context.flags.z()) goto alreadyopinv;
+ context.data.byte(100) = 239;
+ context.al = 32;
+ commandonly(context);
+alreadyopinv:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto cantopinv;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doopeninv;
+cantopinv:
+ return;
+doopeninv:
+ context.data.word(328) = 0;
+ context.data.byte(234) = 0;
+ context.data.byte(237) = 0;
+ animpointer(context);
+ createpanel(context);
+ showpanel(context);
+ examicon(context);
+ showman(context);
+ showexit(context);
+ undertextline(context);
+ context.data.byte(106) = 0;
+ context.data.byte(104) = 2;
+ openinv(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ context.data.byte(110) = 255;
+ goto waitexam;
+/*continuing to unbounded code: examineagain from examineob:3-62*/
+examineagain:
+ context.data.byte(237) = 0;
+ context.data.byte(108) = 0;
+ context.data.byte(110) = 255;
+ context.data.byte(111) = 255;
+ context.data.byte(104) = 0;
+ context.al = context.data.byte(100);
+ context.data.byte(102) = context.al;
+ context.data.byte(89) = 0;
+ context.data.byte(231) = 0;
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ obicons(context);
+ obpicture(context);
+ describeob(context);
+ undertextline(context);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+waitexam:
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ delpointer(context);
+ context.data.byte(103) = 0;
+ context.bx = 2494;
+ context._cmp(context.data.byte(104), 0);
+ if (context.flags.z()) goto notuseinv;
+ context.bx = 2556;
+ context._cmp(context.data.byte(104), 1);
+ if (context.flags.z()) goto notuseinv;
+ context.bx = 2618;
+notuseinv:
+ checkcoords(context);
+ context._cmp(context.data.byte(108), 0);
+ if (context.flags.z()) goto norex;
+ goto examineagain;
+norex:
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto waitexam;
+ context.data.byte(106) = 0;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto iswatching;
+ context._cmp(context.data.byte(188), 255);
+ if (!context.flags.z()) goto justgetback;
+iswatching:
+ makemainscreen(context);
+ context.data.byte(104) = 0;
+ context.data.byte(110) = 255;
+ return;
+justgetback:
+ context.data.byte(104) = 0;
+ context.data.byte(110) = 255;
+ return;
+ return;
+}
+
+static inline void setpickup(Context & context) {
+ context._cmp(context.data.byte(102), 1);
+ if (context.flags.z()) goto cantpick;
+ context._cmp(context.data.byte(102), 3);
+ if (context.flags.z()) goto cantpick;
+ getanyad(context);
+ context.al = context.data.byte(context.bx+2);
+ context._cmp(context.al, 4);
+ if (!context.flags.z()) goto canpick;
+cantpick:
+ blank(context);
+ return;
+canpick:
+ context._cmp(context.data.byte(100), 209);
+ if (context.flags.z()) goto alreadysp;
+ context.data.byte(100) = 209;
+ context.bl = context.data.byte(99);
+ context.bh = context.data.byte(102);
+ context.al = 33;
+ commandwithob(context);
+alreadysp:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, 1);
+ if (!context.flags.z()) goto nosetpick;
+ context._cmp(context.ax, context.data.word(212));
+ if (!context.flags.z()) goto dosetpick;
+nosetpick:
+ return;
+dosetpick:
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ examicon(context);
+ context.data.byte(106) = 1;
+ context.data.byte(104) = 2;
+ context._cmp(context.data.byte(102), 4);
+ if (context.flags.z()) goto pickupexob;
+ context.al = context.data.byte(99);
+ context.data.byte(89) = context.al;
+ context.data.byte(110) = 255;
+ transfertoex(context);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = 4;
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+ openinv(context);
+ worktoscreenm(context);
+ return;
+pickupexob:
+ context.al = context.data.byte(99);
+ context.data.byte(89) = context.al;
+ context.data.byte(110) = 255;
+ openinv(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void examinventory(Context & context) {
+ context._cmp(context.data.byte(100), 249);
+ if (context.flags.z()) goto alreadyexinv;
+ context.data.byte(100) = 249;
+ context.al = 32;
+ commandonly(context);
+alreadyexinv:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doexinv;
+ return;
+doexinv:
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ examicon(context);
+ context.data.byte(106) = 0;
+ context.data.byte(104) = 2;
+ openinv(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void reexfrominv(Context & context) {
+ findinvpos(context);
+ context.ax = context.data.word(context.bx);
+ context.data.byte(100) = context.ah;
+ context.data.byte(99) = context.al;
+ context.data.byte(108) = 1;
+ context.data.byte(234) = 0;
+ return;
+}
+
+static inline void reexfromopen(Context & context) {
+ return;
+ findopenpos(context);
+ context.ax = context.data.word(context.bx);
+ context.data.byte(100) = context.ah;
+ context.data.byte(99) = context.al;
+ context.data.byte(108) = 1;
+ context.data.byte(234) = 0;
+ return;
+}
+
+static inline void swapwithinv(Context & context) {
+ context.al = context.data.byte(89);
+ context.ah = context.data.byte(102);
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto difsub7;
+ context._cmp(context.data.byte(100), 243);
+ if (context.flags.z()) goto alreadyswap1;
+ context.data.byte(100) = 243;
+difsub7:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 34;
+ commandwithob(context);
+alreadyswap1:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto cantswap1;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doswap1;
+cantswap1:
+ return;
+doswap1:
+ context.ah = context.data.byte(102);
+ context.al = context.data.byte(89);
+ context.push(context.ax);
+ findinvpos(context);
+ context.ax = context.data.word(context.bx);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = context.ah;
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+ context.bl = context.data.byte(89);
+ context.bh = context.data.byte(102);
+ context.ax = context.pop();
+ context.data.byte(102) = context.ah;
+ context.data.byte(89) = context.al;
+ context.push(context.bx);
+ findinvpos(context);
+ delpointer(context);
+ context.al = context.data.byte(89);
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 4;
+ context.data.byte(context.bx+3) = 255;
+ context.al = context.data.byte(107);
+ context.data.byte(context.bx+4) = context.al;
+ context.ax = context.pop();
+ context.data.byte(102) = context.ah;
+ context.data.byte(89) = context.al;
+ fillryan(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void swapwithopen(Context & context) {
+ context.al = context.data.byte(89);
+ context.ah = context.data.byte(102);
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto difsub8;
+ context._cmp(context.data.byte(100), 242);
+ if (context.flags.z()) goto alreadyswap2;
+ context.data.byte(100) = 242;
+difsub8:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 34;
+ commandwithob(context);
+alreadyswap2:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto cantswap2;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doswap2;
+cantswap2:
+ return;
+doswap2:
+ geteitherad(context);
+ isitworn(context);
+ if (!context.flags.z()) goto notwornswap;
+ wornerror(context);
+ return;
+notwornswap:
+ delpointer(context);
+ context.al = context.data.byte(89);
+ context._cmp(context.al, context.data.byte(110));
+ if (!context.flags.z()) goto isntsame2;
+ context.al = context.data.byte(102);
+ context._cmp(context.al, context.data.byte(111));
+ if (!context.flags.z()) goto isntsame2;
+ errormessage1(context);
+ return;
+isntsame2:
+ checkobjectsize(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto sizeok2;
+ return;
+sizeok2:
+ context.ah = context.data.byte(102);
+ context.al = context.data.byte(89);
+ context.push(context.ax);
+ findopenpos(context);
+ context.ax = context.data.word(context.bx);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = context.ah;
+ context._cmp(context.ah, 4);
+ if (!context.flags.z()) goto makeswapex;
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+ goto actuallyswap;
+makeswapex:
+ transfertoex(context);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = 4;
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+actuallyswap:
+ context.bl = context.data.byte(89);
+ context.bh = context.data.byte(102);
+ context.ax = context.pop();
+ context.data.byte(102) = context.ah;
+ context.data.byte(89) = context.al;
+ context.push(context.bx);
+ findopenpos(context);
+ geteitherad(context);
+ context.al = context.data.byte(111);
+ context.data.byte(context.bx+2) = context.al;
+ context.al = context.data.byte(110);
+ context.data.byte(context.bx+3) = context.al;
+ context.al = context.data.byte(107);
+ context.data.byte(context.bx+4) = context.al;
+ context.al = context.data.byte(184);
+ context.data.byte(context.bx+5) = context.al;
+ context.ax = context.pop();
+ context.data.byte(102) = context.ah;
+ context.data.byte(89) = context.al;
+ fillopen(context);
+ fillryan(context);
+ undertextline(context);
+ readmouse(context);
+ useopened(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void intoinv(Context & context) {
+ context._cmp(context.data.byte(106), 0);
+ if (!context.flags.z()) goto notout;
+ outofinv(context);
+ return;
+notout:
+ findinvpos(context);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto canplace1;
+ swapwithinv(context);
+ return;
+canplace1:
+ context.al = context.data.byte(89);
+ context.ah = context.data.byte(102);
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto difsub1;
+ context._cmp(context.data.byte(100), 220);
+ if (context.flags.z()) goto alreadyplce;
+ context.data.byte(100) = 220;
+difsub1:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 35;
+ commandwithob(context);
+alreadyplce:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notletgo2;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doplace;
+notletgo2:
+ return;
+doplace:
+ delpointer(context);
+ context.al = context.data.byte(89);
+ getexad(context);
+ context.data.byte(context.bx+2) = 4;
+ context.data.byte(context.bx+3) = 255;
+ context.al = context.data.byte(107);
+ context.data.byte(context.bx+4) = context.al;
+ context.data.byte(106) = 0;
+ fillryan(context);
+ readmouse(context);
+ showpointer(context);
+ outofinv(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void outofinv(Context & context) {
+ findinvpos(context);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto canpick2;
+ blank(context);
+ return;
+canpick2:
+ context.bx = context.data.word(202);
+ context._cmp(context.bx, 2);
+ if (!context.flags.z()) goto canpick2a;
+ reexfrominv(context);
+ return;
+canpick2a:
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto difsub3;
+ context._cmp(context.data.byte(100), 221);
+ if (context.flags.z()) goto alreadygrab;
+ context.data.byte(100) = 221;
+difsub3:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 36;
+ commandwithob(context);
+alreadygrab:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notletgo;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dograb;
+notletgo:
+ return;
+dograb:
+ delpointer(context);
+ context.data.byte(106) = 1;
+ findinvpos(context);
+ context.ax = context.data.word(context.bx);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = context.ah;
+ getexad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+ fillryan(context);
+ readmouse(context);
+ showpointer(context);
+ intoinv(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void geteitherad(Context & context) {
+ context._cmp(context.data.byte(102), 4);
+ if (context.flags.z()) goto isinexlist;
+ context.al = context.data.byte(89);
+ getfreead(context);
+ return;
+isinexlist:
+ context.al = context.data.byte(89);
+ getexad(context);
+ return;
+}
+
+static inline void getopenedsize(Context & context) {
+ context._cmp(context.data.byte(111), 4);
+ if (context.flags.z()) goto isex2;
+ context._cmp(context.data.byte(111), 2);
+ if (context.flags.z()) goto isfree2;
+ context.al = context.data.byte(110);
+ getsetad(context);
+ context.ax = context.data.word(context.bx+3);
+ return;
+isfree2:
+ context.al = context.data.byte(110);
+ getfreead(context);
+ context.ax = context.data.word(context.bx+7);
+ return;
+isex2:
+ context.al = context.data.byte(110);
+ getexad(context);
+ context.ax = context.data.word(context.bx+7);
+ return;
+}
+
+static inline void findinvpos(Context & context) {
+ context.cx = context.data.word(198);
+ context._sub(context.cx, 80);
+ context.bx = -1;
+findinv1:
+ context._add(context.bx, 1);
+ context._sub(context.cx, 44);
+ if (!context.flags.c()) goto findinv1;
+ context.cx = context.data.word(200);
+ context._sub(context.cx, 58);
+ context._sub(context.bx, 5);
+findinv2:
+ context._add(context.bx, 5);
+ context._sub(context.cx, 44);
+ if (!context.flags.c()) goto findinv2;
+ context.al = context.data.byte(19);
+ context.ah = 0;
+ context.cx = 10;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.al = context.bl;
+ context.data.byte(107) = context.al;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(412);
+ context._add(context.bx, 0+(228*13)+32);
+ return;
+}
+
+static inline void findopenpos(Context & context) {
+ context.cx = context.data.word(198);
+ context._sub(context.cx, 80);
+ context.bx = -1;
+findopenp1:
+ context._add(context.bx, 1);
+ context._sub(context.cx, 44);
+ if (!context.flags.c()) goto findopenp1;
+ context.al = context.bl;
+ context.data.byte(107) = context.al;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(412);
+ context._add(context.bx, 0+(228*13));
+ return;
+}
+
+static inline void dropobject(Context & context) {
+ context._cmp(context.data.byte(100), 223);
+ if (context.flags.z()) goto alreadydrop;
+ context.data.byte(100) = 223;
+ context._cmp(context.data.byte(106), 0);
+ if (context.flags.z()) { blank(context); return; };
+ context.bl = context.data.byte(89);
+ context.bh = context.data.byte(102);
+ context.al = 37;
+ commandwithob(context);
+alreadydrop:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nodrop;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dodrop;
+nodrop:
+ return;
+dodrop:
+ geteitherad(context);
+ isitworn(context);
+ if (!context.flags.z()) goto nowornerror;
+ wornerror(context);
+ return;
+nowornerror:
+ context._cmp(context.data.byte(184), 47);
+ if (context.flags.z()) goto nodrop2;
+ context.cl = context.data.byte(151);
+ context._add(context.cl, 12);
+ context.ch = context.data.byte(152);
+ context._add(context.ch, 12);
+ checkone(context);
+ context._cmp(context.cl, 2);
+ if (context.flags.c()) goto nodroperror;
+nodrop2:
+ droperror(context);
+ return;
+nodroperror:
+ context._cmp(context.data.byte(128), 64);
+ if (!context.flags.z()) goto notinlift;
+ context._cmp(context.data.byte(129), 64);
+ if (!context.flags.z()) goto notinlift;
+ droperror(context);
+ return;
+notinlift:
+ context.al = context.data.byte(89);
+ context.ah = 4;
+ context.cl = 'G';
+ context.ch = 'U';
+ context.dl = 'N';
+ context.dh = 'A';
+ compare(context);
+ if (context.flags.z()) { cantdrop(context); return; };
+ context.al = context.data.byte(89);
+ context.ah = 4;
+ context.cl = 'S';
+ context.ch = 'H';
+ context.dl = 'L';
+ context.dh = 'D';
+ compare(context);
+ if (context.flags.z()) { cantdrop(context); return; };
+ context.data.byte(102) = 4;
+ context.al = context.data.byte(89);
+ getexad(context);
+ context.data.byte(context.bx+2) = 0;
+ context.al = context.data.byte(151);
+ context._add(context.al, 4);
+ context.cl = 4;
+ context._shr(context.al, context.cl);
+ context._add(context.al, context.data.byte(148));
+ context.ah = context.data.byte(152);
+ context._add(context.ah, 8);
+ context.cl = 4;
+ context._shr(context.ah, context.cl);
+ context._add(context.ah, context.data.byte(149));
+ context.data.byte(context.bx+3) = context.al;
+ context.data.byte(context.bx+5) = context.ah;
+ context.al = context.data.byte(151);
+ context._add(context.al, 4);
+ context._and(context.al, 15);
+ context.ah = context.data.byte(152);
+ context._add(context.ah, 8);
+ context._and(context.ah, 15);
+ context.data.byte(context.bx+4) = context.al;
+ context.data.byte(context.bx+6) = context.ah;
+ context.data.byte(106) = 0;
+ context.al = context.data.byte(184);
+ context.data.byte(context.bx) = context.al;
+ return;
+}
+
+static inline void droperror(Context & context) {
+ context.data.byte(100) = 255;
+ delpointer(context);
+ context.di = 76;
+ context.bx = 21;
+ context.al = 56;
+ context.dl = 240;
+ printmessage(context);
+ worktoscreenm(context);
+ context.cx = 50;
+ hangonp(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ context.data.byte(100) = 255;
+ worktoscreenm(context);
+ return;
+}
+
+static inline void cantdrop(Context & context) {
+ context.data.byte(100) = 255;
+ delpointer(context);
+ context.di = 76;
+ context.bx = 21;
+ context.al = 24;
+ context.dl = 240;
+ printmessage(context);
+ worktoscreenm(context);
+ context.cx = 50;
+ hangonp(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ context.data.byte(100) = 255;
+ worktoscreenm(context);
+ return;
+}
+
+static inline void wornerror(Context & context) {
+ context.data.byte(100) = 255;
+ delpointer(context);
+ context.di = 76;
+ context.bx = 21;
+ context.al = 57;
+ context.dl = 240;
+ printmessage(context);
+ worktoscreenm(context);
+ context.cx = 50;
+ hangonp(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ context.data.byte(100) = 255;
+ worktoscreenm(context);
+ return;
+}
+
+static inline void removeobfrominv(Context & context) {
+ context._cmp(context.data.byte(99), 100);
+ if (context.flags.z()) goto obnotexist;
+ getanyad(context);
+ context.di = context.bx;
+ context.cl = context.data.byte(99);
+ context.ch = 0;
+ deleteexobject(context);
+obnotexist:
+ return;
+}
+
+static inline void selectopenob(Context & context) {
+ context.al = context.data.byte(99);
+ getanyad(context);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto canopenit1;
+ blank(context);
+ return;
+canopenit1:
+ context._cmp(context.data.byte(100), 224);
+ if (context.flags.z()) goto alreadyopob;
+ context.data.byte(100) = 224;
+ context.bl = context.data.byte(99);
+ context.bh = context.data.byte(102);
+ context.al = 38;
+ commandwithob(context);
+alreadyopob:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto noopenob;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doopenob;
+noopenob:
+ return;
+doopenob:
+ context.al = context.data.byte(99);
+ context.data.byte(110) = context.al;
+ context.al = context.data.byte(102);
+ context.data.byte(111) = context.al;
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ showexit(context);
+ openinv(context);
+ openob(context);
+ undertextline(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void useopened(Context & context) {
+ context._cmp(context.data.byte(110), 255);
+ if (context.flags.z()) goto cannotuseopen;
+ context._cmp(context.data.byte(106), 0);
+ if (!context.flags.z()) goto notout2;
+ outofopen(context);
+ return;
+notout2:
+ findopenpos(context);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto canplace3;
+ swapwithopen(context);
+cannotuseopen:
+ return;
+canplace3:
+ context._cmp(context.data.byte(106), 1);
+ if (context.flags.z()) goto intoopen;
+ blank(context);
+ return;
+intoopen:
+ context.al = context.data.byte(89);
+ context.ah = context.data.byte(102);
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto difsub2;
+ context._cmp(context.data.byte(100), 227);
+ if (context.flags.z()) goto alreadyplc2;
+ context.data.byte(100) = 227;
+difsub2:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 35;
+ commandwithob(context);
+alreadyplc2:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notletgo3;
+ context._cmp(context.ax, 1);
+ if (context.flags.z()) goto doplace2;
+notletgo3:
+ return;
+doplace2:
+ geteitherad(context);
+ isitworn(context);
+ if (!context.flags.z()) goto notworntoopen;
+ wornerror(context);
+ return;
+notworntoopen:
+ delpointer(context);
+ context.al = context.data.byte(89);
+ context._cmp(context.al, context.data.byte(110));
+ if (!context.flags.z()) goto isntsame;
+ context.al = context.data.byte(102);
+ context._cmp(context.al, context.data.byte(111));
+ if (!context.flags.z()) goto isntsame;
+ errormessage1(context);
+ return;
+isntsame:
+ checkobjectsize(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto sizeok1;
+ return;
+sizeok1:
+ context.data.byte(106) = 0;
+ context.al = context.data.byte(89);
+ geteitherad(context);
+ context.al = context.data.byte(111);
+ context.data.byte(context.bx+2) = context.al;
+ context.al = context.data.byte(110);
+ context.data.byte(context.bx+3) = context.al;
+ context.al = context.data.byte(107);
+ context.data.byte(context.bx+4) = context.al;
+ context.al = context.data.byte(184);
+ context.data.byte(context.bx+5) = context.al;
+ fillopen(context);
+ undertextline(context);
+ readmouse(context);
+ useopened(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void errormessage1(Context & context) {
+ delpointer(context);
+ context.di = 76;
+ context.bx = 21;
+ context.al = 58;
+ context.dl = 240;
+ printmessage(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ context.cx = 50;
+ hangonp(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ readmouse(context);
+ useopened(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void errormessage2(Context & context) {
+ context.data.byte(100) = 255;
+ delpointer(context);
+ context.di = 76;
+ context.bx = 21;
+ context.al = 59;
+ context.dl = 240;
+ printmessage(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ context.cx = 50;
+ hangonp(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ readmouse(context);
+ useopened(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void errormessage3(Context & context) {
+ delpointer(context);
+ context.di = 76;
+ context.bx = 21;
+ context.al = 60;
+ context.dl = 240;
+ printmessage(context);
+ worktoscreenm(context);
+ context.cx = 50;
+ hangonp(context);
+ showpanel(context);
+ showman(context);
+ examicon(context);
+ readmouse(context);
+ useopened(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void checkobjectsize(Context & context) {
+ getopenedsize(context);
+ context.push(context.ax);
+ context.al = context.data.byte(89);
+ geteitherad(context);
+ context.al = context.data.byte(context.bx+9);
+ context.cx = context.pop();
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto notunsized;
+ context.al = 6;
+notunsized:
+ context._cmp(context.al, 100);
+ if (!context.flags.c()) goto specialcase;
+ context._cmp(context.cl, 100);
+ if (context.flags.c()) goto isntspecial;
+ errormessage3(context);
+ goto sizewrong;
+isntspecial:
+ context._cmp(context.cl, context.al);
+ if (!context.flags.c()) goto sizeok;
+specialcase:
+ context._sub(context.al, 100);
+ context._cmp(context.cl, 100);
+ if (!context.flags.c()) goto bothspecial;
+ context._cmp(context.cl, context.al);
+ if (!context.flags.c()) goto sizeok;
+ errormessage2(context);
+ goto sizewrong;
+bothspecial:
+ context._sub(context.cl, 100);
+ context._cmp(context.al, context.cl);
+ if (context.flags.z()) goto sizeok;
+ errormessage3(context);
+sizewrong:
+ context.al = 1;
+ return;
+sizeok:
+ context.al = 0;
+ return;
+}
+
+static inline void outofopen(Context & context) {
+ context._cmp(context.data.byte(110), 255);
+ if (context.flags.z()) goto cantuseopen;
+ findopenpos(context);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto canpick4;
+cantuseopen:
+ blank(context);
+ return;
+canpick4:
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto difsub4;
+ context._cmp(context.data.byte(100), 228);
+ if (context.flags.z()) goto alreadygrb;
+ context.data.byte(100) = 228;
+difsub4:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 36;
+ commandwithob(context);
+alreadygrb:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notletgo4;
+ context._cmp(context.ax, 1);
+ if (context.flags.z()) goto dogrb;
+ context._cmp(context.ax, 2);
+ if (!context.flags.z()) goto notletgo4;
+ reexfromopen(context);
+notletgo4:
+ return;
+dogrb:
+ delpointer(context);
+ context.data.byte(106) = 1;
+ findopenpos(context);
+ context.ax = context.data.word(context.bx);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = context.ah;
+ context._cmp(context.ah, 4);
+ if (!context.flags.z()) goto makeintoex;
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+ goto actuallyout;
+makeintoex:
+ transfertoex(context);
+ context.data.byte(89) = context.al;
+ context.data.byte(102) = 4;
+ geteitherad(context);
+ context.data.byte(context.bx+2) = 20;
+ context.data.byte(context.bx+3) = 255;
+actuallyout:
+ fillopen(context);
+ undertextline(context);
+ readmouse(context);
+ useopened(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void blockget(Context & context) {
+ context.ah = context.al;
+ context.al = 0;
+ context.ds = context.data.word(416);
+ context.si = 0+192;
+ context._add(context.si, context.ax);
+ return;
+}
+
+static inline void adjustlen(Context & context) {
+ context.ah = context.al;
+ context._add(context.al, context.ch);
+ context._cmp(context.al, 100);
+ if (context.flags.c()) goto over242;
+ context.al = 224;
+ context._sub(context.al, context.ch);
+ context.ch = context.al;
+over242:
+ return;
+}
+
+static inline void look(Context & context) {
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(234), 2);
+ if (context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 241);
+ if (context.flags.z()) goto alreadylook;
+ context.data.byte(100) = 241;
+ context.al = 25;
+ commandonly(context);
+alreadylook:
+ context._cmp(context.data.word(202), 1);
+ if (!context.flags.z()) goto nolook;
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nolook;
+ dolook(context);
+nolook:
+ return;
+}
+
+static inline void getback1(Context & context) {
+ context._cmp(context.data.byte(106), 0);
+ if (context.flags.z()) goto notgotobject;
+ blank(context);
+ return;
+notgotobject:
+ context._cmp(context.data.byte(100), 202);
+ if (context.flags.z()) goto alreadyget;
+ context.data.byte(100) = 202;
+ context.al = 26;
+ commandonly(context);
+alreadyget:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nogetback;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dogetback;
+nogetback:
+ return;
+dogetback:
+ context.data.byte(103) = 1;
+ context.data.byte(106) = 0;
+ return;
+}
+
+static inline void talk(Context & context) {
+ context.data.byte(246) = 0;
+ context.data.byte(237) = 0;
+ context.al = context.data.byte(99);
+ context.data.byte(247) = context.al;
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ undertextline(context);
+ convicons(context);
+ starttalk(context);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+waittalk:
+ delpointer(context);
+ readmouse(context);
+ animpointer(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.data.byte(103) = 0;
+ context.bx = 2660;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto waittalk;
+finishtalk:
+ context.bx = context.data.word(249);
+ context.es = context.cs;
+ context._cmp(context.data.byte(246), 4);
+ if (context.flags.c()) goto notnexttalk;
+ context.al = context.data.byte(context.bx+7);
+ context._or(context.al, 128);
+ context.data.byte(context.bx+7) = context.al;
+notnexttalk:
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ context._cmp(context.data.byte(383), 1);
+ if (!context.flags.z()) goto nospeech;
+ cancelch1(context);
+ context.data.byte(388) = -1;
+ context.data.byte(387) = 0;
+nospeech:
+ return;
+}
+
+static inline void convicons(Context & context) {
+ context.al = context.data.byte(247);
+ context._and(context.al, 127);
+ getpersframe(context);
+ context.di = 234;
+ context.bx = 2;
+ context.data.word(160) = context.ax;
+ findsource(context);
+ context.ax = context.data.word(160);
+ context._sub(context.ax, context.data.word(244));
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void getpersframe(Context & context) {
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.es = context.data.word(448);
+ context._add(context.bx, 0);
+ context.ax = context.data.word(context.bx);
+ return;
+}
+
+static inline void starttalk(Context & context) {
+ context.data.byte(245) = 0;
+ context.al = context.data.byte(247);
+ context._and(context.al, 127);
+ getpersontext(context);
+ context.data.word(71) = 91+91;
+ context.di = 66;
+ context.bx = 64;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 79;
+ printdirect(context);
+ context.data.word(71) = 0;
+ context.di = 66;
+ context.bx = 80;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+nospeech1:
+ return;
+}
+
+static inline void getpersontext(Context & context) {
+ context.ah = 0;
+ context.cx = 64*2;
+ context._mul(context.cx);
+ context.si = context.ax;
+ context.es = context.data.word(448);
+ context._add(context.si, 0+24);
+ context.cx = 0+24+(1026*2);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, context.cx);
+ context.si = context.ax;
+ return;
+}
+
+static inline void moretalk(Context & context) {
+ context._cmp(context.data.byte(245), 0);
+ if (context.flags.z()) goto canmore;
+ redes(context);
+ return;
+canmore:
+ context._cmp(context.data.byte(100), 215);
+ if (context.flags.z()) goto alreadymore;
+ context.data.byte(100) = 215;
+ context.al = 49;
+ commandonly(context);
+alreadymore:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nomore;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto domoretalk;
+nomore:
+ return;
+domoretalk:
+ context.data.byte(245) = 2;
+ context.data.byte(246) = 4;
+ context._cmp(context.data.byte(247), 100);
+ if (context.flags.c()) goto notsecondpart;
+ context.data.byte(246) = 48;
+notsecondpart:
+ dosometalk(context);
+ return;
+}
+
+static inline void dosometalk(Context & context) {
+watchtalk:
+ context.al = context.data.byte(246);
+ context.al = context.data.byte(247);
+ context._and(context.al, 127);
+ context.ah = 0;
+ context.cx = 64;
+ context._mul(context.cx);
+ context.cx = context.ax;
+ context.al = context.data.byte(246);
+ context.ah = 0;
+ context._add(context.ax, context.cx);
+ context._add(context.ax, context.ax);
+ context.si = context.ax;
+ context.es = context.data.word(448);
+ context._add(context.si, 0+24);
+ context.cx = 0+24+(1026*2);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, context.cx);
+ context.si = context.ax;
+ context._cmp(context.data.byte(context.si), 0);
+ if (context.flags.z()) goto endwatchtalk;
+ context.push(context.es);
+ context.push(context.si);
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ convicons(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.di = 164;
+ context.bx = 64;
+ context.dl = 144;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.data.byte(234) = 3;
+ worktoscreenm(context);
+ context.cx = 180;
+ hangonpq(context);
+ context._add(context.data.byte(246), 1);
+ context.al = context.data.byte(246);
+ context.al = context.data.byte(247);
+ context._and(context.al, 127);
+ context.ah = 0;
+ context.cx = 64;
+ context._mul(context.cx);
+ context.cx = context.ax;
+ context.al = context.data.byte(246);
+ context.ah = 0;
+ context._add(context.ax, context.cx);
+ context._add(context.ax, context.ax);
+ context.si = context.ax;
+ context.es = context.data.word(448);
+ context._add(context.si, 0+24);
+ context.cx = 0+24+(1026*2);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, context.cx);
+ context.si = context.ax;
+ context._cmp(context.data.byte(context.si), 0);
+ if (context.flags.z()) goto endwatchtalk;
+ context._cmp(context.data.byte(context.si), ':');
+ if (context.flags.z()) goto skiptalk;
+ context._cmp(context.data.byte(context.si), 32);
+ if (context.flags.z()) goto skiptalk;
+ context.push(context.es);
+ context.push(context.si);
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ convicons(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.di = 48;
+ context.bx = 128;
+ context.dl = 144;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.data.byte(234) = 3;
+ worktoscreenm(context);
+ context.cx = 180;
+ hangonpq(context);
+skiptalk:
+ context._add(context.data.byte(246), 1);
+ goto watchtalk;
+endwatchtalk:
+ context.data.byte(234) = 0;
+ return;
+}
+
+static inline void hangonpq(Context & context) {
+ context.data.byte(103) = 0;
+ context.bx = 0;
+hangloopq:
+ context.push(context.cx);
+ context.push(context.bx);
+ delpointer(context);
+ readmouse(context);
+ animpointer(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.bx = 2692;
+ checkcoords(context);
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._cmp(context.data.byte(103), 1);
+ if (context.flags.z()) goto quitconv;
+ context._cmp(context.data.byte(383), 1);
+ if (!context.flags.z()) goto notspeaking;
+ context._cmp(context.data.byte(515), 255);
+ if (!context.flags.z()) goto notspeaking;
+ context._add(context.bx, 1);
+ context._cmp(context.bx, 40);
+ if (context.flags.z()) goto finishconv;
+notspeaking:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto hangloopq;
+ context._cmp(context.data.word(212), 0);
+ if (!context.flags.z()) goto hangloopq;
+finishconv:
+ delpointer(context);
+ context.data.byte(234) = 0;
+ return;
+quitconv:
+ delpointer(context);
+ context.data.byte(234) = 0;
+ context.ax = context.pop();
+ cancelch1(context);
+ return;
+}
+
+static inline void redes(Context & context) {
+ context._cmp(context.data.byte(515), 255);
+ if (!context.flags.z()) goto cantredes;
+ context._cmp(context.data.byte(245), 2);
+ if (context.flags.z()) goto canredes;
+cantredes:
+ blank(context);
+ return;
+canredes:
+ context._cmp(context.data.byte(100), 217);
+ if (context.flags.z()) goto alreadyreds;
+ context.data.byte(100) = 217;
+ context.al = 50;
+ commandonly(context);
+alreadyreds:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doredes;
+ return;
+doredes:
+ delpointer(context);
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ convicons(context);
+ starttalk(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void lookatplace(Context & context) {
+ context._cmp(context.data.byte(100), 224);
+ if (context.flags.z()) goto alreadyinfo;
+ context.data.byte(100) = 224;
+ context.al = 27;
+ commandonly(context);
+alreadyinfo:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto noinfo;
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto noinfo;
+ context.bl = context.data.byte(183);
+ context._cmp(context.bl, 15);
+ if (!context.flags.c()) goto noinfo;
+ context.push(context.bx);
+ delpointer(context);
+ deltextline(context);
+ getundercentre(context);
+ context.ds = context.data.word(462);
+ context.al = 0;
+ context.ah = 0;
+ context.di = 60;
+ context.bx = 72;
+ showframe(context);
+ context.al = 4;
+ context.ah = 0;
+ context.di = 60;
+ context.bx = 72+55;
+ showframe(context);
+ context.al = 4;
+ context.ah = 0;
+ context.di = 60;
+ context.bx = 72+55+21;
+ showframe(context);
+ context.bx = context.pop();
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(456);
+ context.si = context.data.word(context.bx);
+ context._add(context.si, 66*2);
+ findnextcolon(context);
+ context.di = 63;
+ context.bx = 84+4;
+ context.dl = 191;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ worktoscreenm(context);
+ context.cx = 500;
+ hangonp(context);
+afterinfo:
+ context.data.byte(234) = 0;
+ context.data.byte(231) = 0;
+ putundercentre(context);
+ worktoscreenm(context);
+noinfo:
+ return;
+}
+
+static inline void getundercentre(Context & context) {
+ context.di = 58;
+ context.bx = 72;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ context.cl = 254;
+ context.ch = 110;
+ multiget(context);
+ return;
+}
+
+static inline void putundercentre(Context & context) {
+ context.di = 58;
+ context.bx = 72;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ context.cl = 254;
+ context.ch = 110;
+ multiput(context);
+ return;
+}
+
+static inline void nextdest(Context & context) {
+duok:
+ context._cmp(context.data.byte(100), 218);
+ if (context.flags.z()) goto alreadydu;
+ context.data.byte(100) = 218;
+ context.al = 28;
+ commandonly(context);
+alreadydu:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto nodu;
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nodu;
+searchdestup:
+ context._add(context.data.byte(183), 1);
+ context._cmp(context.data.byte(183), 15);
+ if (!context.flags.z()) goto notlastdest;
+ context.data.byte(183) = 0;
+notlastdest:
+ getdestinfo(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto searchdestup;
+ context.data.byte(109) = 1;
+ deltextline(context);
+ delpointer(context);
+ showpanel(context);
+ showman(context);
+ showarrows(context);
+ locationpic(context);
+ undertextline(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+nodu:
+ return;
+}
+
+static inline void lastdest(Context & context) {
+ddok:
+ context._cmp(context.data.byte(100), 219);
+ if (context.flags.z()) goto alreadydd;
+ context.data.byte(100) = 219;
+ context.al = 29;
+ commandonly(context);
+alreadydd:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto nodd;
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nodd;
+searchdestdown:
+ context._sub(context.data.byte(183), 1);
+ context._cmp(context.data.byte(183), -1);
+ if (!context.flags.z()) goto notfirstdest;
+ context.data.byte(183) = 15;
+notfirstdest:
+ getdestinfo(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto searchdestdown;
+ context.data.byte(109) = 1;
+ deltextline(context);
+ delpointer(context);
+ showpanel(context);
+ showman(context);
+ showarrows(context);
+ locationpic(context);
+ undertextline(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+nodd:
+ return;
+}
+
+static inline void destselect(Context & context) {
+ context._cmp(context.data.byte(100), 222);
+ if (context.flags.z()) goto alreadytrav;
+ context.data.byte(100) = 222;
+ context.al = 30;
+ commandonly(context);
+alreadytrav:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto notrav;
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notrav;
+ getdestinfo(context);
+ context.al = context.data.byte(183);
+ context.data.byte(188) = context.al;
+notrav:
+ return;
+}
+
+static inline void usemon(Context & context) {
+ context.data.byte(55) = 0;
+ context.es = context.cs;
+ context.di = 2895+1;
+ context.cx = 12;
+ context.al = 32;
+ while(--context.cx) context._stosb();
+ context.es = context.cs;
+ context.di = 2883+1;
+ context.cx = 12;
+ context.al = 32;
+ while(--context.cx) context._stosb();
+ context.es = context.cs;
+ context.di = 2807;
+ context.data.byte(context.di) = 1;
+ context._add(context.di, 26);
+ context.cx = 3;
+keyloop:
+ context.data.byte(context.di) = 0;
+ context._add(context.di, 26);
+ if (--context.cx) goto keyloop;
+ createpanel(context);
+ showpanel(context);
+ showicon(context);
+ drawfloor(context);
+ getridofall(context);
+ context.dx = 1987;
+ loadintotemp(context);
+ loadpersonal(context);
+ loadnews(context);
+ loadcart(context);
+ context.dx = 1883;
+ loadtempcharset(context);
+ printoutermon(context);
+ initialmoncols(context);
+ printlogo(context);
+ worktoscreen(context);
+ turnonpower(context);
+ fadeupyellows(context);
+ fadeupmonfirst(context);
+ context.data.word(318) = 76;
+ context.data.word(320) = 141;
+ context.al = 1;
+ monmessage(context);
+ context.cx = 120;
+ hangoncurs(context);
+ context.al = 2;
+ monmessage(context);
+ context.cx = 60;
+ randomaccess(context);
+ context.al = 3;
+ monmessage(context);
+ context.cx = 100;
+ hangoncurs(context);
+ printlogo(context);
+ scrollmonitor(context);
+ context.data.word(394) = 0;
+ context.data.word(396) = 0;
+moreinput:
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.push(context.di);
+ context.push(context.bx);
+ input(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.data.word(318) = context.di;
+ context.data.word(320) = context.bx;
+ execcommand(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto moreinput;
+endmon:
+ getridoftemp(context);
+ getridoftempcharset(context);
+ context.es = context.data.word(466);
+ deallocatemem(context);
+ context.es = context.data.word(468);
+ deallocatemem(context);
+ context.es = context.data.word(470);
+ deallocatemem(context);
+ context.data.byte(103) = 1;
+ context.al = 26;
+ playchannel1(context);
+ context.data.byte(131) = 0;
+ restoreall(context);
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void printoutermon(Context & context) {
+ context.di = 40;
+ context.bx = 32;
+ context.ds = context.data.word(458);
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.di = 264;
+ context.bx = 32;
+ context.ds = context.data.word(458);
+ context.al = 2;
+ context.ah = 0;
+ showframe(context);
+ context.di = 40;
+ context.bx = 12;
+ context.ds = context.data.word(458);
+ context.al = 3;
+ context.ah = 0;
+ showframe(context);
+ context.di = 40;
+ context.bx = 164;
+ context.ds = context.data.word(458);
+ context.al = 4;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void loadpersonal(Context & context) {
+ context.al = context.data.byte(9);
+ context.dx = 2065;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundpersonal;
+ context._cmp(context.al, 42);
+ if (context.flags.z()) goto foundpersonal;
+ context.dx = 2078;
+ context._cmp(context.al, 2);
+ if (context.flags.z()) goto foundpersonal;
+foundpersonal:
+ openfile(context);
+ readheader(context);
+ context.bx = context.data.word(context.di);
+ context.push(context.bx);
+ context.cl = 4;
+ context._shr(context.bx, context.cl);
+ allocatemem(context);
+ context.data.word(466) = context.ax;
+ context.ds = context.ax;
+ context.cx = context.pop();
+ context.dx = 0;
+ readfromfile(context);
+ closefile(context);
+ return;
+}
+
+static inline void loadnews(Context & context) {
+ context.al = context.data.byte(34);
+ context.dx = 2091;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundnews;
+ context.dx = 2104;
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto foundnews;
+ context.dx = 2117;
+ context._cmp(context.al, 2);
+ if (context.flags.z()) goto foundnews;
+ context.dx = 2130;
+foundnews:
+ openfile(context);
+ readheader(context);
+ context.bx = context.data.word(context.di);
+ context.push(context.bx);
+ context.cl = 4;
+ context._shr(context.bx, context.cl);
+ allocatemem(context);
+ context.data.word(468) = context.ax;
+ context.ds = context.ax;
+ context.cx = context.pop();
+ context.dx = 0;
+ readfromfile(context);
+ closefile(context);
+ return;
+}
+
+static inline void loadcart(Context & context) {
+ lookininterface(context);
+ context.dx = 2143;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto gotcart;
+ context.dx = 2156;
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto gotcart;
+ context.dx = 2169;
+ context._cmp(context.al, 2);
+ if (context.flags.z()) goto gotcart;
+ context.dx = 2182;
+ context._cmp(context.al, 3);
+ if (context.flags.z()) goto gotcart;
+ context.dx = 2195;
+gotcart:
+ openfile(context);
+ readheader(context);
+ context.bx = context.data.word(context.di);
+ context.push(context.bx);
+ context.cl = 4;
+ context._shr(context.bx, context.cl);
+ allocatemem(context);
+ context.data.word(470) = context.ax;
+ context.ds = context.ax;
+ context.cx = context.pop();
+ context.dx = 0;
+ readfromfile(context);
+ closefile(context);
+ return;
+}
+
+static inline void lookininterface(Context & context) {
+ context.al = 'I';
+ context.ah = 'N';
+ context.cl = 'T';
+ context.ch = 'F';
+ findsetobject(context);
+ context.ah = 1;
+ checkinside(context);
+ context._cmp(context.cl, 114);
+ if (context.flags.z()) goto emptyinterface;
+ context.al = context.data.byte(context.bx+15);
+ context._add(context.al, 1);
+ return;
+emptyinterface:
+ context.al = 0;
+ return;
+}
+
+static inline void turnonpower(Context & context) {
+ context.cx = 3;
+powerloop:
+ context.push(context.cx);
+ powerlighton(context);
+ context.cx = 30;
+ hangon(context);
+ powerlightoff(context);
+ context.cx = 30;
+ hangon(context);
+ context.cx = context.pop();
+ if (--context.cx) goto powerloop;
+ powerlighton(context);
+ return;
+}
+
+static inline void randomaccess(Context & context) {
+accessloop:
+ context.push(context.cx);
+ vsync(context);
+ vsync(context);
+ randomnum1(context);
+ context._and(context.al, 15);
+ context._cmp(context.al, 10);
+ if (context.flags.c()) goto off;
+ accesslighton(context);
+ goto chosenaccess;
+off:
+ accesslightoff(context);
+chosenaccess:
+ context.cx = context.pop();
+ if (--context.cx) goto accessloop;
+ accesslightoff(context);
+ return;
+}
+
+static inline void powerlighton(Context & context) {
+ context.di = 257+4;
+ context.bx = 182;
+ context.ds = context.data.word(458);
+ context.al = 6;
+ context.ah = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cl = 12;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void powerlightoff(Context & context) {
+ context.di = 257+4;
+ context.bx = 182;
+ context.ds = context.data.word(458);
+ context.al = 5;
+ context.ah = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cl = 12;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void accesslighton(Context & context) {
+ context.di = 74;
+ context.bx = 182;
+ context.ds = context.data.word(458);
+ context.al = 8;
+ context.ah = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cl = 12;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void accesslightoff(Context & context) {
+ context.di = 74;
+ context.bx = 182;
+ context.ds = context.data.word(458);
+ context.al = 7;
+ context.ah = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cl = 12;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void locklighton(Context & context) {
+ context.di = 56;
+ context.bx = 182;
+ context.ds = context.data.word(458);
+ context.al = 10;
+ context.ah = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cl = 12;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void locklightoff(Context & context) {
+ context.di = 56;
+ context.bx = 182;
+ context.ds = context.data.word(458);
+ context.al = 9;
+ context.ah = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cl = 12;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void input(Context & context) {
+ context.es = context.cs;
+ context.di = 7944;
+ context.cx = 64;
+ context.al = 0;
+ while(--context.cx) context._stosb();
+ context.data.word(316) = 0;
+ context.al = '>';
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.ds = context.data.word(406);
+ context.ah = 0;
+ printchar(context);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.cl = 6;
+ context.ch = 8;
+ multidump(context);
+ context._add(context.data.word(318), 6);
+ context.ax = context.data.word(318);
+ context.data.word(312) = context.ax;
+ context.ax = context.data.word(320);
+ context.data.word(314) = context.ax;
+waitkey:
+ printcurs(context);
+ vsync(context);
+ delcurs(context);
+ readkey(context);
+ context.al = context.data.byte(142);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto waitkey;
+ context._cmp(context.al, 13);
+ if (context.flags.z()) goto endofinput;
+ context._cmp(context.al, 8);
+ if (!context.flags.z()) goto notdel;
+ context._cmp(context.data.word(316), 0);
+ if (context.flags.z()) goto waitkey;
+ delchar(context);
+ goto waitkey;
+notdel:
+ context._cmp(context.data.word(316), 28);
+ if (context.flags.z()) goto waitkey;
+ context._cmp(context.data.byte(142), 32);
+ if (!context.flags.z()) goto notleadingspace;
+ context._cmp(context.data.word(316), 0);
+ if (context.flags.z()) goto waitkey;
+notleadingspace:
+ makecaps(context);
+ context.es = context.cs;
+ context.si = context.data.word(316);
+ context._add(context.si, context.si);
+ context._add(context.si, 7944);
+ context.data.byte(context.si) = context.al;
+ context._cmp(context.al, 'Z'+1);
+ if (!context.flags.c()) goto waitkey;
+ context.push(context.ax);
+ context.push(context.es);
+ context.push(context.si);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.ds = context.data.word(402);
+ context.ax = context.data.word(316);
+ context._xchg(context.al, context.ah);
+ context.si = context.ax;
+ context.cl = 8;
+ context.ch = 8;
+ multiget(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.ax = context.pop();
+ context.push(context.es);
+ context.push(context.si);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.ds = context.data.word(406);
+ context.ah = 0;
+ printchar(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.data.byte(context.si+1) = context.cl;
+ context.ch = 0;
+ context._add(context.data.word(318), context.cx);
+ context._add(context.data.word(316), 1);
+ context._add(context.data.word(312), context.cx);
+ goto waitkey;
+endofinput:
+ return;
+}
+
+static inline void makecaps(Context & context) {
+ context._cmp(context.al, 'a');
+ if (context.flags.c()) goto notupperc;
+ context._sub(context.al, 32);
+notupperc:
+ return;
+}
+
+static inline void delchar(Context & context) {
+ context._sub(context.data.word(316), 1);
+ context.si = context.data.word(316);
+ context._add(context.si, context.si);
+ context.es = context.cs;
+ context._add(context.si, 7944);
+ context.data.byte(context.si) = 0;
+ context.al = context.data.byte(context.si+1);
+ context.ah = 0;
+ context._sub(context.data.word(318), context.ax);
+ context._sub(context.data.word(312), context.ax);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.ds = context.data.word(402);
+ context.ax = context.data.word(316);
+ context._xchg(context.al, context.ah);
+ context.si = context.ax;
+ context.cl = 8;
+ context.ch = 8;
+ multiput(context);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.cl = context.al;
+ context.ch = 8;
+ multidump(context);
+ return;
+}
+
+static inline void execcommand(Context & context) {
+ context.es = context.cs;
+ context.bx = 2776;
+ context.ds = context.cs;
+ context.si = 7944;
+ context.al = context.data.byte(context.si);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto notblankinp;
+ scrollmonitor(context);
+ return;
+notblankinp:
+ context.cl = 0;
+comloop:
+ context.push(context.bx);
+ context.push(context.si);
+comloop2:
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 2);
+ context.ah = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.ah, 32);
+ if (context.flags.z()) goto foundcom;
+ context._cmp(context.al, context.ah);
+ if (context.flags.z()) goto comloop2;
+ context.si = context.pop();
+ context.bx = context.pop();
+ context._add(context.bx, 10);
+ context._add(context.cl, 1);
+ context._cmp(context.cl, 6);
+ if (!context.flags.z()) goto comloop;
+ neterror(context);
+ context.al = 0;
+ return;
+foundcom:
+ context.si = context.pop();
+ context.bx = context.pop();
+ context._cmp(context.cl, 1);
+ if (context.flags.z()) goto testcom;
+ context._cmp(context.cl, 2);
+ if (context.flags.z()) goto directory;
+ context._cmp(context.cl, 3);
+ if (context.flags.z()) goto accesscom;
+ context._cmp(context.cl, 4);
+ if (context.flags.z()) goto signoncom;
+ context._cmp(context.cl, 5);
+ if (context.flags.z()) goto keyscom;
+ goto quitcom;
+directory:
+ dircom(context);
+ context.al = 0;
+ return;
+signoncom:
+ signon(context);
+ context.al = 0;
+ return;
+accesscom:
+ read(context);
+ context.al = 0;
+ return;
+keyscom:
+ showkeys(context);
+ context.al = 0;
+ return;
+testcom:
+ context.al = 6;
+ monmessage(context);
+ context.al = 0;
+ return;
+quitcom:
+ context.al = 1;
+ return;
+}
+
+static inline void neterror(Context & context) {
+ context.al = 5;
+ monmessage(context);
+ scrollmonitor(context);
+ return;
+}
+
+static inline void dircom(Context & context) {
+ context.cx = 30;
+ randomaccess(context);
+ parser(context);
+ context._cmp(context.data.byte(context.di+1), 0);
+ if (context.flags.z()) goto dirroot;
+ dirfile(context);
+ return;
+dirroot:
+ context.data.byte(269) = 0;
+ context.ds = context.cs;
+ context.si = 2885;
+ context._add(context.si, 1);
+ context.es = context.cs;
+ context.di = 2895;
+ context._add(context.di, 1);
+ context.cx = 12;
+ while(--context.cx) context._movsb();
+ monitorlogo(context);
+ scrollmonitor(context);
+ context.al = 9;
+ monmessage(context);
+ context.es = context.data.word(466);
+ searchforfiles(context);
+ context.es = context.data.word(468);
+ searchforfiles(context);
+ context.es = context.data.word(470);
+ searchforfiles(context);
+ scrollmonitor(context);
+ return;
+}
+
+static inline void searchforfiles(Context & context) {
+ context.bx = 66*2;
+directloop1:
+ context.al = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.al, '*');
+ if (context.flags.z()) goto endofdir;
+ context._cmp(context.al, 34);
+ if (!context.flags.z()) goto directloop1;
+ monprint(context);
+ goto directloop1;
+endofdir:
+ return;
+}
+
+static inline void signon(Context & context) {
+ parser(context);
+ context._add(context.di, 1);
+ context.ds = context.cs;
+ context.si = 2807;
+ context.cx = 4;
+signonloop:
+ context.push(context.cx);
+ context.push(context.si);
+ context.push(context.di);
+ context._add(context.si, 14);
+ context.cx = 11;
+signonloop2:
+ context._lodsb();
+ context._cmp(context.al, 32);
+ if (context.flags.z()) goto foundsign;
+ makecaps(context);
+ context.ah = context.data.byte(context.di);
+ context._add(context.di, 1);
+ context._cmp(context.al, context.ah);
+ if (!context.flags.z()) goto nomatch;
+ if (--context.cx) goto signonloop2;
+nomatch:
+ context.di = context.pop();
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 26);
+ if (--context.cx) goto signonloop;
+ context.al = 13;
+ monmessage(context);
+ return;
+foundsign:
+ context.di = context.pop();
+ context.si = context.pop();
+ context.cx = context.pop();
+ context.bx = context.si;
+ context.es = context.ds;
+ context._cmp(context.data.byte(context.bx), 0);
+ if (context.flags.z()) goto notyetassigned;
+ context.al = 17;
+ monmessage(context);
+ return;
+notyetassigned:
+ context.push(context.es);
+ context.push(context.bx);
+ scrollmonitor(context);
+ context.al = 15;
+ monmessage(context);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ context.push(context.di);
+ context.push(context.bx);
+ input(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.data.word(318) = context.di;
+ context.data.word(320) = context.bx;
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.push(context.es);
+ context.push(context.bx);
+ context._add(context.bx, 2);
+ context.ds = context.cs;
+ context.si = 7944;
+checkpass:
+ context._lodsw();
+ context.ah = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.ah, 32);
+ if (context.flags.z()) goto passpassed;
+ context._cmp(context.al, context.ah);
+ if (context.flags.z()) goto checkpass;
+passerror:
+ context.bx = context.pop();
+ context.es = context.pop();
+ scrollmonitor(context);
+ context.al = 16;
+ monmessage(context);
+ return;
+passpassed:
+ context.al = 14;
+ monmessage(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.push(context.es);
+ context.push(context.bx);
+ context._add(context.bx, 14);
+ monprint(context);
+ scrollmonitor(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.data.byte(context.bx) = 1;
+ return;
+}
+
+static inline void showkeys(Context & context) {
+ context.cx = 10;
+ randomaccess(context);
+ scrollmonitor(context);
+ context.al = 18;
+ monmessage(context);
+ context.es = context.cs;
+ context.bx = 2807;
+ context.cx = 4;
+keysloop:
+ context.push(context.cx);
+ context.push(context.bx);
+ context._cmp(context.data.byte(context.bx), 0);
+ if (context.flags.z()) goto notheld;
+ context._add(context.bx, 14);
+ monprint(context);
+notheld:
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 26);
+ if (--context.cx) goto keysloop;
+ scrollmonitor(context);
+ return;
+}
+
+static inline void read(Context & context) {
+ context.cx = 40;
+ randomaccess(context);
+ parser(context);
+ context._cmp(context.data.byte(context.di+1), 0);
+ if (!context.flags.z()) goto okcom;
+ neterror(context);
+ return;
+okcom:
+ context.es = context.cs;
+ context.di = 2895;
+ context.ax = context.data.word(466);
+ context.data.word(324) = context.ax;
+ context.ds = context.ax;
+ context.si = 66*2;
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundfile2;
+ context.ax = context.data.word(468);
+ context.data.word(324) = context.ax;
+ context.ds = context.ax;
+ context.si = 66*2;
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundfile2;
+ context.ax = context.data.word(470);
+ context.data.word(324) = context.ax;
+ context.ds = context.ax;
+ context.si = 66*2;
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundfile2;
+ context.al = 7;
+ monmessage(context);
+ return;
+foundfile2:
+ getkeyandlogo(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto keyok1;
+ return;
+keyok1:
+ context.es = context.cs;
+ context.di = 2883;
+ context.ds = context.data.word(324);
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto findtopictext;
+ context.al = context.data.byte(270);
+ context.data.byte(269) = context.al;
+ context.al = 11;
+ monmessage(context);
+ return;
+findtopictext:
+ context._add(context.bx, 1);
+ context.push(context.es);
+ context.push(context.bx);
+ monitorlogo(context);
+ scrollmonitor(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+moretopic:
+ monprint(context);
+ context.al = context.data.byte(context.bx);
+ context._cmp(context.al, 34);
+ if (context.flags.z()) goto endoftopic;
+ context._cmp(context.al, '=');
+ if (context.flags.z()) goto endoftopic;
+ context._cmp(context.al, '*');
+ if (context.flags.z()) goto endoftopic;
+ context.push(context.es);
+ context.push(context.bx);
+ processtrigger(context);
+ context.cx = 24;
+ randomaccess(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ goto moretopic;
+endoftopic:
+ scrollmonitor(context);
+ return;
+}
+
+static inline void dirfile(Context & context) {
+ context.al = 34;
+ context.data.byte(context.di) = context.al;
+ context.push(context.es);
+ context.push(context.di);
+ context.ds = context.data.word(466);
+ context.si = 66*2;
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundfile;
+ context.di = context.pop();
+ context.es = context.pop();
+ context.push(context.es);
+ context.push(context.di);
+ context.ds = context.data.word(468);
+ context.si = 66*2;
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundfile;
+ context.di = context.pop();
+ context.es = context.pop();
+ context.push(context.es);
+ context.push(context.di);
+ context.ds = context.data.word(470);
+ context.si = 66*2;
+ searchforstring(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundfile;
+ context.di = context.pop();
+ context.es = context.pop();
+ context.al = 7;
+ monmessage(context);
+ return;
+foundfile:
+ context.ax = context.pop();
+ context.ax = context.pop();
+ getkeyandlogo(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto keyok2;
+ return;
+keyok2:
+ context.push(context.es);
+ context.push(context.bx);
+ context.ds = context.cs;
+ context.si = 2883+1;
+ context.es = context.cs;
+ context.di = 2895+1;
+ context.cx = 12;
+ while(--context.cx) context._movsb();
+ monitorlogo(context);
+ scrollmonitor(context);
+ context.al = 10;
+ monmessage(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+directloop2:
+ context.al = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.al, 34);
+ if (context.flags.z()) goto endofdir2;
+ context._cmp(context.al, '*');
+ if (context.flags.z()) goto endofdir2;
+ context._cmp(context.al, '=');
+ if (!context.flags.z()) goto directloop2;
+ monprint(context);
+ goto directloop2;
+endofdir2:
+ scrollmonitor(context);
+ return;
+}
+
+static inline void getkeyandlogo(Context & context) {
+ context._add(context.bx, 1);
+ context.al = context.data.byte(context.bx);
+ context._sub(context.al, 48);
+ context.data.byte(271) = context.al;
+ context._add(context.bx, 2);
+ context.al = context.data.byte(context.bx);
+ context._sub(context.al, 48);
+ context.data.byte(276) = context.al;
+ context._add(context.bx, 1);
+ context.push(context.es);
+ context.push(context.bx);
+ context.al = context.data.byte(276);
+ context.ah = 0;
+ context.cx = 26;
+ context._mul(context.cx);
+ context.es = context.cs;
+ context.bx = 2807;
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto keyok;
+ context.push(context.bx);
+ context.push(context.es);
+ context.al = 12;
+ monmessage(context);
+ context.es = context.pop();
+ context.bx = context.pop();
+ context._add(context.bx, 14);
+ monprint(context);
+ scrollmonitor(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.al = 1;
+ return;
+keyok:
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.al = context.data.byte(271);
+ context.data.byte(269) = context.al;
+ context.al = 0;
+ return;
+}
+
+static inline void searchforstring(Context & context) {
+ context.dl = context.data.byte(context.di);
+ context.cx = context.di;
+restartlook:
+ context.di = context.cx;
+ context.bx = context.si;
+ context.dh = 0;
+keeplooking:
+ context._lodsb();
+ makecaps(context);
+ context._cmp(context.al, '*');
+ if (context.flags.z()) goto notfound;
+ context._cmp(context.dl, '=');
+ if (!context.flags.z()) goto nofindingtopic;
+ context._cmp(context.al, 34);
+ if (context.flags.z()) goto notfound;
+nofindingtopic:
+ context.ah = context.data.byte(context.di);
+ context._cmp(context.al, context.dl);
+ if (!context.flags.z()) goto notbracket;
+ context._add(context.dh, 1);
+ context._cmp(context.dh, 2);
+ if (context.flags.z()) goto complete;
+notbracket:
+ context._cmp(context.al, context.ah);
+ if (!context.flags.z()) goto restartlook;
+ context._add(context.di, 1);
+ goto keeplooking;
+complete:
+ context.es = context.ds;
+ context.al = 0;
+ context.bx = context.si;
+ return;
+notfound:
+ context.al = 1;
+ return;
+}
+
+static inline void parser(Context & context) {
+ context.es = context.cs;
+ context.di = 2883;
+ context.cx = 13;
+ context.al = 0;
+ while(--context.cx) context._stosb();
+ context.di = 2883;
+ context.al = '=';
+ context._stosb();
+ context.ds = context.cs;
+ context.si = 7944;
+notspace1:
+ context._lodsw();
+ context._cmp(context.al, 32);
+ if (context.flags.z()) goto stillspace1;
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto notspace1;
+ goto finishpars;
+stillspace1:
+ context._lodsw();
+ context._cmp(context.al, 32);
+ if (context.flags.z()) goto stillspace1;
+copyin1:
+ context._stosb();
+ context._lodsw();
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishpars;
+ context._cmp(context.al, 32);
+ if (!context.flags.z()) goto copyin1;
+finishpars:
+ context.di = 2883;
+ return;
+}
+
+static inline void scrollmonitor(Context & context) {
+ context.push(context.ax);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.dx);
+ context.push(context.di);
+ context.push(context.si);
+ context.push(context.es);
+ context.push(context.ds);
+ printlogo(context);
+ context.di = context.data.word(318);
+ context.bx = context.data.word(320);
+ printundermon(context);
+ context.ax = context.data.word(320);
+ worktoscreen(context);
+ context.al = 25;
+ playchannel1(context);
+ context.ds = context.pop();
+ context.es = context.pop();
+ context.si = context.pop();
+ context.di = context.pop();
+ context.dx = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ax = context.pop();
+ return;
+}
+
+static inline void lockmon(Context & context) {
+ context._cmp(context.data.byte(392), 57);
+ if (!context.flags.z()) goto notlock;
+ locklighton(context);
+lockloop:
+ context._cmp(context.data.byte(392), 57);
+ if (context.flags.z()) goto lockloop;
+ locklightoff(context);
+notlock:
+ return;
+}
+
+static inline void monitorlogo(Context & context) {
+ context.al = context.data.byte(269);
+ context._cmp(context.al, context.data.byte(270));
+ if (context.flags.z()) goto notnewlogo;
+ context.data.byte(270) = context.al;
+ printlogo(context);
+ printundermon(context);
+ worktoscreen(context);
+ printlogo(context);
+ printlogo(context);
+ context.al = 26;
+ playchannel1(context);
+ context.cx = 20;
+ randomaccess(context);
+ return;
+notnewlogo:
+ printlogo(context);
+ return;
+}
+
+static inline void printlogo(Context & context) {
+ context.di = 56;
+ context.bx = 32;
+ context.ds = context.data.word(458);
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ showcurrentfile(context);
+ return;
+}
+
+static inline void showcurrentfile(Context & context) {
+ context.di = 178;
+ context.bx = 37;
+ context.si = 2895+1;
+curfileloop:
+ context.al = context.data.byte(context.si);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishfile;
+ context._add(context.si, 1);
+ context.push(context.si);
+ modifychar(context);
+ context.ds = context.data.word(406);
+ context.ah = 0;
+ printchar(context);
+ context.si = context.pop();
+ goto curfileloop;
+finishfile:
+ return;
+}
+
+static inline void monmessage(Context & context) {
+ context.es = context.data.word(466);
+ context.bx = 66*2;
+ context.cl = context.al;
+ context.ch = 0;
+monmessageloop:
+ context.al = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.al, '+');
+ if (!context.flags.z()) goto monmessageloop;
+ if (--context.cx) goto monmessageloop;
+ monprint(context);
+ return;
+}
+
+static inline void processtrigger(Context & context) {
+ context._cmp(context.data.byte(55), '1');
+ if (!context.flags.z()) goto notfirsttrigger;
+ context.al = 8;
+ setlocation(context);
+ context.al = 45;
+ triggermessage(context);
+ return;
+notfirsttrigger:
+ context._cmp(context.data.byte(55), '2');
+ if (!context.flags.z()) goto notsecondtrigger;
+ context.al = 9;
+ setlocation(context);
+ context.al = 55;
+ triggermessage(context);
+ return;
+notsecondtrigger:
+ context._cmp(context.data.byte(55), '3');
+ if (!context.flags.z()) goto notthirdtrigger;
+ context.al = 2;
+ setlocation(context);
+ context.al = 59;
+ triggermessage(context);
+notthirdtrigger:
+ return;
+}
+
+static inline void triggermessage(Context & context) {
+ context.push(context.ax);
+ context.di = 174;
+ context.bx = 153;
+ context.cl = 200;
+ context.ch = 63;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ multiget(context);
+ context.ax = context.pop();
+ findpuztext(context);
+ context.di = 174;
+ context.bx = 156;
+ context.dl = 141;
+ context.ah = 16;
+ printdirect(context);
+ context.cx = 140;
+ hangon(context);
+ worktoscreen(context);
+ context.cx = 340;
+ hangon(context);
+ context.di = 174;
+ context.bx = 153;
+ context.cl = 200;
+ context.ch = 63;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ multiput(context);
+ worktoscreen(context);
+ context.data.byte(55) = 0;
+ return;
+}
+
+static inline void printcurs(Context & context) {
+ context.push(context.si);
+ context.push(context.di);
+ context.push(context.ds);
+ context.push(context.dx);
+ context.push(context.bx);
+ context.push(context.es);
+ context.di = context.data.word(312);
+ context.bx = context.data.word(314);
+ context.cl = 6;
+ context.ch = 8;
+ context._sub(context.bx, 3);
+ context.ch = 11;
+ context.ds = context.data.word(412);
+ context.si = 0;
+ context.push(context.di);
+ context.push(context.bx);
+ multiget(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.push(context.bx);
+ context.push(context.di);
+ context._add(context.data.word(138), 1);
+ context.ax = context.data.word(138);
+ context._and(context.al, 16);
+ if (!context.flags.z()) goto flashcurs;
+ context.al = '/';
+ context._sub(context.al, 32);
+ context.ah = 0;
+ context.ds = context.data.word(406);
+ showframe(context);
+flashcurs:
+ context.di = context.pop();
+ context.bx = context.pop();
+ context._sub(context.di, 6);
+ context.cl = 12;
+ context.ch = 11;
+ multidump(context);
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.dx = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.si = context.pop();
+ return;
+}
+
+static inline void delcurs(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.ds);
+ context.push(context.dx);
+ context.push(context.si);
+ context.di = context.data.word(312);
+ context.bx = context.data.word(314);
+ context.cl = 6;
+ context.ch = 8;
+ context._sub(context.bx, 3);
+ context.ch = 11;
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.ds = context.data.word(412);
+ context.si = 0;
+ multiput(context);
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ multidump(context);
+finishcurdel:
+ context.si = context.pop();
+ context.dx = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void useobject(Context & context) {
+ context.data.byte(95) = 255;
+ context._cmp(context.data.byte(100), 229);
+ if (context.flags.z()) goto alreadyuse;
+ context.data.byte(100) = 229;
+ context.bl = context.data.byte(99);
+ context.bh = context.data.byte(102);
+ context.al = 51;
+ commandwithob(context);
+alreadyuse:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nouse;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto douse;
+nouse:
+ return;
+douse:
+ useroutine(context);
+ return;
+}
+
+static inline void useroutine(Context & context) {
+ context._cmp(context.data.byte(184), 50);
+ if (context.flags.c()) goto nodream7;
+ context._cmp(context.data.byte(232), 0);
+ if (!context.flags.z()) goto powerok;
+ return;
+powerok:
+ context.data.byte(232) = 0;
+nodream7:
+ getanyad(context);
+ context.dx = context.ds;
+ context.ds = context.dx;
+ context.si = 2895;
+checkuselist:
+ context.push(context.si);
+ context._lodsb();
+ context._sub(context.al, 'A');
+ context._cmp(context.al, context.data.byte(context.bx+12));
+ if (!context.flags.z()) goto failed;
+ context._lodsb();
+ context._sub(context.al, 'A');
+ context._cmp(context.al, context.data.byte(context.bx+13));
+ if (!context.flags.z()) goto failed;
+ context._lodsb();
+ context._sub(context.al, 'A');
+ context._cmp(context.al, context.data.byte(context.bx+14));
+ if (!context.flags.z()) goto failed;
+ context._lodsb();
+ context._sub(context.al, 'A');
+ context._cmp(context.al, context.data.byte(context.bx+15));
+ if (!context.flags.z()) goto failed;
+ context._lodsw();
+ context.si = context.pop();
+ __dispatch_call(context, context.ax);
+ return;
+failed:
+ context.si = context.pop();
+ context._add(context.si, 6);
+ context._cmp(context.data.byte(context.si), 140);
+ if (!context.flags.z()) goto checkuselist;
+ delpointer(context);
+ getobtextstart(context);
+ findnextcolon(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto cantuse2;
+ findnextcolon(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto cantuse2;
+ context.al = context.data.byte(context.si);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto cantuse2;
+ usetext(context);
+ context.cx = 400;
+ hangonp(context);
+ putbackobstuff(context);
+ return;
+cantuse2:
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ obicons(context);
+ context.di = 33;
+ context.bx = 100;
+ context.al = 63;
+ context.dl = 241;
+ printmessage(context);
+ worktoscreenm(context);
+ context.cx = 50;
+ hangonp(context);
+ putbackobstuff(context);
+ context.data.byte(100) = 255;
+ return;
+}
+
+static inline void wheelsound(Context & context) {
+ context.al = 17;
+ playchannel1(context);
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void runtap(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto tapwith;
+ withwhat(context);
+ return;
+tapwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto fillcupfromtap;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'F';
+ compare(context);
+ if (context.flags.z()) goto cupfromtapfull;
+ context.cx = 300;
+ context.al = 56;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+fillcupfromtap:
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+15) = 'F'-'A';
+ context.al = 8;
+ playchannel1(context);
+ context.cx = 300;
+ context.al = 57;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+cupfromtapfull:
+ context.cx = 300;
+ context.al = 58;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void playguitar(Context & context) {
+ context.al = 14;
+ playchannel1(context);
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void hotelcontrol(Context & context) {
+ context._cmp(context.data.byte(184), 21);
+ if (!context.flags.z()) goto notrightcont;
+ context._cmp(context.data.byte(148), 33);
+ if (!context.flags.z()) goto notrightcont;
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+notrightcont:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void hotelbell(Context & context) {
+ context.al = 12;
+ playchannel1(context);
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void opentomb(Context & context) {
+ context._add(context.data.byte(2), 1);
+ showfirstuse(context);
+ context.data.word(21) = 35*2;
+ context.data.word(23) = 1;
+ context.data.word(25) = 33;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usetrainer(Context & context) {
+ getanyad(context);
+ context._cmp(context.data.byte(context.bx+2), 4);
+ if (!context.flags.z()) goto notheldtrainer;
+ context._add(context.data.byte(2), 1);
+ makeworn(context);
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+notheldtrainer:
+ nothelderror(context);
+ return;
+}
+
+static inline void nothelderror(Context & context) {
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ obicons(context);
+ context.di = 64;
+ context.bx = 100;
+ context.al = 63;
+ context.ah = 1;
+ context.dl = 201;
+ printmessage2(context);
+ worktoscreenm(context);
+ context.cx = 50;
+ hangonp(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usepipe(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto pipewith;
+ withwhat(context);
+ return;
+pipewith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto fillcup;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'F';
+ compare(context);
+ if (context.flags.z()) goto alreadyfull;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+fillcup:
+ context.cx = 300;
+ context.al = 36;
+ showpuztext(context);
+ putbackobstuff(context);
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+15) = 'F'-'A';
+ return;
+alreadyfull:
+ context.cx = 300;
+ context.al = 35;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usefullcart(Context & context) {
+ context._add(context.data.byte(2), 1);
+ context.al = 2;
+ context.ah = context.data.byte(185);
+ context._add(context.ah, 6);
+ turnanypathon(context);
+ context.data.byte(475) = 4;
+ context.data.byte(133) = 4;
+ context.data.byte(135) = 4;
+ context.data.byte(477) = 4;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ showfirstuse(context);
+ context.data.word(21) = 72*2;
+ context.data.word(23) = 58;
+ context.data.word(25) = 142;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useplinth(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto plinthwith;
+ withwhat(context);
+ return;
+plinthwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'D';
+ context.ch = 'K';
+ context.dl = 'E';
+ context.dh = 'Y';
+ compare(context);
+ if (context.flags.z()) goto isrightkey;
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+isrightkey:
+ context._add(context.data.byte(2), 1);
+ showseconduse(context);
+ context.data.word(21) = 220;
+ context.data.word(23) = 0;
+ context.data.word(25) = 104;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context.al = context.data.byte(67);
+ context.data.byte(188) = context.al;
+ return;
+}
+
+static inline void chewy(Context & context) {
+ showfirstuse(context);
+ getanyad(context);
+ context.data.byte(context.bx+2) = 255;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useladder(Context & context) {
+ showfirstuse(context);
+ context._sub(context.data.byte(148), 11);
+ findroominloc(context);
+ context.data.byte(133) = 6;
+ context.data.byte(135) = 6;
+ context.data.byte(475) = 0;
+ context.data.byte(478) = 0;
+ context.data.byte(477) = 0;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useladderb(Context & context) {
+ showfirstuse(context);
+ context._add(context.data.byte(148), 11);
+ findroominloc(context);
+ context.data.byte(133) = 2;
+ context.data.byte(135) = 2;
+ context.data.byte(475) = 1;
+ context.data.byte(478) = 1;
+ context.data.byte(477) = 1;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void slabdoora(Context & context) {
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 13;
+ context._cmp(context.data.byte(66), 3);
+ if (!context.flags.z()) goto slabawrong;
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 60;
+ context.data.word(25) = 42;
+ context.data.byte(188) = 47;
+ return;
+slabawrong:
+ context.data.word(21) = 40;
+ context.data.word(25) = 34;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void slabdoorb(Context & context) {
+ context._cmp(context.data.byte(66), 1);
+ if (!context.flags.z()) goto slabbwrong;
+ context.al = 'S';
+ context.ah = 'H';
+ context.cl = 'L';
+ context.ch = 'D';
+ isryanholding(context);
+ if (!context.flags.z()) goto gotcrystal;
+ context.al = 44;
+ context.cx = 200;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+gotcrystal:
+ showfirstuse(context);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 44;
+ context.data.word(21) = 60;
+ context.data.word(25) = 71;
+ context.data.byte(188) = 47;
+ return;
+slabbwrong:
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 44;
+ context.data.word(21) = 40;
+ context.data.word(25) = 63;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void slabdoord(Context & context) {
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 75;
+ context._cmp(context.data.byte(66), 0);
+ if (!context.flags.z()) goto slabcwrong;
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 60;
+ context.data.word(25) = 102;
+ context.data.byte(188) = 47;
+ return;
+slabcwrong:
+ context.data.word(21) = 40;
+ context.data.word(25) = 94;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void slabdoorc(Context & context) {
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 108;
+ context._cmp(context.data.byte(66), 4);
+ if (!context.flags.z()) goto slabdwrong;
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 60;
+ context.data.word(25) = 135;
+ context.data.byte(188) = 47;
+ return;
+slabdwrong:
+ context.data.word(21) = 40;
+ context.data.word(25) = 127;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void slabdoore(Context & context) {
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 141;
+ context._cmp(context.data.byte(66), 5);
+ if (!context.flags.z()) goto slabewrong;
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 60;
+ context.data.word(25) = 168;
+ context.data.byte(188) = 47;
+ return;
+slabewrong:
+ context.data.word(21) = 40;
+ context.data.word(25) = 160;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void slabdoorf(Context & context) {
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(23) = 171;
+ context._cmp(context.data.byte(66), 2);
+ if (!context.flags.z()) goto slabfwrong;
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 60;
+ context.data.word(25) = 197;
+ context.data.byte(188) = 47;
+ return;
+slabfwrong:
+ context.data.word(21) = 40;
+ context.data.word(25) = 189;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void useslab(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto slabwith;
+ withwhat(context);
+ return;
+slabwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'J';
+ context.ch = 'E';
+ context.dl = 'W';
+ context.dh = 'L';
+ compare(context);
+ if (context.flags.z()) goto nextslab;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+nextslab:
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+2) = 0;
+ context.al = context.data.byte(99);
+ context.push(context.ax);
+ removesetobject(context);
+ context.ax = context.pop();
+ context._add(context.al, 1);
+ context.push(context.ax);
+ placesetobject(context);
+ context.ax = context.pop();
+ context._cmp(context.al, 54);
+ if (!context.flags.z()) goto notlastslab;
+ context.al = 0;
+ turnpathon(context);
+ context.data.word(21) = 22;
+ context.data.word(23) = 35;
+ context.data.word(25) = 48;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+notlastslab:
+ context._add(context.data.byte(2), 1);
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usecart(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto cartwith;
+ withwhat(context);
+ return;
+cartwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'R';
+ context.ch = 'O';
+ context.dl = 'C';
+ context.dh = 'K';
+ compare(context);
+ if (context.flags.z()) goto nextcart;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+nextcart:
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+2) = 0;
+ context.al = context.data.byte(99);
+ context.push(context.ax);
+ removesetobject(context);
+ context.ax = context.pop();
+ context._add(context.al, 1);
+ placesetobject(context);
+ context._add(context.data.byte(2), 1);
+ context.al = 17;
+ playchannel1(context);
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useclearbox(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto clearboxwith;
+ withwhat(context);
+ return;
+clearboxwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'R';
+ context.ch = 'A';
+ context.dl = 'I';
+ context.dh = 'L';
+ compare(context);
+ if (context.flags.z()) goto openbox;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+openbox:
+ context._add(context.data.byte(2), 1);
+ showfirstuse(context);
+ context.data.word(21) = 80;
+ context.data.word(23) = 67;
+ context.data.word(25) = 105;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usecoveredbox(Context & context) {
+ context._add(context.data.byte(2), 1);
+ showfirstuse(context);
+ context.data.word(21) = 50;
+ context.data.word(23) = 41;
+ context.data.word(25) = 66;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void userailing(Context & context) {
+ showfirstuse(context);
+ context.data.word(21) = 80;
+ context.data.word(23) = 0;
+ context.data.word(25) = 30;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context.data.byte(56) = 4;
+ return;
+}
+
+static inline void useopenbox(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto openboxwith;
+ withwhat(context);
+ return;
+openboxwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'F';
+ compare(context);
+ if (context.flags.z()) goto destoryopenbox;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto openboxwrong;
+ showfirstuse(context);
+ return;
+destoryopenbox:
+ context._add(context.data.byte(2), 1);
+ context.cx = 300;
+ context.al = 37;
+ showpuztext(context);
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+15) = 'E'-'A';
+ context.data.word(21) = 140;
+ context.data.word(23) = 105;
+ context.data.word(25) = 181;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.al = 4;
+ turnpathon(context);
+ context.data.byte(103) = 1;
+ return;
+openboxwrong:
+ context.cx = 300;
+ context.al = 38;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void wearwatch(Context & context) {
+ context._cmp(context.data.byte(3), 1);
+ if (context.flags.z()) goto wearingwatch;
+ showfirstuse(context);
+ context.data.byte(3) = 1;
+ context.data.byte(103) = 1;
+ getanyad(context);
+ makeworn(context);
+ return;
+wearingwatch:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void wearshades(Context & context) {
+ context._cmp(context.data.byte(4), 1);
+ if (context.flags.z()) goto wearingshades;
+ context.data.byte(4) = 1;
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ getanyad(context);
+ makeworn(context);
+ return;
+wearingshades:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void sitdowninbar(Context & context) {
+ context._cmp(context.data.byte(32), -1);
+ if (!context.flags.z()) goto satdown;
+ showfirstuse(context);
+ context.data.word(21) = 50;
+ context.data.word(23) = 55;
+ context.data.word(25) = 71;
+ context.data.word(29) = 73;
+ context.data.word(31) = 83;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+satdown:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usechurchhole(Context & context) {
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ context.data.word(21) = 28;
+ context.data.word(23) = 13;
+ context.data.word(25) = 26;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+}
+
+static inline void usehole(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto holewith;
+ withwhat(context);
+ return;
+holewith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'H';
+ context.ch = 'N';
+ context.dl = 'D';
+ context.dh = 'A';
+ compare(context);
+ if (context.flags.z()) goto righthand;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+righthand:
+ showfirstuse(context);
+ context.al = 86;
+ removesetobject(context);
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+2) = 255;
+ context.data.byte(47) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usealtar(Context & context) {
+ context.al = 'C';
+ context.ah = 'N';
+ context.cl = 'D';
+ context.ch = 'A';
+ findexobject(context);
+ context._cmp(context.al, 114);
+ if (context.flags.z()) goto thingsonaltar;
+ context.al = 'C';
+ context.ah = 'N';
+ context.cl = 'D';
+ context.ch = 'B';
+ findexobject(context);
+ context._cmp(context.al, 114);
+ if (context.flags.z()) goto thingsonaltar;
+ context._cmp(context.data.byte(47), 1);
+ if (context.flags.z()) goto movealtar;
+ context.cx = 300;
+ context.al = 23;
+ showpuztext(context);
+ context.data.byte(103) = 1;
+ return;
+movealtar:
+ context._add(context.data.byte(2), 1);
+ showseconduse(context);
+ context.data.word(21) = 160;
+ context.data.word(23) = 81;
+ context.data.word(25) = 174;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.al = 47;
+ context.bl = 52;
+ context.bh = 76;
+ context.cx = 32;
+ context.dx = 98;
+ setuptimeduse(context);
+ context.data.byte(103) = 1;
+ return;
+thingsonaltar:
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void opentvdoor(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto tvdoorwith;
+ withwhat(context);
+ return;
+tvdoorwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'U';
+ context.ch = 'L';
+ context.dl = 'O';
+ context.dh = 'K';
+ compare(context);
+ if (context.flags.z()) goto keyontv;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+keyontv:
+ showfirstuse(context);
+ context.data.byte(37) = 0;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usedryer(Context & context) {
+ context.al = 12;
+ playchannel1(context);
+ showfirstuse(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void openlouis(Context & context) {
+ context.al = 5;
+ context.ah = 2;
+ context.cl = 3;
+ context.ch = 8;
+ entercode(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void nextcolon(Context & context) {
+lookcolon:
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.al, ':');
+ if (!context.flags.z()) goto lookcolon;
+ return;
+}
+
+static inline void openyourneighbour(Context & context) {
+ context.al = 255;
+ context.ah = 255;
+ context.cl = 255;
+ context.ch = 255;
+ entercode(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usewindow(Context & context) {
+ context._cmp(context.data.byte(475), 6);
+ if (!context.flags.z()) goto notonbalc;
+ context._add(context.data.byte(2), 1);
+ showfirstuse(context);
+ context.data.byte(188) = 29;
+ context.data.byte(103) = 1;
+ return;
+notonbalc:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usebalcony(Context & context) {
+ showfirstuse(context);
+ context.al = 6;
+ turnpathon(context);
+ context.al = 0;
+ turnpathoff(context);
+ context.al = 1;
+ turnpathoff(context);
+ context.al = 2;
+ turnpathoff(context);
+ context.al = 3;
+ turnpathoff(context);
+ context.al = 4;
+ turnpathoff(context);
+ context.al = 5;
+ turnpathoff(context);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(475) = 6;
+ context.data.byte(478) = 6;
+ context.data.byte(477) = 6;
+ findxyfrompath(context);
+ switchryanoff(context);
+ context.data.byte(187) = 1;
+ context.data.word(21) = 30*2;
+ context.data.word(23) = 183;
+ context.data.word(25) = 212;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void openryan(Context & context) {
+ context.al = 5;
+ context.ah = 1;
+ context.cl = 0;
+ context.ch = 6;
+ entercode(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void openpoolboss(Context & context) {
+ context.al = 5;
+ context.ah = 2;
+ context.cl = 2;
+ context.ch = 2;
+ entercode(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void openeden(Context & context) {
+ context.al = 2;
+ context.ah = 8;
+ context.cl = 6;
+ context.ch = 5;
+ entercode(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void opensarters(Context & context) {
+ context.al = 7;
+ context.ah = 8;
+ context.cl = 3;
+ context.ch = 3;
+ entercode(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void isitright(Context & context) {
+ context.bx = context.ds;
+ context.es = context.bx;
+ context.bx = 8350;
+ context._cmp(context.data.byte(context.bx+0), context.al);
+ if (!context.flags.z()) goto notright;
+ context._cmp(context.data.byte(context.bx+1), context.ah);
+ if (!context.flags.z()) goto notright;
+ context._cmp(context.data.byte(context.bx+2), context.cl);
+ if (!context.flags.z()) goto notright;
+ context._cmp(context.data.byte(context.bx+3), context.ch);
+notright:
+ return;
+}
+
+static inline void drawitall(Context & context) {
+ createpanel(context);
+ drawfloor(context);
+ printsprites(context);
+ showicon(context);
+ return;
+}
+
+static inline void openhoteldoor(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto hoteldoorwith;
+ withwhat(context);
+ return;
+hoteldoorwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'K';
+ context.ch = 'E';
+ context.dl = 'Y';
+ context.dh = 'A';
+ compare(context);
+ if (context.flags.z()) goto keyonhotel1;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+keyonhotel1:
+ context.al = 16;
+ playchannel1(context);
+ showfirstuse(context);
+ context.data.byte(37) = 0;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void openhoteldoor2(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto hoteldoorwith2;
+ withwhat(context);
+ return;
+hoteldoorwith2:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'K';
+ context.ch = 'E';
+ context.dl = 'Y';
+ context.dh = 'A';
+ compare(context);
+ if (context.flags.z()) goto keyonhotel2;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+keyonhotel2:
+ context.al = 16;
+ playchannel1(context);
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void grafittidoor(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto grafwith;
+ withwhat(context);
+ return;
+grafwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'A';
+ context.ch = 'P';
+ context.dl = 'E';
+ context.dh = 'N';
+ compare(context);
+ if (context.flags.z()) goto dograf;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+dograf:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void trapdoor(Context & context) {
+ context._add(context.data.byte(2), 1);
+ showfirstuse(context);
+ switchryanoff(context);
+ context.data.word(21) = 20*2;
+ context.data.word(23) = 181;
+ context.data.word(25) = 197;
+ context.data.byte(188) = 26;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void callhotellift(Context & context) {
+ context.al = 12;
+ playchannel1(context);
+ showfirstuse(context);
+ context.data.byte(39) = 8;
+ context.data.byte(103) = 1;
+ context.data.byte(478) = 5;
+ context.data.byte(477) = 5;
+ autosetwalk(context);
+ context.al = 4;
+ turnpathon(context);
+ return;
+}
+
+static inline void calledenslift(Context & context) {
+ showfirstuse(context);
+ context.data.byte(39) = 8;
+ context.data.byte(103) = 1;
+ context.al = 2;
+ turnpathon(context);
+ return;
+}
+
+static inline void calledensdlift(Context & context) {
+ context._cmp(context.data.byte(35), 1);
+ if (context.flags.z()) goto edensdhere;
+ showfirstuse(context);
+ context.data.byte(39) = 8;
+ context.data.byte(103) = 1;
+ context.al = 2;
+ turnpathon(context);
+ return;
+edensdhere:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usepoolreader(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto poolwith;
+ withwhat(context);
+ return;
+poolwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'M';
+ context.ch = 'E';
+ context.dl = 'M';
+ context.dh = 'B';
+ compare(context);
+ if (context.flags.z()) goto openpool;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+openpool:
+ context._cmp(context.data.byte(48), 1);
+ if (context.flags.z()) goto canopenpool;
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+canopenpool:
+ context.al = 17;
+ playchannel1(context);
+ showfirstuse(context);
+ context.data.byte(39) = 6;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void uselighter(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotlighterwith;
+ withwhat(context);
+ return;
+gotlighterwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'S';
+ context.ch = 'M';
+ context.dl = 'K';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto cigarette;
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+cigarette:
+ context.cx = 300;
+ context.al = 9;
+ showpuztext(context);
+ context.al = context.data.byte(95);
+ getexad(context);
+ context.data.byte(context.bx+2) = 255;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void showseconduse(Context & context) {
+ getobtextstart(context);
+ nextcolon(context);
+ nextcolon(context);
+ nextcolon(context);
+ usetext(context);
+ context.cx = 400;
+ hangonp(context);
+ return;
+}
+
+static inline void usecardreader1(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotreader1with;
+ withwhat(context);
+ return;
+gotreader1with:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'S';
+ context.dl = 'H';
+ context.dh = 'R';
+ compare(context);
+ if (context.flags.z()) goto correctcard;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+correctcard:
+ context._cmp(context.data.byte(49), 0);
+ if (context.flags.z()) goto notyet;
+ context._cmp(context.data.word(16), 0);
+ if (context.flags.z()) goto getscash;
+ context.cx = 300;
+ context.al = 17;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+getscash:
+ context.al = 16;
+ playchannel1(context);
+ context.cx = 300;
+ context.al = 18;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ context.data.word(16) = 12432;
+ context.data.byte(103) = 1;
+ return;
+notyet:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usecardreader2(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotreader2with;
+ withwhat(context);
+ return;
+gotreader2with:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'S';
+ context.dl = 'H';
+ context.dh = 'R';
+ compare(context);
+ if (context.flags.z()) goto correctcard2;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+correctcard2:
+ context._cmp(context.data.byte(50), 0);
+ if (context.flags.z()) goto notyetboss;
+ context._cmp(context.data.word(16), 0);
+ if (context.flags.z()) goto nocash;
+ context._cmp(context.data.byte(46), 2);
+ if (context.flags.z()) goto alreadygotnew;
+ context.al = 18;
+ playchannel1(context);
+ context.cx = 300;
+ context.al = 19;
+ showpuztext(context);
+ context.al = 94;
+ placesetobject(context);
+ context.data.byte(46) = 1;
+ context._sub(context.data.word(16), 2000);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(103) = 1;
+ return;
+nocash:
+ context.cx = 300;
+ context.al = 20;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+alreadygotnew:
+ context.cx = 300;
+ context.al = 22;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+notyetboss:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usecardreader3(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotreader3with;
+ withwhat(context);
+ return;
+gotreader3with:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'S';
+ context.dl = 'H';
+ context.dh = 'R';
+ compare(context);
+ if (context.flags.z()) goto rightcard;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+rightcard:
+ context._cmp(context.data.byte(51), 0);
+ if (context.flags.z()) goto notyetrecep;
+ context._cmp(context.data.byte(52), 0);
+ if (!context.flags.z()) goto alreadyusedit;
+ context.al = 16;
+ playchannel1(context);
+ context.cx = 300;
+ context.al = 25;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ context._sub(context.data.word(16), 8300);
+ context.data.byte(52) = 1;
+ context.data.byte(103) = 1;
+ return;
+alreadyusedit:
+ context.cx = 300;
+ context.al = 26;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+notyetrecep:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usecashcard(Context & context) {
+ getridofreels(context);
+ loadkeypad(context);
+ createpanel(context);
+ showpanel(context);
+ showexit(context);
+ showman(context);
+ context.di = 114;
+ context.bx = 120-3;
+ context.ds = context.data.word(458);
+ context.al = 39;
+ context.ah = 0;
+ showframe(context);
+ context.ax = context.data.word(16);
+ moneypoke(context);
+ getobtextstart(context);
+ nextcolon(context);
+ nextcolon(context);
+ context.di = 36;
+ context.bx = 98;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.di = 160;
+ context.bx = 155;
+ context.es = context.cs;
+ context.si = 3385;
+ context.data.word(71) = 91*2+75;
+ context.al = 0;
+ context.ah = 0;
+ context.dl = 240;
+ printdirect(context);
+ context.di = 187;
+ context.bx = 155;
+ context.es = context.cs;
+ context.si = 3390;
+ context.data.word(71) = 91*2+85;
+ context.al = 0;
+ context.ah = 0;
+ context.dl = 240;
+ printdirect(context);
+ context.data.word(71) = 0;
+ worktoscreenm(context);
+ context.cx = 400;
+ hangonp(context);
+ getridoftemp(context);
+ restorereels(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void moneypoke(Context & context) {
+ context.bx = 3385;
+ context.cl = 48-1;
+numberpoke0:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 10000);
+ if (!context.flags.c()) goto numberpoke0;
+ context._add(context.ax, 10000);
+ context.data.byte(context.bx) = context.cl;
+ context._add(context.bx, 1);
+ context.cl = 48-1;
+numberpoke1:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 1000);
+ if (!context.flags.c()) goto numberpoke1;
+ context._add(context.ax, 1000);
+ context.data.byte(context.bx) = context.cl;
+ context._add(context.bx, 1);
+ context.cl = 48-1;
+numberpoke2:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 100);
+ if (!context.flags.c()) goto numberpoke2;
+ context._add(context.ax, 100);
+ context.data.byte(context.bx) = context.cl;
+ context._add(context.bx, 1);
+ context.cl = 48-1;
+numberpoke3:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 10);
+ if (!context.flags.c()) goto numberpoke3;
+ context._add(context.ax, 10);
+ context.data.byte(context.bx) = context.cl;
+ context.bx = 3390;
+ context._add(context.al, 48);
+ context.data.byte(context.bx) = context.al;
+ return;
+}
+
+static inline void usecontrol(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotcontrolwith;
+ withwhat(context);
+ return;
+gotcontrolwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'K';
+ context.ch = 'E';
+ context.dl = 'Y';
+ context.dh = 'A';
+ compare(context);
+ if (context.flags.z()) goto rightkey;
+ context._cmp(context.data.byte(184), 21);
+ if (!context.flags.z()) goto balls;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'K';
+ context.ch = 'N';
+ context.dl = 'F';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto jimmycontrols;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'A';
+ context.ch = 'X';
+ context.dl = 'E';
+ context.dh = 'D';
+ compare(context);
+ if (context.flags.z()) goto axeoncontrols;
+balls:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+rightkey:
+ context.al = 16;
+ playchannel1(context);
+ context._cmp(context.data.byte(9), 21);
+ if (context.flags.z()) goto goingdown;
+ context.cx = 300;
+ context.al = 0;
+ showpuztext(context);
+ context.data.byte(188) = 21;
+ context.data.byte(40) = 8;
+ context.data.byte(39) = 0;
+ context.data.word(21) = 80;
+ context.data.byte(103) = 1;
+ return;
+goingdown:
+ context.cx = 300;
+ context.al = 3;
+ showpuztext(context);
+ context.data.byte(188) = 30;
+ context.data.byte(40) = 8;
+ context.data.byte(39) = 0;
+ context.data.word(21) = 80;
+ context.data.byte(103) = 1;
+ return;
+jimmycontrols:
+ context.al = 50;
+ placesetobject(context);
+ context.al = 51;
+ placesetobject(context);
+ context.al = 26;
+ placesetobject(context);
+ context.al = 30;
+ placesetobject(context);
+ context.al = 16;
+ removesetobject(context);
+ context.al = 17;
+ removesetobject(context);
+ context.al = 14;
+ playchannel1(context);
+ context.cx = 300;
+ context.al = 10;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(103) = 1;
+ return;
+axeoncontrols:
+ context.cx = 300;
+ context.al = 16;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usehatch(Context & context) {
+ showfirstuse(context);
+ context.data.byte(188) = 40;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usewire(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotwirewith;
+ withwhat(context);
+ return;
+gotwirewith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'K';
+ context.ch = 'N';
+ context.dl = 'F';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto wireknife;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'A';
+ context.ch = 'X';
+ context.dl = 'E';
+ context.dh = 'D';
+ compare(context);
+ if (context.flags.z()) goto wireaxe;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+wireaxe:
+ context.cx = 300;
+ context.al = 16;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+wireknife:
+ context.al = 51;
+ removesetobject(context);
+ context.al = 52;
+ placesetobject(context);
+ context.cx = 300;
+ context.al = 11;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usehandle(Context & context) {
+ context.al = 'C';
+ context.ah = 'U';
+ context.cl = 'T';
+ context.ch = 'W';
+ findsetobject(context);
+ context.al = context.data.byte(context.bx+58);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto havecutwire;
+ context.cx = 300;
+ context.al = 12;
+ showpuztext(context);
+ context.data.byte(103) = 1;
+ return;
+havecutwire:
+ context.cx = 300;
+ context.al = 13;
+ showpuztext(context);
+ context.data.byte(188) = 22;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useelevator1(Context & context) {
+ showfirstuse(context);
+ selectlocation(context);
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void showfirstuse(Context & context) {
+ getobtextstart(context);
+ findnextcolon(context);
+ findnextcolon(context);
+ usetext(context);
+ context.cx = 400;
+ hangonp(context);
+ return;
+}
+
+static inline void useelevator3(Context & context) {
+ showfirstuse(context);
+ context.data.byte(40) = 20;
+ context.data.byte(188) = 34;
+ context.data.word(23) = 46;
+ context.data.word(25) = 63;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.word(21) = 80;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useelevator4(Context & context) {
+ showfirstuse(context);
+ context.data.word(23) = 0;
+ context.data.word(25) = 11;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(40) = 20;
+ context.data.word(21) = 80;
+ context.data.byte(103) = 1;
+ context.data.byte(188) = 24;
+ return;
+}
+
+static inline void useelevator2(Context & context) {
+ context._cmp(context.data.byte(9), 23);
+ if (context.flags.z()) goto inpoolhall;
+ showfirstuse(context);
+ context.data.byte(188) = 23;
+ context.data.byte(40) = 20;
+ context.data.byte(39) = 0;
+ context.data.word(21) = 80;
+ context.data.byte(103) = 1;
+ return;
+inpoolhall:
+ showfirstuse(context);
+ context.data.byte(188) = 31;
+ context.data.byte(40) = 20;
+ context.data.byte(39) = 0;
+ context.data.word(21) = 80;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void useelevator5(Context & context) {
+ context.al = 4;
+ placesetobject(context);
+ context.al = 0;
+ removesetobject(context);
+ context.data.byte(188) = 20;
+ context.data.word(21) = 80;
+ context.data.byte(35) = 1;
+ context.data.byte(40) = 8;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usekey(Context & context) {
+ context._cmp(context.data.byte(9), 5);
+ if (context.flags.z()) goto usekey1;
+ context._cmp(context.data.byte(9), 30);
+ if (context.flags.z()) goto usekey1;
+ context._cmp(context.data.byte(9), 21);
+ if (context.flags.z()) goto usekey2;
+ context.cx = 200;
+ context.al = 1;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+usekey1:
+ context._cmp(context.data.byte(148), 22);
+ if (!context.flags.z()) goto wrongroom1;
+ context._cmp(context.data.byte(149), 10);
+ if (!context.flags.z()) goto wrongroom1;
+ context.cx = 300;
+ context.al = 0;
+ showpuztext(context);
+ context.data.byte(40) = 100;
+ context.data.byte(103) = 1;
+ return;
+usekey2:
+ context._cmp(context.data.byte(148), 11);
+ if (!context.flags.z()) goto wrongroom1;
+ context._cmp(context.data.byte(149), 10);
+ if (!context.flags.z()) goto wrongroom1;
+ context.cx = 300;
+ context.al = 3;
+ showpuztext(context);
+ context.data.byte(188) = 30;
+ context.al = 2;
+ fadescreendown(context);
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+wrongroom1:
+ context.cx = 200;
+ context.al = 2;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usestereo(Context & context) {
+ context._cmp(context.data.byte(9), 0);
+ if (context.flags.z()) goto stereook;
+ context.cx = 400;
+ context.al = 4;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+stereook:
+ context._cmp(context.data.byte(148), 11);
+ if (!context.flags.z()) goto stereonotok;
+ context._cmp(context.data.byte(149), 0);
+ if (context.flags.z()) goto stereook2;
+stereonotok:
+ context.cx = 400;
+ context.al = 5;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+stereook2:
+ context.al = 'C';
+ context.ah = 'D';
+ context.cl = 'P';
+ context.ch = 'L';
+ findsetobject(context);
+ context.ah = 1;
+ checkinside(context);
+ context._cmp(context.cl, 114);
+ if (!context.flags.z()) goto cdinside;
+ context.al = 6;
+ context.cx = 400;
+ showpuztext(context);
+ putbackobstuff(context);
+ getanyad(context);
+ context.al = 255;
+ context.data.byte(context.bx+10) = context.al;
+ return;
+cdinside:
+ getanyad(context);
+ context.al = context.data.byte(context.bx+10);
+ context._xor(context.al, 1);
+ context.data.byte(context.bx+10) = context.al;
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto stereoon;
+ context.al = 7;
+ context.cx = 400;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+stereoon:
+ context.al = 8;
+ context.cx = 400;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usecooker(Context & context) {
+ context.al = context.data.byte(99);
+ context.ah = context.data.byte(102);
+ checkinside(context);
+ context._cmp(context.cl, 114);
+ if (!context.flags.z()) goto foodinside;
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+foodinside:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void useaxe(Context & context) {
+ context._cmp(context.data.byte(184), 22);
+ if (!context.flags.z()) goto notinpool;
+ context._cmp(context.data.byte(149), 10);
+ if (context.flags.z()) goto axeondoor;
+ showseconduse(context);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(65) = 2;
+ context.data.byte(103) = 1;
+ removeobfrominv(context);
+ return;
+notinpool:
+ showfirstuse(context);
+ return;
+/*continuing to unbounded code: axeondoor from useelvdoor:19-30*/
+axeondoor:
+ context.al = 15;
+ context.cx = 300;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 46*2;
+ context.data.word(23) = 31;
+ context.data.word(25) = 77;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+ return;
+}
+
+static inline void useelvdoor(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gotdoorwith;
+ withwhat(context);
+ return;
+gotdoorwith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'A';
+ context.ch = 'X';
+ context.dl = 'E';
+ context.dh = 'D';
+ compare(context);
+ if (context.flags.z()) goto axeondoor;
+ context.al = 14;
+ context.cx = 300;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+axeondoor:
+ context.al = 15;
+ context.cx = 300;
+ showpuztext(context);
+ context._add(context.data.byte(2), 1);
+ context.data.word(21) = 46*2;
+ context.data.word(23) = 31;
+ context.data.word(25) = 77;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void withwhat(Context & context) {
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ context.al = context.data.byte(99);
+ context.ah = context.data.byte(102);
+ context.es = context.cs;
+ context.di = 5674;
+ copyname(context);
+ context.di = 100;
+ context.bx = 21;
+ context.dl = 200;
+ context.al = 63;
+ context.ah = 2;
+ printmessage2(context);
+ context.di = context.data.word(84);
+ context._add(context.di, 5);
+ context.bx = 21;
+ context.es = context.cs;
+ context.si = 5674;
+ context.dl = 220;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.di = context.data.word(84);
+ context._add(context.di, 5);
+ context.bx = 21;
+ context.dl = 200;
+ context.al = 63;
+ context.ah = 3;
+ printmessage2(context);
+ fillryan(context);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ context.data.byte(104) = 2;
+ return;
+}
+
+static inline void selectob(Context & context) {
+ findinvpos(context);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto canselectob;
+ blank(context);
+ return;
+canselectob:
+ context.data.byte(95) = context.al;
+ context.data.byte(96) = context.ah;
+ context._cmp(context.ax, context.data.word(94));
+ if (!context.flags.z()) goto diffsub3;
+ context._cmp(context.data.byte(100), 221);
+ if (context.flags.z()) goto alreadyselob;
+ context.data.byte(100) = 221;
+diffsub3:
+ context.data.word(94) = context.ax;
+ context.bx = context.ax;
+ context.al = 0;
+ commandwithob(context);
+alreadyselob:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notselob;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doselob;
+notselob:
+ return;
+doselob:
+ delpointer(context);
+ context.data.byte(104) = 0;
+ useroutine(context);
+ return;
+}
+
+static inline void findsetobject(Context & context) {
+ context._sub(context.al, 'A');
+ context._sub(context.ah, 'A');
+ context._sub(context.cl, 'A');
+ context._sub(context.ch, 'A');
+ context.es = context.data.word(428);
+ context.bx = 0;
+ context.dl = 0;
+findsetloop:
+ context._cmp(context.al, context.data.byte(context.bx+12));
+ if (!context.flags.z()) goto nofind;
+ context._cmp(context.ah, context.data.byte(context.bx+13));
+ if (!context.flags.z()) goto nofind;
+ context._cmp(context.cl, context.data.byte(context.bx+14));
+ if (!context.flags.z()) goto nofind;
+ context._cmp(context.ch, context.data.byte(context.bx+15));
+ if (!context.flags.z()) goto nofind;
+ context.al = context.dl;
+ return;
+nofind:
+ context._add(context.bx, 64);
+ context._add(context.dl, 1);
+ context._cmp(context.dl, 128);
+ if (!context.flags.z()) goto findsetloop;
+ context.al = context.dl;
+ return;
+}
+
+static inline void checkinside(Context & context) {
+ context.es = context.data.word(398);
+ context.bx = 0+2080+30000;
+ context.cl = 0;
+insideloop:
+ context._cmp(context.al, context.data.byte(context.bx+3));
+ if (!context.flags.z()) goto notfoundinside;
+ context._cmp(context.ah, context.data.byte(context.bx+2));
+ if (!context.flags.z()) goto notfoundinside;
+ return;
+notfoundinside:
+ context._add(context.bx, 16);
+ context._add(context.cl, 1);
+ context._cmp(context.cl, 114);
+ if (!context.flags.z()) goto insideloop;
+ return;
+}
+
+static inline void usetext(Context & context) {
+ context.push(context.es);
+ context.push(context.si);
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ obicons(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.di = 36;
+ context.bx = 104;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void showpuztext(Context & context) {
+ context.push(context.cx);
+ findpuztext(context);
+ context.push(context.es);
+ context.push(context.si);
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ obicons(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.di = 36;
+ context.bx = 104;
+ context.dl = 241;
+ context.ah = 0;
+ printdirect(context);
+ worktoscreenm(context);
+ context.cx = context.pop();
+ hangonp(context);
+ return;
+}
+
+static inline void issetobonmap(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ getsetad(context);
+ context.al = context.data.byte(context.bx+58);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.al, 0);
+ return;
+}
+
+static inline void setuptimedtemp(Context & context) {
+ context._cmp(context.data.word(328), 0);
+ if (!context.flags.z()) goto cantsetup2;
+ context.data.byte(335) = context.bh;
+ context.data.byte(336) = context.bl;
+ context.data.word(330) = context.cx;
+ context._add(context.dx, context.cx);
+ context.data.word(328) = context.dx;
+ context.bl = context.al;
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(466);
+ context.cx = 66*2;
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, context.cx);
+ context.bx = context.ax;
+ context.data.word(332) = context.es;
+ context.data.word(334) = context.bx;
+cantsetup2:
+ return;
+}
+
+static inline void edenscdplayer(Context & context) {
+ showfirstuse(context);
+ context.data.word(21) = 18*2;
+ context.data.word(23) = 25;
+ context.data.word(25) = 42;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void usewall(Context & context) {
+ showfirstuse(context);
+ context._cmp(context.data.byte(475), 3);
+ if (context.flags.z()) goto gobackover;
+ context.data.word(21) = 30*2;
+ context.data.word(23) = 2;
+ context.data.word(25) = 31;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context.al = 3;
+ turnpathon(context);
+ context.al = 4;
+ turnpathon(context);
+ context.al = 0;
+ turnpathoff(context);
+ context.al = 1;
+ turnpathoff(context);
+ context.al = 2;
+ turnpathoff(context);
+ context.al = 5;
+ turnpathoff(context);
+ context.data.byte(475) = 3;
+ context.data.byte(477) = 3;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ switchryanoff(context);
+ return;
+gobackover:
+ context.data.word(21) = 30*2;
+ context.data.word(23) = 34;
+ context.data.word(25) = 60;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context.al = 3;
+ turnpathoff(context);
+ context.al = 4;
+ turnpathoff(context);
+ context.al = 0;
+ turnpathon(context);
+ context.al = 1;
+ turnpathon(context);
+ context.al = 2;
+ turnpathon(context);
+ context.al = 5;
+ turnpathon(context);
+ context.data.byte(475) = 5;
+ context.data.byte(477) = 5;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ switchryanoff(context);
+ return;
+}
+
+static inline void usechurchgate(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto gatewith;
+ withwhat(context);
+ return;
+gatewith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'T';
+ context.dh = 'T';
+ compare(context);
+ if (context.flags.z()) goto cutgate;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+cutgate:
+ showfirstuse(context);
+ context.data.word(21) = 64*2;
+ context.data.word(23) = 4;
+ context.data.word(25) = 70;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ context.al = 3;
+ turnpathon(context);
+ context._cmp(context.data.byte(44), 0);
+ if (context.flags.z()) goto notopenchurch;
+ context.al = 2;
+ turnpathon(context);
+notopenchurch:
+ return;
+}
+
+static inline void usegun(Context & context) {
+ context._cmp(context.data.byte(102), 4);
+ if (context.flags.z()) goto istakengun;
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+istakengun:
+ context._cmp(context.data.byte(184), 22);
+ if (!context.flags.z()) goto notinpoolroom;
+ context.cx = 300;
+ context.al = 34;
+ showpuztext(context);
+ context.data.byte(65) = 1;
+ context.data.byte(64) = 39;
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ return;
+notinpoolroom:
+ context._cmp(context.data.byte(184), 25);
+ if (!context.flags.z()) goto nothelicopter;
+ context.cx = 300;
+ context.al = 34;
+ showpuztext(context);
+ context.data.byte(65) = 1;
+ context.data.byte(64) = 19;
+ context.data.byte(103) = 1;
+ context.data.byte(66) = 2;
+ context.data.byte(67) = 38;
+ context.data.byte(43) = 1;
+ context._add(context.data.byte(2), 1);
+ return;
+nothelicopter:
+ context._cmp(context.data.byte(184), 27);
+ if (!context.flags.z()) goto notinrockroom;
+ context.cx = 300;
+ context.al = 46;
+ showpuztext(context);
+ context.data.byte(234) = 2;
+ context.data.byte(41) = 1;
+ context.data.byte(65) = 1;
+ context.data.byte(34) = 1;
+ context.data.byte(103) = 1;
+ context.data.byte(67) = 32;
+ context.data.byte(66) = 0;
+ context._add(context.data.byte(2), 1);
+ return;
+notinrockroom:
+ context._cmp(context.data.byte(184), 8);
+ if (!context.flags.z()) goto notbystudio;
+ context._cmp(context.data.byte(148), 22);
+ if (!context.flags.z()) goto notbystudio;
+ context._cmp(context.data.byte(149), 40);
+ if (!context.flags.z()) goto notbystudio;
+ context.al = 92;
+ issetobonmap(context);
+ if (context.flags.z()) goto notbystudio;
+ context._cmp(context.data.byte(475), 9);
+ if (context.flags.z()) goto notbystudio;
+ context.data.byte(478) = 9;
+ context.data.byte(477) = 9;
+ autosetwalk(context);
+ context.data.byte(65) = 1;
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ return;
+notbystudio:
+ context._cmp(context.data.byte(184), 6);
+ if (!context.flags.z()) goto notsarters;
+ context._cmp(context.data.byte(148), 11);
+ if (!context.flags.z()) goto notsarters;
+ context._cmp(context.data.byte(149), 20);
+ if (!context.flags.z()) goto notsarters;
+ context.al = 5;
+ issetobonmap(context);
+ if (!context.flags.z()) goto notsarters;
+ context.data.byte(478) = 1;
+ context.data.byte(477) = 1;
+ autosetwalk(context);
+ context.al = 5;
+ removesetobject(context);
+ context.al = 6;
+ placesetobject(context);
+ context.al = 1;
+ context.ah = context.data.byte(185);
+ context._sub(context.ah, 1);
+ turnanypathon(context);
+ context.data.byte(35) = 1;
+ context.data.word(21) = 40*2;
+ context.data.word(23) = 4;
+ context.data.word(25) = 43;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ return;
+notsarters:
+ context._cmp(context.data.byte(184), 29);
+ if (!context.flags.z()) goto notaide;
+ context.data.byte(103) = 1;
+ context.al = 13;
+ resetlocation(context);
+ context.al = 12;
+ setlocation(context);
+ context.data.byte(183) = 12;
+ context.data.byte(478) = 2;
+ context.data.byte(477) = 2;
+ autosetwalk(context);
+ context.data.word(21) = 164*2;
+ context.data.word(23) = 3;
+ context.data.word(25) = 164;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(44) = 1;
+ context.data.byte(66) = 3;
+ context.data.byte(67) = 33;
+ context._add(context.data.byte(2), 1);
+ return;
+notaide:
+ context._cmp(context.data.byte(184), 23);
+ if (!context.flags.z()) goto notwithboss;
+ context._cmp(context.data.byte(148), 0);
+ if (!context.flags.z()) goto notwithboss;
+ context._cmp(context.data.byte(149), 50);
+ if (!context.flags.z()) goto notwithboss;
+ context._cmp(context.data.byte(475), 5);
+ if (context.flags.z()) goto pathokboss;
+ context.data.byte(478) = 5;
+ context.data.byte(477) = 5;
+ autosetwalk(context);
+pathokboss:
+ context.data.byte(65) = 1;
+ context.data.byte(103) = 1;
+ return;
+notwithboss:
+ context._cmp(context.data.byte(184), 8);
+ if (!context.flags.z()) goto nottvsoldier;
+ context._cmp(context.data.byte(148), 11);
+ if (!context.flags.z()) goto nottvsoldier;
+ context._cmp(context.data.byte(149), 10);
+ if (!context.flags.z()) goto nottvsoldier;
+ context._cmp(context.data.byte(475), 2);
+ if (context.flags.z()) goto pathoktv;
+ context.data.byte(478) = 2;
+ context.data.byte(477) = 2;
+ autosetwalk(context);
+pathoktv:
+ context.data.byte(65) = 1;
+ context.data.byte(103) = 1;
+ return;
+nottvsoldier:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void useshield(Context & context) {
+ context._cmp(context.data.byte(184), 20);
+ if (!context.flags.z()) goto notinsartroom;
+ context._cmp(context.data.byte(64), 0);
+ if (context.flags.z()) goto notinsartroom;
+ context.data.byte(65) = 3;
+ showseconduse(context);
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ removeobfrominv(context);
+ return;
+notinsartroom:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usebuttona(Context & context) {
+ context.al = 95;
+ issetobonmap(context);
+ if (context.flags.z()) goto donethisbit;
+ showfirstuse(context);
+ context.al = 0;
+ context.ah = context.data.byte(185);
+ context._sub(context.ah, 1);
+ turnanypathon(context);
+ context.al = 9;
+ removesetobject(context);
+ context.al = 95;
+ placesetobject(context);
+ context.data.word(21) = 15*2;
+ context.data.word(23) = 71;
+ context.data.word(25) = 85;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ return;
+donethisbit:
+ showseconduse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void useplate(Context & context) {
+ context._cmp(context.data.byte(95), 255);
+ if (!context.flags.z()) goto platewith;
+ withwhat(context);
+ return;
+platewith:
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'S';
+ context.ch = 'C';
+ context.dl = 'R';
+ context.dh = 'W';
+ compare(context);
+ if (context.flags.z()) goto unscrewplate;
+ context.al = context.data.byte(95);
+ context.ah = context.data.byte(96);
+ context.cl = 'K';
+ context.ch = 'N';
+ context.dl = 'F';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto triedknife;
+ context.cx = 300;
+ context.al = 14;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+unscrewplate:
+ context.al = 20;
+ playchannel1(context);
+ showfirstuse(context);
+ context.al = 28;
+ placesetobject(context);
+ context.al = 24;
+ placesetobject(context);
+ context.al = 25;
+ removesetobject(context);
+ context.al = 0;
+ placefreeobject(context);
+ context._add(context.data.byte(2), 1);
+ context.data.byte(103) = 1;
+ return;
+triedknife:
+ context.cx = 300;
+ context.al = 54;
+ showpuztext(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void usewinch(Context & context) {
+ context.al = 40;
+ context.ah = 1;
+ checkinside(context);
+ context._cmp(context.cl, 114);
+ if (context.flags.z()) goto nowinch;
+ context.al = context.cl;
+ context.ah = 4;
+ context.cl = 'F';
+ context.ch = 'U';
+ context.dl = 'S';
+ context.dh = 'E';
+ compare(context);
+ if (!context.flags.z()) goto nowinch;
+ context.data.word(21) = 217*2;
+ context.data.word(23) = 0;
+ context.data.word(25) = 217;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ context.data.byte(183) = 1;
+ context.data.byte(188) = 45;
+ context.data.byte(66) = 1;
+ context.data.byte(67) = 44;
+ context.data.byte(42) = 1;
+ context.data.byte(34) = 2;
+ context.data.byte(103) = 1;
+ context._add(context.data.byte(2), 1);
+ return;
+nowinch:
+ showfirstuse(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void entercode(Context & context) {
+ context.data.word(284) = context.ax;
+ context.data.word(286) = context.cx;
+ getridofreels(context);
+ loadkeypad(context);
+ createpanel(context);
+ showicon(context);
+ showouterpad(context);
+ showkeypad(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ context.data.word(280) = 0;
+ context.data.byte(103) = 0;
+keypadloop:
+ delpointer(context);
+ readmouse(context);
+ showkeypad(context);
+ showpointer(context);
+ context._cmp(context.data.byte(282), 0);
+ if (context.flags.z()) goto nopresses;
+ context._sub(context.data.byte(282), 1);
+ goto afterpress;
+nopresses:
+ context.data.byte(278) = 255;
+ context.data.byte(281) = 255;
+ vsync(context);
+afterpress:
+ dumppointer(context);
+ dumpkeypad(context);
+ dumptextline(context);
+ context.bx = 3393;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 1);
+ if (context.flags.z()) goto numberright;
+ context._cmp(context.data.byte(287), 1);
+ if (!context.flags.z()) goto notendkey;
+ context._cmp(context.data.byte(37), 0);
+ if (context.flags.z()) goto numberright;
+ goto keypadloop;
+notendkey:
+ context._cmp(context.data.byte(282), 40);
+ if (!context.flags.z()) goto keypadloop;
+ addtopresslist(context);
+ context._cmp(context.data.byte(278), 11);
+ if (!context.flags.z()) goto keypadloop;
+ context.ax = context.data.word(284);
+ context.cx = context.data.word(286);
+ isitright(context);
+ if (!context.flags.z()) goto incorrect;
+ context.data.byte(37) = 0;
+ context.al = 11;
+ playchannel1(context);
+ context.data.byte(287) = 120;
+ context.data.word(280) = 0;
+ goto keypadloop;
+incorrect:
+ context.al = 11;
+ playchannel1(context);
+ context.data.byte(287) = 120;
+ context.data.word(280) = 0;
+ goto keypadloop;
+numberright:
+ context.data.byte(131) = 0;
+ getridoftemp(context);
+ restorereels(context);
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void quitkey(Context & context) {
+ context._cmp(context.data.byte(100), 222);
+ if (context.flags.z()) goto alreadyqk;
+ context.data.byte(100) = 222;
+ context.al = 4;
+ commandonly(context);
+alreadyqk:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notqk;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doqk;
+notqk:
+ return;
+doqk:
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void addtopresslist(Context & context) {
+ context._cmp(context.data.word(280), 5);
+ if (context.flags.z()) goto nomorekeys;
+ context.al = context.data.byte(278);
+ context._cmp(context.al, 10);
+ if (!context.flags.z()) goto not10;
+ context.al = 0;
+not10:
+ context.bx = context.data.word(280);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context._add(context.bx, 8350);
+ context.data.byte(context.bx) = context.al;
+ context._add(context.data.word(280), 1);
+nomorekeys:
+ return;
+}
+
+static inline void buttonone(Context & context) {
+ context.cl = 1;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttontwo(Context & context) {
+ context.cl = 2;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonthree(Context & context) {
+ context.cl = 3;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonfour(Context & context) {
+ context.cl = 4;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonfive(Context & context) {
+ context.cl = 5;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonsix(Context & context) {
+ context.cl = 6;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonseven(Context & context) {
+ context.cl = 7;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttoneight(Context & context) {
+ context.cl = 8;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonnine(Context & context) {
+ context.cl = 9;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonnought(Context & context) {
+ context.cl = 10;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonenter(Context & context) {
+ context.cl = 11;
+ buttonpress(context);
+ return;
+}
+
+static inline void buttonpress(Context & context) {
+ context.ch = context.cl;
+ context._add(context.ch, 100);
+ context._cmp(context.data.byte(100), context.ch);
+ if (context.flags.z()) goto alreadyb;
+ context.data.byte(100) = context.ch;
+ context.al = context.cl;
+ context._add(context.al, 4);
+ context.push(context.cx);
+ commandonly(context);
+ context.cx = context.pop();
+alreadyb:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notb;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dob;
+notb:
+ return;
+dob:
+ context.data.byte(278) = context.cl;
+ context._add(context.cl, 21);
+ context.data.byte(281) = context.cl;
+ context.data.byte(282) = 40;
+ context._cmp(context.cl, 32);
+ if (context.flags.z()) goto nonoise;
+ context.al = 10;
+ playchannel1(context);
+nonoise:
+ return;
+}
+
+static inline void showouterpad(Context & context) {
+ context.di = 36+112-3;
+ context.bx = 72-4;
+ context.ds = context.data.word(458);
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.di = 36+112+74;
+ context.bx = 72+76;
+ context.ds = context.data.word(458);
+ context.al = 37;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void showkeypad(Context & context) {
+ context.al = 22;
+ context.di = 36+112+9;
+ context.bx = 72+5;
+ singlekey(context);
+ context.al = 23;
+ context.di = 36+112+31;
+ context.bx = 72+5;
+ singlekey(context);
+ context.al = 24;
+ context.di = 36+112+53;
+ context.bx = 72+5;
+ singlekey(context);
+ context.al = 25;
+ context.di = 36+112+9;
+ context.bx = 72+23;
+ singlekey(context);
+ context.al = 26;
+ context.di = 36+112+31;
+ context.bx = 72+23;
+ singlekey(context);
+ context.al = 27;
+ context.di = 36+112+53;
+ context.bx = 72+23;
+ singlekey(context);
+ context.al = 28;
+ context.di = 36+112+9;
+ context.bx = 72+41;
+ singlekey(context);
+ context.al = 29;
+ context.di = 36+112+31;
+ context.bx = 72+41;
+ singlekey(context);
+ context.al = 30;
+ context.di = 36+112+53;
+ context.bx = 72+41;
+ singlekey(context);
+ context.al = 31;
+ context.di = 36+112+9;
+ context.bx = 72+59;
+ singlekey(context);
+ context.al = 32;
+ context.di = 36+112+31;
+ context.bx = 72+59;
+ singlekey(context);
+ context._cmp(context.data.byte(287), 0);
+ if (context.flags.z()) goto notenter;
+ context._sub(context.data.byte(287), 1);
+ context.al = 36;
+ context.bx = 72-1+63;
+ context._cmp(context.data.byte(37), 0);
+ if (!context.flags.z()) goto changelight;
+ context.al = 41;
+ context.bx = 72+4+63;
+changelight:
+ context._cmp(context.data.byte(287), 60);
+ if (context.flags.c()) goto gotlight;
+ context._cmp(context.data.byte(287), 100);
+ if (!context.flags.c()) goto gotlight;
+ context._sub(context.al, 1);
+gotlight:
+ context.ds = context.data.word(458);
+ context.ah = 0;
+ context.di = 36+112+60;
+ showframe(context);
+notenter:
+ return;
+}
+
+static inline void singlekey(Context & context) {
+ context._cmp(context.data.byte(281), context.al);
+ if (!context.flags.z()) goto gotkey;
+ context._add(context.al, 11);
+ context._cmp(context.data.byte(282), 8);
+ if (!context.flags.c()) goto gotkey;
+ context._sub(context.al, 11);
+gotkey:
+ context.ds = context.data.word(458);
+ context._sub(context.al, 20);
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void dumpkeypad(Context & context) {
+ context.di = 36+112-3;
+ context.bx = 72-4;
+ context.cl = 120;
+ context.ch = 90;
+ multidump(context);
+ return;
+}
+
+static inline void usemenu(Context & context) {
+ getridofreels(context);
+ loadmenu(context);
+ createpanel(context);
+ showpanel(context);
+ showicon(context);
+ context.data.byte(62) = 0;
+ drawfloor(context);
+ printsprites(context);
+ context.al = 4;
+ context.ah = 0;
+ context.di = 80+40-48;
+ context.bx = 60-4;
+ context.ds = context.data.word(460);
+ showframe(context);
+ getundermenu(context);
+ context.al = 5;
+ context.ah = 0;
+ context.di = 80+40+54;
+ context.bx = 60+72;
+ context.ds = context.data.word(460);
+ showframe(context);
+ worktoscreenm(context);
+ context.data.byte(103) = 0;
+menuloop:
+ delpointer(context);
+ putundermenu(context);
+ showmenu(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumpmenu(context);
+ dumptextline(context);
+ context.bx = 3525;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 1);
+ if (!context.flags.z()) goto menuloop;
+ context.data.byte(131) = 0;
+ redrawmainscrn(context);
+ getridoftemp(context);
+ getridoftemp2(context);
+ restorereels(context);
+ worktoscreenm(context);
+ return;
+menulist:
+ return;
+}
+
+static inline void dumpmenu(Context & context) {
+ context.di = 80+40;
+ context.bx = 60;
+ context.cl = 48;
+ context.ch = 48;
+ multidump(context);
+ return;
+}
+
+static inline void getundermenu(Context & context) {
+ context.di = 80+40;
+ context.bx = 60;
+ context.cl = 48;
+ context.ch = 48;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4);
+ multiget(context);
+ return;
+}
+
+static inline void putundermenu(Context & context) {
+ context.di = 80+40;
+ context.bx = 60;
+ context.cl = 48;
+ context.ch = 48;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4);
+ multiput(context);
+ return;
+}
+
+static inline void showoutermenu(Context & context) {
+ context.al = 40;
+ context.ah = 0;
+ context.di = 80+40-34;
+ context.bx = 60-40;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context.al = 41;
+ context.ah = 0;
+ context.di = 80+40+64-34;
+ context.bx = 60-40;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context.al = 42;
+ context.ah = 0;
+ context.di = 80+40-26;
+ context.bx = 60+57-40;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context.al = 43;
+ context.ah = 0;
+ context.di = 80+40+64-26;
+ context.bx = 60+57-40;
+ context.ds = context.data.word(458);
+ showframe(context);
+ return;
+}
+
+static inline void showmenu(Context & context) {
+ context._add(context.data.byte(290), 1);
+ context._cmp(context.data.byte(290), 37*2);
+ if (!context.flags.z()) goto menuframeok;
+ context.data.byte(290) = 0;
+menuframeok:
+ context.al = context.data.byte(290);
+ context._shr(context.al, 1);
+ context.ah = 0;
+ context.di = 80+40;
+ context.bx = 60;
+ context.ds = context.data.word(458);
+ showframe(context);
+ return;
+}
+
+static inline void loadmenu(Context & context) {
+ context.dx = 1845;
+ loadintotemp(context);
+ context.dx = 2000;
+ loadintotemp2(context);
+ return;
+}
+
+static inline void viewfolder(Context & context) {
+ context.data.byte(131) = 1;
+ getridofall(context);
+ loadfolder(context);
+ context.data.byte(288) = 0;
+ showfolder(context);
+ worktoscreenm(context);
+ context.data.byte(103) = 0;
+folderloop:
+ delpointer(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.bx = 3547;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto folderloop;
+ context.data.byte(131) = 0;
+ getridoftemp(context);
+ getridoftemp2(context);
+ getridoftemp3(context);
+ getridoftempcharset(context);
+ restoreall(context);
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void nextfolder(Context & context) {
+ context._cmp(context.data.byte(288), 12);
+ if (!context.flags.z()) goto cannextf;
+ blank(context);
+ return;
+cannextf:
+ context._cmp(context.data.byte(100), 201);
+ if (context.flags.z()) goto alreadynextf;
+ context.data.byte(100) = 201;
+ context.al = 16;
+ commandonly(context);
+alreadynextf:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notnextf;
+ context._cmp(context.ax, 1);
+ if (context.flags.z()) goto donextf;
+notnextf:
+ return;
+donextf:
+ context._add(context.data.byte(288), 1);
+ folderhints(context);
+ delpointer(context);
+ showfolder(context);
+ context.data.word(202) = 0;
+ context.bx = 3547;
+ checkcoords(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void folderhints(Context & context) {
+ context._cmp(context.data.byte(288), 5);
+ if (!context.flags.z()) goto notaideadd;
+ context._cmp(context.data.byte(44), 1);
+ if (context.flags.z()) goto notaideadd;
+ context.al = 13;
+ getlocation(context);
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto notaideadd;
+ context.al = 13;
+ setlocation(context);
+ showfolder(context);
+ context.al = 30;
+ findtext1(context);
+ context.di = 0;
+ context.bx = 86;
+ context.dl = 141;
+ context.ah = 16;
+ printdirect(context);
+ worktoscreenm(context);
+ context.cx = 200;
+ hangonp(context);
+ return;
+notaideadd:
+ context._cmp(context.data.byte(288), 9);
+ if (!context.flags.z()) goto notaristoadd;
+ context.al = 7;
+ getlocation(context);
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto notaristoadd;
+ context.al = 7;
+ setlocation(context);
+ showfolder(context);
+ context.al = 31;
+ findtext1(context);
+ context.di = 0;
+ context.bx = 86;
+ context.dl = 141;
+ context.ah = 16;
+ printdirect(context);
+ worktoscreenm(context);
+ context.cx = 200;
+ hangonp(context);
+notaristoadd:
+ return;
+}
+
+static inline void lastfolder(Context & context) {
+ context._cmp(context.data.byte(288), 0);
+ if (!context.flags.z()) goto canlastf;
+ blank(context);
+ return;
+canlastf:
+ context._cmp(context.data.byte(100), 202);
+ if (context.flags.z()) goto alreadylastf;
+ context.data.byte(100) = 202;
+ context.al = 17;
+ commandonly(context);
+alreadylastf:
+ context._cmp(context.data.byte(288), 0);
+ if (context.flags.z()) goto notlastf;
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notlastf;
+ context._cmp(context.ax, 1);
+ if (context.flags.z()) goto dolastf;
+notlastf:
+ return;
+dolastf:
+ context._sub(context.data.byte(288), 1);
+ delpointer(context);
+ showfolder(context);
+ context.data.word(202) = 0;
+ context.bx = 3547;
+ checkcoords(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void loadfolder(Context & context) {
+ context.dx = 2312;
+ loadintotemp(context);
+ context.dx = 2325;
+ loadintotemp2(context);
+ context.dx = 2338;
+ loadintotemp3(context);
+ context.dx = 1896;
+ loadtempcharset(context);
+ context.dx = 2208;
+ loadtemptext(context);
+ return;
+}
+
+static inline void showfolder(Context & context) {
+ context.data.byte(100) = 255;
+ context._cmp(context.data.byte(288), 0);
+ if (context.flags.z()) goto closedfolder;
+ usetempcharset(context);
+ createpanel2(context);
+ context.ds = context.data.word(458);
+ context.di = 0;
+ context.bx = 0;
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 143;
+ context.bx = 0;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 0;
+ context.bx = 92;
+ context.al = 2;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 143;
+ context.bx = 92;
+ context.al = 3;
+ context.ah = 0;
+ showframe(context);
+ folderexit(context);
+ context._cmp(context.data.byte(288), 1);
+ if (context.flags.z()) goto noleftpage;
+ showleftpage(context);
+noleftpage:
+ context._cmp(context.data.byte(288), 12);
+ if (context.flags.z()) goto norightpage;
+ showrightpage(context);
+norightpage:
+ usecharset1(context);
+ undertextline(context);
+ return;
+closedfolder:
+ createpanel2(context);
+ context.ds = context.data.word(462);
+ context.di = 143-28;
+ context.bx = 0;
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(462);
+ context.di = 143-28;
+ context.bx = 92;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ folderexit(context);
+ undertextline(context);
+ return;
+}
+
+static inline void folderexit(Context & context) {
+ context.ds = context.data.word(460);
+ context.di = 296;
+ context.bx = 178;
+ context.al = 6;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void showleftpage(Context & context) {
+ context.ds = context.data.word(460);
+ context.di = 0;
+ context.bx = 12;
+ context.al = 3;
+ context.ah = 0;
+ showframe(context);
+ context.bx = 12+5;
+ context.cx = 9;
+leftpageloop:
+ context.push(context.cx);
+ context.push(context.bx);
+ context.ds = context.data.word(460);
+ context.di = 0;
+ context.al = 4;
+ context.ah = 0;
+ showframe(context);
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 16);
+ if (--context.cx) goto leftpageloop;
+ context.ds = context.data.word(460);
+ context.di = 0;
+ context.al = 5;
+ context.ah = 0;
+ showframe(context);
+ context.data.word(77) = 8;
+ context.data.word(71) = 91;
+ context.data.byte(72) = 1;
+ context.bl = context.data.byte(288);
+ context._sub(context.bl, 1);
+ context._sub(context.bl, 1);
+ context._add(context.bl, context.bl);
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(466);
+ context.si = context.data.word(context.bx);
+ context._add(context.si, 66*2);
+ context.di = 2;
+ context.bx = 48;
+ context.dl = 140;
+ context.cx = 2;
+twolotsleft:
+ context.push(context.cx);
+contleftpage:
+ printdirect(context);
+ context._add(context.bx, context.data.word(77));
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto contleftpage;
+ context.cx = context.pop();
+ if (--context.cx) goto twolotsleft;
+ context.data.byte(72) = 0;
+ context.data.word(71) = 0;
+ context.data.word(77) = 10;
+ context.es = context.data.word(400);
+ context.ds = context.data.word(400);
+ context.di = (48*320)+2;
+ context.si = (48*320)+2+130;
+ context.cx = 120;
+flipfolder:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.si);
+ context.cx = 65;
+flipfolderline:
+ context.al = context.data.byte(context.di);
+ context.ah = context.data.byte(context.si);
+ context.data.byte(context.di) = context.ah;
+ context.data.byte(context.si) = context.al;
+ context._sub(context.si, 1);
+ context._add(context.di, 1);
+ if (--context.cx) goto flipfolderline;
+ context.si = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 320);
+ context._add(context.di, 320);
+ if (--context.cx) goto flipfolder;
+ return;
+}
+
+static inline void showrightpage(Context & context) {
+ context.ds = context.data.word(460);
+ context.di = 143;
+ context.bx = 12;
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.bx = 12+37;
+ context.cx = 7;
+rightpageloop:
+ context.push(context.cx);
+ context.push(context.bx);
+ context.ds = context.data.word(460);
+ context.di = 143;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 16);
+ if (--context.cx) goto rightpageloop;
+ context.ds = context.data.word(460);
+ context.di = 143;
+ context.al = 2;
+ context.ah = 0;
+ showframe(context);
+ context.data.word(77) = 8;
+ context.data.byte(72) = 1;
+ context.bl = context.data.byte(288);
+ context._sub(context.bl, 1);
+ context._add(context.bl, context.bl);
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(466);
+ context.si = context.data.word(context.bx);
+ context._add(context.si, 66*2);
+ context.di = 152;
+ context.bx = 48;
+ context.dl = 140;
+ context.cx = 2;
+twolotsright:
+ context.push(context.cx);
+contrightpage:
+ printdirect(context);
+ context._add(context.bx, context.data.word(77));
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto contrightpage;
+ context.cx = context.pop();
+ if (--context.cx) goto twolotsright;
+ context.data.byte(72) = 0;
+ context.data.word(77) = 10;
+ return;
+}
+
+static inline void entersymbol(Context & context) {
+ context.data.byte(131) = 1;
+ getridofreels(context);
+ context.dx = 2351;
+ loadintotemp(context);
+ context.data.byte(291) = 24;
+ context.data.byte(293) = 0;
+ context.data.byte(294) = 24;
+ context.data.byte(296) = 0;
+ redrawmainscrn(context);
+ showsymbol(context);
+ undertextline(context);
+ worktoscreenm(context);
+ context.data.byte(103) = 0;
+symbolloop:
+ delpointer(context);
+ updatesymboltop(context);
+ updatesymbolbot(context);
+ showsymbol(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ dumpsymbol(context);
+ context.bx = 3589;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto symbolloop;
+ context._cmp(context.data.byte(295), 3);
+ if (!context.flags.z()) goto symbolwrong;
+ context._cmp(context.data.byte(292), 5);
+ if (!context.flags.z()) goto symbolwrong;
+ context.al = 43;
+ removesetobject(context);
+ context.al = 46;
+ placesetobject(context);
+ context.ah = context.data.byte(185);
+ context._add(context.ah, 12);
+ context.al = 0;
+ turnanypathon(context);
+ context.data.byte(131) = 0;
+ redrawmainscrn(context);
+ getridoftemp(context);
+ restorereels(context);
+ worktoscreenm(context);
+ context.al = 13;
+ playchannel1(context);
+ return;
+symbolwrong:
+ context.al = 46;
+ removesetobject(context);
+ context.al = 43;
+ placesetobject(context);
+ context.ah = context.data.byte(185);
+ context._add(context.ah, 12);
+ context.al = 0;
+ turnanypathoff(context);
+ context.data.byte(131) = 0;
+ redrawmainscrn(context);
+ getridoftemp(context);
+ restorereels(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void quitsymbol(Context & context) {
+ context._cmp(context.data.byte(291), 24);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(294), 24);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 222);
+ if (context.flags.z()) goto alreadyqs;
+ context.data.byte(100) = 222;
+ context.al = 18;
+ commandonly(context);
+alreadyqs:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notqs;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto doqs;
+notqs:
+ return;
+doqs:
+ context.data.byte(103) = 1;
+ return;
+}
+
+static inline void settopleft(Context & context) {
+ context._cmp(context.data.byte(293), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 210);
+ if (context.flags.z()) goto alreadytopl;
+ context.data.byte(100) = 210;
+ context.al = 19;
+ commandonly(context);
+alreadytopl:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto notopleft;
+ context.data.byte(293) = -1;
+notopleft:
+ return;
+}
+
+static inline void settopright(Context & context) {
+ context._cmp(context.data.byte(293), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 211);
+ if (context.flags.z()) goto alreadytopr;
+ context.data.byte(100) = 211;
+ context.al = 20;
+ commandonly(context);
+alreadytopr:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto notopright;
+ context.data.byte(293) = 1;
+notopright:
+ return;
+}
+
+static inline void setbotleft(Context & context) {
+ context._cmp(context.data.byte(296), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 212);
+ if (context.flags.z()) goto alreadybotl;
+ context.data.byte(100) = 212;
+ context.al = 21;
+ commandonly(context);
+alreadybotl:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto nobotleft;
+ context.data.byte(296) = -1;
+nobotleft:
+ return;
+}
+
+static inline void setbotright(Context & context) {
+ context._cmp(context.data.byte(296), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 213);
+ if (context.flags.z()) goto alreadybotr;
+ context.data.byte(100) = 213;
+ context.al = 22;
+ commandonly(context);
+alreadybotr:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto nobotright;
+ context.data.byte(296) = 1;
+nobotright:
+ return;
+}
+
+static inline void dumpsymbol(Context & context) {
+ context.data.byte(109) = 0;
+ context.di = 64;
+ context.bx = 56+20;
+ context.cl = 104;
+ context.ch = 60;
+ multidump(context);
+ return;
+}
+
+static inline void showsymbol(Context & context) {
+ context.al = 12;
+ context.ah = 0;
+ context.di = 64;
+ context.bx = 56;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context.al = context.data.byte(291);
+ context.ah = 0;
+ context.di = context.ax;
+ context._add(context.di, 64-44);
+ context.al = context.data.byte(292);
+ context.bx = 56+20;
+ context.ds = context.data.word(458);
+ context.ah = 32;
+ context.push(context.ax);
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.ds);
+ showframe(context);
+ context.ds = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.ax = context.pop();
+ nextsymbol(context);
+ context._add(context.di, 49);
+ context.push(context.ax);
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.ds);
+ showframe(context);
+ context.ds = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.ax = context.pop();
+ nextsymbol(context);
+ context._add(context.di, 49);
+ showframe(context);
+ context.al = context.data.byte(294);
+ context.ah = 0;
+ context.di = context.ax;
+ context._add(context.di, 64-44);
+ context.al = context.data.byte(295);
+ context._add(context.al, 6);
+ context.bx = 56+49;
+ context.ds = context.data.word(458);
+ context.ah = 32;
+ context.push(context.ax);
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.ds);
+ showframe(context);
+ context.ds = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.ax = context.pop();
+ nextsymbol(context);
+ context._add(context.di, 49);
+ context.push(context.ax);
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.ds);
+ showframe(context);
+ context.ds = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.ax = context.pop();
+ nextsymbol(context);
+ context._add(context.di, 49);
+ showframe(context);
+ return;
+}
+
+static inline void nextsymbol(Context & context) {
+ context._add(context.al, 1);
+ context._cmp(context.al, 6);
+ if (context.flags.z()) goto topwrap;
+ context._cmp(context.al, 12);
+ if (context.flags.z()) goto botwrap;
+ return;
+topwrap:
+ context.al = 0;
+ return;
+botwrap:
+ context.al = 6;
+ return;
+}
+
+static inline void updatesymboltop(Context & context) {
+ context._cmp(context.data.byte(293), 0);
+ if (context.flags.z()) goto topfinished;
+ context._cmp(context.data.byte(293), -1);
+ if (context.flags.z()) goto backwards;
+ context._add(context.data.byte(291), 1);
+ context._cmp(context.data.byte(291), 49);
+ if (!context.flags.z()) goto notwrapfor;
+ context.data.byte(291) = 0;
+ context._sub(context.data.byte(292), 1);
+ context._cmp(context.data.byte(292), -1);
+ if (!context.flags.z()) goto topfinished;
+ context.data.byte(292) = 5;
+ return;
+notwrapfor:
+ context._cmp(context.data.byte(291), 24);
+ if (!context.flags.z()) goto topfinished;
+ context.data.byte(293) = 0;
+ return;
+backwards:
+ context._sub(context.data.byte(291), 1);
+ context._cmp(context.data.byte(291), -1);
+ if (!context.flags.z()) goto notwrapback;
+ context.data.byte(291) = 48;
+ context._add(context.data.byte(292), 1);
+ context._cmp(context.data.byte(292), 6);
+ if (!context.flags.z()) goto topfinished;
+ context.data.byte(292) = 0;
+ return;
+notwrapback:
+ context._cmp(context.data.byte(291), 24);
+ if (!context.flags.z()) goto topfinished;
+ context.data.byte(293) = 0;
+topfinished:
+ return;
+}
+
+static inline void updatesymbolbot(Context & context) {
+ context._cmp(context.data.byte(296), 0);
+ if (context.flags.z()) goto botfinished;
+ context._cmp(context.data.byte(296), -1);
+ if (context.flags.z()) goto backwardsbot;
+ context._add(context.data.byte(294), 1);
+ context._cmp(context.data.byte(294), 49);
+ if (!context.flags.z()) goto notwrapforb;
+ context.data.byte(294) = 0;
+ context._sub(context.data.byte(295), 1);
+ context._cmp(context.data.byte(295), -1);
+ if (!context.flags.z()) goto botfinished;
+ context.data.byte(295) = 5;
+ return;
+notwrapforb:
+ context._cmp(context.data.byte(294), 24);
+ if (!context.flags.z()) goto botfinished;
+ context.data.byte(296) = 0;
+ return;
+backwardsbot:
+ context._sub(context.data.byte(294), 1);
+ context._cmp(context.data.byte(294), -1);
+ if (!context.flags.z()) goto notwrapbackb;
+ context.data.byte(294) = 48;
+ context._add(context.data.byte(295), 1);
+ context._cmp(context.data.byte(295), 6);
+ if (!context.flags.z()) goto botfinished;
+ context.data.byte(295) = 0;
+ return;
+notwrapbackb:
+ context._cmp(context.data.byte(294), 24);
+ if (!context.flags.z()) goto botfinished;
+ context.data.byte(296) = 0;
+botfinished:
+ return;
+}
+
+static inline void dumpsymbox(Context & context) {
+ context._cmp(context.data.word(303), -1);
+ if (context.flags.z()) goto nodumpsym;
+ context.di = context.data.word(303);
+ context.bx = context.data.word(305);
+ context.cl = 30;
+ context.ch = 77;
+ multidump(context);
+ context.data.word(303) = -1;
+nodumpsym:
+ return;
+}
+
+static inline void usediary(Context & context) {
+ getridofreels(context);
+ context.dx = 2052;
+ loadintotemp(context);
+ context.dx = 2221;
+ loadtemptext(context);
+ context.dx = 1896;
+ loadtempcharset(context);
+ createpanel(context);
+ showicon(context);
+ showdiary(context);
+ undertextline(context);
+ showdiarypage(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ context.data.byte(103) = 0;
+diaryloop:
+ delpointer(context);
+ readmouse(context);
+ showdiarykeys(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumpdiarykeys(context);
+ dumptextline(context);
+ context.bx = 3651;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto diaryloop;
+ getridoftemp(context);
+ getridoftemptext(context);
+ getridoftempcharset(context);
+ restorereels(context);
+ context.data.byte(131) = 0;
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ return;
+diarylist:
+ return;
+}
+
+static inline void showdiary(Context & context) {
+ context.al = 1;
+ context.ah = 0;
+ context.di = 68+24;
+ context.bx = 48+12+37;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context.al = 2;
+ context.ah = 0;
+ context.di = 68+24+176;
+ context.bx = 48+12+108;
+ context.ds = context.data.word(458);
+ showframe(context);
+ return;
+}
+
+static inline void showdiarykeys(Context & context) {
+ context._cmp(context.data.byte(282), 0);
+ if (context.flags.z()) goto nokeyatall;
+ context._sub(context.data.byte(282), 1);
+ context._cmp(context.data.byte(282), 0);
+ if (context.flags.z()) goto nokeyatall;
+ context._cmp(context.data.byte(278), 'N');
+ if (!context.flags.z()) goto nokeyn;
+ context.al = 3;
+ context._cmp(context.data.byte(282), 1);
+ if (context.flags.z()) goto gotkeyn;
+ context.al = 4;
+gotkeyn:
+ context.ah = 0;
+ context.di = 68+24+94;
+ context.bx = 48+12+97;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context._cmp(context.data.byte(282), 1);
+ if (!context.flags.z()) goto notshown;
+ showdiarypage(context);
+notshown:
+ return;
+nokeyn:
+ context.al = 5;
+ context._cmp(context.data.byte(282), 1);
+ if (context.flags.z()) goto gotkeyp;
+ context.al = 6;
+gotkeyp:
+ context.ah = 0;
+ context.di = 68+24+151;
+ context.bx = 48+12+71;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context._cmp(context.data.byte(282), 1);
+ if (!context.flags.z()) goto notshowp;
+ showdiarypage(context);
+notshowp:
+ return;
+nokeyatall:
+ return;
+}
+
+static inline void dumpdiarykeys(Context & context) {
+ context._cmp(context.data.byte(282), 1);
+ if (!context.flags.z()) goto notdumpdiary;
+ context._cmp(context.data.byte(43), 1);
+ if (context.flags.z()) goto notsartadd;
+ context._cmp(context.data.byte(289), 5);
+ if (!context.flags.z()) goto notsartadd;
+ context._cmp(context.data.byte(289), 5);
+ if (!context.flags.z()) goto notsartadd;
+ context.al = 6;
+ getlocation(context);
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto notsartadd;
+ context.al = 6;
+ setlocation(context);
+ delpointer(context);
+ context.al = 12;
+ findtext1(context);
+ context.di = 70;
+ context.bx = 106;
+ context.dl = 241;
+ context.ah = 16;
+ printdirect(context);
+ worktoscreenm(context);
+ context.cx = 200;
+ hangonp(context);
+ createpanel(context);
+ showicon(context);
+ showdiary(context);
+ showdiarypage(context);
+ worktoscreenm(context);
+ showpointer(context);
+ return;
+notsartadd:
+ context.di = 68+24+48;
+ context.bx = 48+12+15;
+ context.cl = 200;
+ context.ch = 16;
+ multidump(context);
+notdumpdiary:
+ context.di = 68+24+94;
+ context.bx = 48+12+97;
+ context.cl = 16;
+ context.ch = 16;
+ multidump(context);
+ context.di = 68+24+151;
+ context.bx = 48+12+71;
+ context.cl = 16;
+ context.ch = 16;
+ multidump(context);
+ return;
+}
+
+static inline void diarykeyp(Context & context) {
+ context._cmp(context.data.byte(100), 214);
+ if (context.flags.z()) goto alreadykeyp;
+ context.data.byte(100) = 214;
+ context.al = 23;
+ commandonly(context);
+alreadykeyp:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto notkeyp;
+ context.ax = context.data.word(212);
+ context._cmp(context.ax, context.data.word(202));
+ if (context.flags.z()) goto notkeyp;
+ context._cmp(context.data.byte(282), 0);
+ if (!context.flags.z()) goto notkeyp;
+ context.al = 16;
+ playchannel1(context);
+ context.data.byte(282) = 12;
+ context.data.byte(278) = 'P';
+ context._sub(context.data.byte(289), 1);
+ context._cmp(context.data.byte(289), -1);
+ if (!context.flags.z()) goto notkeyp;
+ context.data.byte(289) = 11;
+notkeyp:
+ return;
+}
+
+static inline void diarykeyn(Context & context) {
+ context._cmp(context.data.byte(100), 213);
+ if (context.flags.z()) goto alreadykeyn;
+ context.data.byte(100) = 213;
+ context.al = 23;
+ commandonly(context);
+alreadykeyn:
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto notkeyn;
+ context.ax = context.data.word(212);
+ context._cmp(context.ax, context.data.word(202));
+ if (context.flags.z()) goto notkeyn;
+ context._cmp(context.data.byte(282), 0);
+ if (!context.flags.z()) goto notkeyn;
+ context.al = 16;
+ playchannel1(context);
+ context.data.byte(282) = 12;
+ context.data.byte(278) = 'N';
+ context._add(context.data.byte(289), 1);
+ context._cmp(context.data.byte(289), 12);
+ if (!context.flags.z()) goto notkeyn;
+ context.data.byte(289) = 0;
+notkeyn:
+ return;
+}
+
+static inline void showdiarypage(Context & context) {
+ context.al = 0;
+ context.ah = 0;
+ context.di = 68+24;
+ context.bx = 48+12;
+ context.ds = context.data.word(458);
+ showframe(context);
+ context.al = context.data.byte(289);
+ findtext1(context);
+ context.data.byte(72) = 1;
+ usetempcharset(context);
+ context.di = 68+24+48;
+ context.bx = 48+12+16;
+ context.dl = 240;
+ context.ah = 16;
+ context.data.word(71) = 91+91;
+ printdirect(context);
+ context.di = 68+24+129;
+ context.bx = 48+12+16;
+ context.dl = 240;
+ context.ah = 16;
+ printdirect(context);
+ context.di = 68+24+48;
+ context.bx = 48+12+23;
+ context.dl = 240;
+ context.ah = 16;
+ printdirect(context);
+ context.data.byte(72) = 0;
+ context.data.word(71) = 0;
+ usecharset1(context);
+ return;
+}
+
+static inline void findtext1(Context & context) {
+ context.ah = 0;
+ context.si = context.ax;
+ context._add(context.si, context.si);
+ context.es = context.data.word(466);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+ return;
+}
+
+static inline void zoomonoff(Context & context) {
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(234), 2);
+ if (context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 222);
+ if (context.flags.z()) goto alreadyonoff;
+ context.data.byte(100) = 222;
+ context.al = 39;
+ commandonly(context);
+alreadyonoff:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nozoomonoff;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dozoomonoff;
+nozoomonoff:
+ return;
+dozoomonoff:
+ context.al = context.data.byte(8);
+ context._xor(context.al, 1);
+ context.data.byte(8) = context.al;
+ createpanel(context);
+ context.data.byte(62) = 0;
+ drawfloor(context);
+ printsprites(context);
+ reelsonscreen(context);
+ showicon(context);
+ getunderzoom(context);
+ undertextline(context);
+ context.al = 39;
+ commandonly(context);
+ readmouse(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void saveload(Context & context) {
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(234), 2);
+ if (context.flags.z()) { blank(context); return; };
+ context._cmp(context.data.byte(100), 253);
+ if (context.flags.z()) goto alreadyops;
+ context.data.byte(100) = 253;
+ context.al = 43;
+ commandonly(context);
+alreadyops:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto noops;
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto noops;
+ dosaveload(context);
+noops:
+ return;
+}
+
+static inline void dosaveload(Context & context) {
+ context.data.byte(231) = 0;
+ context.data.word(79) = 70;
+ context.data.word(81) = 182-8;
+ context.data.byte(82) = 181;
+ context.data.byte(131) = 1;
+ clearwork(context);
+ createpanel2(context);
+ undertextline(context);
+ getridofall(context);
+ loadsavebox(context);
+ showopbox(context);
+ showmainops(context);
+ worktoscreen(context);
+ goto donefirstops;
+restartops:
+ showopbox(context);
+ showmainops(context);
+ worktoscreenm(context);
+donefirstops:
+ context.data.byte(103) = 0;
+waitops:
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ delpointer(context);
+ context.bx = 3693;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto waitops;
+ context._cmp(context.data.byte(103), 2);
+ if (context.flags.z()) goto restartops;
+ context.data.word(79) = 13;
+ context.data.word(81) = 182;
+ context.data.byte(82) = 240;
+ context._cmp(context.data.byte(103), 4);
+ if (context.flags.z()) goto justret;
+ getridoftemp(context);
+ restoreall(context);
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ context.data.byte(100) = 200;
+justret:
+ context.data.byte(131) = 0;
+ return;
+}
+
+static inline void getbackfromops(Context & context) {
+ context._cmp(context.data.byte(56), 2);
+ if (context.flags.z()) goto opsblock1;
+ getback1(context);
+ return;
+opsblock1:
+ blank(context);
+ return;
+}
+
+static inline void showmainops(Context & context) {
+ context.ds = context.data.word(458);
+ context.di = 60+10;
+ context.bx = 52+10;
+ context.al = 8;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+59;
+ context.bx = 52+30;
+ context.al = 7;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+128+4;
+ context.bx = 52+12;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void showdiscops(Context & context) {
+ context.ds = context.data.word(458);
+ context.di = 60+128+4;
+ context.bx = 52+12;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+10;
+ context.bx = 52+10;
+ context.al = 9;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+59;
+ context.bx = 52+30;
+ context.al = 10;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+176+2;
+ context.bx = 52+60-4;
+ context.al = 5;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void loadgame(Context & context) {
+ context._cmp(context.data.byte(100), 246);
+ if (context.flags.z()) goto alreadyload;
+ context.data.byte(100) = 246;
+ context.al = 41;
+ commandonly(context);
+alreadyload:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto noload;
+ context._cmp(context.ax, 1);
+ if (context.flags.z()) goto doload;
+noload:
+ return;
+doload:
+ context.data.byte(340) = 1;
+ showopbox(context);
+ showloadops(context);
+ context.data.byte(341) = 0;
+ showslots(context);
+ shownames(context);
+ context.data.byte(231) = 0;
+ worktoscreenm(context);
+ namestoold(context);
+ context.data.byte(103) = 0;
+loadops:
+ delpointer(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.bx = 3735;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto loadops;
+ context._cmp(context.data.byte(103), 2);
+ if (context.flags.z()) goto quitloaded;
+ getridoftemp(context);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.bx = 7782;
+ startloading(context);
+ loadroomssample(context);
+ context.data.byte(74) = 1;
+ context.data.byte(188) = 255;
+ clearsprites(context);
+ initman(context);
+ initrain(context);
+ context.data.word(79) = 13;
+ context.data.word(81) = 182;
+ context.data.byte(82) = 240;
+ startup(context);
+ worktoscreen(context);
+ context.data.byte(103) = 4;
+quitloaded:
+ return;
+}
+
+static inline void getbacktoops(Context & context) {
+ context._cmp(context.data.byte(100), 201);
+ if (context.flags.z()) goto alreadygetops;
+ context.data.byte(100) = 201;
+ context.al = 42;
+ commandonly(context);
+alreadygetops:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nogetbackops;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dogetbackops;
+nogetbackops:
+ return;
+dogetbackops:
+ oldtonames(context);
+ context.data.byte(103) = 2;
+ return;
+}
+
+static inline void discops(Context & context) {
+ context._cmp(context.data.byte(100), 249);
+ if (context.flags.z()) goto alreadydiscops;
+ context.data.byte(100) = 249;
+ context.al = 43;
+ commandonly(context);
+alreadydiscops:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto nodiscops;
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dodiscops;
+nodiscops:
+ return;
+dodiscops:
+ scanfornames(context);
+ context.data.byte(340) = 2;
+ showopbox(context);
+ showdiscops(context);
+ context.data.byte(341) = 0;
+ worktoscreenm(context);
+ context.data.byte(103) = 0;
+discopsloop:
+ delpointer(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.bx = 3777;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto discopsloop;
+ return;
+}
+
+static inline void savegame(Context & context) {
+ context._cmp(context.data.byte(56), 2);
+ if (!context.flags.z()) goto cansaveok;
+ blank(context);
+ return;
+cansaveok:
+ context._cmp(context.data.byte(100), 247);
+ if (context.flags.z()) goto alreadysave;
+ context.data.byte(100) = 247;
+ context.al = 44;
+ commandonly(context);
+alreadysave:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (!context.flags.z()) goto dosave;
+ return;
+dosave:
+ context.data.byte(340) = 2;
+ showopbox(context);
+ showsaveops(context);
+ context.data.byte(341) = 0;
+ showslots(context);
+ shownames(context);
+ worktoscreenm(context);
+ namestoold(context);
+ context.data.word(394) = 0;
+ context.data.word(396) = 0;
+ context.data.byte(103) = 0;
+saveops:
+ delpointer(context);
+ checkinput(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.bx = 3819;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto saveops;
+ return;
+}
+
+static inline void actualsave(Context & context) {
+ context._cmp(context.data.byte(100), 222);
+ if (context.flags.z()) goto alreadyactsave;
+ context.data.byte(100) = 222;
+ context.al = 44;
+ commandonly(context);
+alreadyactsave:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto noactsave;
+ context.dx = context.ds;
+ context.ds = context.dx;
+ context.si = 8367;
+ context.al = context.data.byte(341);
+ context.ah = 0;
+ context.cx = 17;
+ context._mul(context.cx);
+ context._add(context.si, context.ax);
+ context._add(context.si, 1);
+ context._cmp(context.data.byte(context.si), 0);
+ if (context.flags.z()) goto noactsave;
+ context.al = context.data.byte(9);
+ context.ah = 0;
+ context.cx = 32;
+ context._mul(context.cx);
+ context.ds = context.cs;
+ context.si = 5971;
+ context._add(context.si, context.ax);
+ context.di = 7782;
+ context.bx = context.di;
+ context.es = context.cs;
+ context.cx = 16;
+ while(--context.cx) context._movsw();
+ context.al = context.data.byte(531);
+ context.data.byte(context.bx+13) = context.al;
+ context.al = context.data.byte(148);
+ context.data.byte(context.bx+15) = context.al;
+ context.al = context.data.byte(149);
+ context.data.byte(context.bx+16) = context.al;
+ context.al = context.data.byte(35);
+ context.data.byte(context.bx+20) = context.al;
+ context.al = context.data.byte(475);
+ context.data.byte(context.bx+21) = context.al;
+ context.al = context.data.byte(133);
+ context.data.byte(context.bx+22) = context.al;
+ context.al = 255;
+ context.data.byte(context.bx+27) = context.al;
+ saveposition(context);
+ getridoftemp(context);
+ restoreall(context);
+ context.data.word(79) = 13;
+ context.data.word(81) = 182;
+ context.data.byte(82) = 240;
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ context.data.byte(103) = 4;
+noactsave:
+ return;
+}
+
+static inline void actualload(Context & context) {
+ context._cmp(context.data.byte(100), 221);
+ if (context.flags.z()) goto alreadyactload;
+ context.data.byte(100) = 221;
+ context.al = 41;
+ commandonly(context);
+alreadyactload:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto notactload;
+ context._cmp(context.ax, 1);
+ if (!context.flags.z()) goto notactload;
+ context.dx = context.ds;
+ context.ds = context.dx;
+ context.si = 8367;
+ context.al = context.data.byte(341);
+ context.ah = 0;
+ context.cx = 17;
+ context._mul(context.cx);
+ context._add(context.si, context.ax);
+ context._add(context.si, 1);
+ context._cmp(context.data.byte(context.si), 0);
+ if (context.flags.z()) goto notactload;
+ loadposition(context);
+ context.data.byte(103) = 1;
+notactload:
+ return;
+}
+
+static inline void selectslot2(Context & context) {
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto noselslot2;
+ context.data.byte(340) = 2;
+noselslot2:
+ selectslot(context);
+ return;
+}
+
+static inline void checkinput(Context & context) {
+ context._cmp(context.data.byte(340), 3);
+ if (context.flags.z()) goto nokeypress;
+ readkey(context);
+ context.al = context.data.byte(142);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto nokeypress;
+ context._cmp(context.al, 13);
+ if (!context.flags.z()) goto notret;
+ context.data.byte(340) = 3;
+ goto afterkey;
+notret:
+ context._cmp(context.al, 8);
+ if (!context.flags.z()) goto nodel2;
+ context._cmp(context.data.byte(342), 0);
+ if (context.flags.z()) goto nokeypress;
+ getnamepos(context);
+ context._sub(context.data.byte(342), 1);
+ context.data.byte(context.bx) = 0;
+ context.data.byte(context.bx+1) = 1;
+ goto afterkey;
+nodel2:
+spacepress:
+ context._cmp(context.data.byte(342), 14);
+ if (context.flags.z()) goto nokeypress;
+ getnamepos(context);
+ context._add(context.data.byte(342), 1);
+ context.al = context.data.byte(142);
+ context.data.byte(context.bx+1) = context.al;
+ context.data.byte(context.bx+2) = 0;
+ context.data.byte(context.bx+3) = 1;
+ goto afterkey;
+nokeypress:
+ return;
+afterkey:
+ showopbox(context);
+ shownames(context);
+ showslots(context);
+ showsaveops(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void getnamepos(Context & context) {
+ context.al = context.data.byte(341);
+ context.ah = 0;
+ context.cx = 17;
+ context._mul(context.cx);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.bx = 8367;
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(342);
+ context.ah = 0;
+ context._add(context.bx, context.ax);
+ return;
+}
+
+static inline void showloadops(Context & context) {
+ context.ds = context.data.word(458);
+ context.di = 60+128+4;
+ context.bx = 52+12;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+176+2;
+ context.bx = 52+60-4;
+ context.al = 5;
+ context.ah = 0;
+ showframe(context);
+ context.di = 60+104;
+ context.bx = 52+14;
+ context.al = 55;
+ context.dl = 101;
+ printmessage(context);
+ return;
+}
+
+static inline void showsaveops(Context & context) {
+ context.ds = context.data.word(458);
+ context.di = 60+128+4;
+ context.bx = 52+12;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60+176+2;
+ context.bx = 52+60-4;
+ context.al = 5;
+ context.ah = 0;
+ showframe(context);
+ context.di = 60+104;
+ context.bx = 52+14;
+ context.al = 54;
+ context.dl = 101;
+ printmessage(context);
+ return;
+}
+
+static inline void selectslot(Context & context) {
+ context._cmp(context.data.byte(100), 244);
+ if (context.flags.z()) goto alreadysel;
+ context.data.byte(100) = 244;
+ context.al = 45;
+ commandonly(context);
+alreadysel:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, 1);
+ if (!context.flags.z()) goto noselslot;
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto noselslot;
+ context._cmp(context.data.byte(340), 3);
+ if (!context.flags.z()) goto notnocurs;
+ context._sub(context.data.byte(340), 1);
+notnocurs:
+ oldtonames(context);
+ context.ax = context.data.word(200);
+ context._sub(context.ax, 52+4);
+ context.cl = -1;
+getslotnum:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 11);
+ if (!context.flags.c()) goto getslotnum;
+ context.data.byte(341) = context.cl;
+ delpointer(context);
+ showopbox(context);
+ showslots(context);
+ shownames(context);
+ context._cmp(context.data.byte(340), 1);
+ if (context.flags.z()) goto isloadmode;
+ showsaveops(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+isloadmode:
+ showloadops(context);
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+noselslot:
+ return;
+}
+
+static inline void showslots(Context & context) {
+ context.di = 60+7;
+ context.bx = 52+8;
+ context.al = 2;
+ context.ds = context.data.word(458);
+ context.ah = 0;
+ showframe(context);
+ context.di = 60+10;
+ context.bx = 52+11;
+ context.cl = 0;
+slotloop:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.bx);
+ context._cmp(context.cl, context.data.byte(341));
+ if (!context.flags.z()) goto nomatchslot;
+ context.al = 3;
+ context.ds = context.data.word(458);
+ context.ah = 0;
+ showframe(context);
+nomatchslot:
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 10);
+ context._add(context.cl, 1);
+ context._cmp(context.cl, 7);
+ if (!context.flags.z()) goto slotloop;
+ return;
+}
+
+static inline void shownames(Context & context) {
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.si = 8367+1;
+ context.di = 60+21;
+ context.bx = 52+10;
+ context.cl = 0;
+shownameloop:
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.si);
+ context.al = 4;
+ context._cmp(context.cl, context.data.byte(341));
+ if (!context.flags.z()) goto nomatchslot2;
+ context._cmp(context.data.byte(340), 2);
+ if (!context.flags.z()) goto loadmode;
+ context.dx = context.si;
+ context.cx = 15;
+ context._add(context.si, 15);
+zerostill:
+ context._sub(context.si, 1);
+ context._sub(context.cl, 1);
+ context._cmp(context.data.byte(context.si), 1);
+ if (!context.flags.z()) goto foundcharacter;
+ goto zerostill;
+foundcharacter:
+ context.data.byte(342) = context.cl;
+ context.data.byte(context.si) = '/';
+ context.data.byte(context.si+1) = 0;
+ context.push(context.si);
+ context.si = context.dx;
+ context.dl = 200;
+ context.ah = 0;
+ printdirect(context);
+ context.si = context.pop();
+ context.data.byte(context.si) = 0;
+ context.data.byte(context.si+1) = 1;
+ goto afterprintname;
+loadmode:
+ context.al = 0;
+ context.dl = 200;
+ context.ah = 0;
+ context.data.word(71) = 91;
+ printdirect(context);
+ context.data.word(71) = 0;
+ goto afterprintname;
+nomatchslot2:
+ context.dl = 200;
+ context.ah = 0;
+ printdirect(context);
+afterprintname:
+ context.si = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 17);
+ context._add(context.bx, 10);
+ context._add(context.cl, 1);
+ context._cmp(context.cl, 7);
+ if (!context.flags.z()) goto shownameloop;
+ return;
+}
+
+static inline void namestoold(Context & context) {
+ context.ds = context.cs;
+ context.si = 8367;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5);
+ context.es = context.data.word(412);
+ context.cx = 17*4;
+ while(--context.cx) context._movsb();
+ return;
+}
+
+static inline void oldtonames(Context & context) {
+ context.es = context.cs;
+ context.di = 8367;
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5);
+ context.ds = context.data.word(412);
+ context.cx = 17*4;
+ while(--context.cx) context._movsb();
+ return;
+}
+
+static inline void makeheader(Context & context) {
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.di = 5952;
+ context.ax = 17;
+ storeit(context);
+ context.ax = 68-context.data.byte(1);
+ storeit(context);
+ context.ax = 0+2080+30000+(16*114)+((114+2)*2)+18000;
+ storeit(context);
+ context.ax = 250*4;
+ storeit(context);
+ context.ax = 48;
+ storeit(context);
+ context.ax = 991-context.data.byte(537);
+ storeit(context);
+ return;
+}
+
+static inline void storeit(Context & context) {
+ context._cmp(context.ax, 0);
+ if (!context.flags.z()) goto isntblank;
+ context._add(context.ax, 1);
+isntblank:
+ context._stosw();
+ return;
+}
+
+static inline void findlen(Context & context) {
+ context._sub(context.bx, 1);
+ context._add(context.bx, context.ax);
+nextone:
+ context._cmp(context.cl, context.data.byte(context.bx));
+ if (!context.flags.z()) goto foundlen;
+ context._sub(context.bx, 1);
+ context._sub(context.ax, 1);
+ context._cmp(context.ax, 0);
+ if (!context.flags.z()) goto nextone;
+foundlen:
+ return;
+}
+
+static inline void newgame(Context & context) {
+ context._cmp(context.data.byte(100), 251);
+ if (context.flags.z()) goto alreadynewgame;
+ context.data.byte(100) = 251;
+ context.al = 47;
+ commandonly(context);
+alreadynewgame:
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, 1);
+ if (!context.flags.z()) goto nonewgame;
+ context.data.byte(103) = 3;
+nonewgame:
+ return;
+}
+
+static inline void doload(Context & context) {
+ context.data.byte(340) = 1;
+ showopbox(context);
+ showloadops(context);
+ context.data.byte(341) = 0;
+ showslots(context);
+ shownames(context);
+ context.data.byte(231) = 0;
+ worktoscreenm(context);
+ namestoold(context);
+ context.data.byte(103) = 0;
+loadops:
+ delpointer(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context.bx = 3735;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto loadops;
+ context._cmp(context.data.byte(103), 2);
+ if (context.flags.z()) goto quitloaded;
+ getridoftemp(context);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.bx = 7782;
+ startloading(context);
+ loadroomssample(context);
+ context.data.byte(74) = 1;
+ context.data.byte(188) = 255;
+ clearsprites(context);
+ initman(context);
+ initrain(context);
+ context.data.word(79) = 13;
+ context.data.word(81) = 182;
+ context.data.byte(82) = 240;
+ startup(context);
+ worktoscreen(context);
+ context.data.byte(103) = 4;
+quitloaded:
+ return;
+}
+
+static inline void loadold(Context & context) {
+ context._cmp(context.data.byte(100), 252);
+ if (context.flags.z()) goto alreadyloadold;
+ context.data.byte(100) = 252;
+ context.al = 48;
+ commandonly(context);
+alreadyloadold:
+ context.ax = context.data.word(202);
+ context._and(context.ax, 1);
+ if (context.flags.z()) goto noloadold;
+ doload(context);
+ context._cmp(context.data.byte(103), 4);
+ if (context.flags.z()) goto noloadold;
+ showdecisions(context);
+ worktoscreenm(context);
+ context.data.byte(103) = 0;
+noloadold:
+ return;
+}
+
+static inline void createname(Context & context) {
+ context.push(context.ax);
+ context.di = 4932;
+ context.data.byte(context.di+0) = context.dl;
+ context.data.byte(context.di+3) = context.cl;
+ context.al = context.dh;
+ context.ah = '0'-1;
+findten:
+ context._add(context.ah, 1);
+ context._sub(context.al, 10);
+ if (!context.flags.c()) goto findten;
+ context.data.byte(context.di+1) = context.ah;
+ context._add(context.al, 10+'0');
+ context.data.byte(context.di+2) = context.al;
+ context.ax = context.pop();
+ context.cl = '0'-1;
+thousandsc:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 1000);
+ if (!context.flags.c()) goto thousandsc;
+ context._add(context.ax, 1000);
+ context.data.byte(context.di+4) = context.cl;
+ context.cl = '0'-1;
+hundredsc:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 100);
+ if (!context.flags.c()) goto hundredsc;
+ context._add(context.ax, 100);
+ context.data.byte(context.di+5) = context.cl;
+ context.cl = '0'-1;
+tensc:
+ context._add(context.cl, 1);
+ context._sub(context.ax, 10);
+ if (!context.flags.c()) goto tensc;
+ context._add(context.ax, 10);
+ context.data.byte(context.di+6) = context.cl;
+ context._add(context.al, '0');
+ context.data.byte(context.di+7) = context.al;
+ return;
+}
+
+static inline void makenextblock(Context & context) {
+ volumeadjust(context);
+ loopchannel0(context);
+ context._cmp(context.data.word(521), 0);
+ if (context.flags.z()) goto mightbeonlych0;
+ context._cmp(context.data.word(506), 0);
+ if (context.flags.z()) goto mightbeonlych1;
+ context._sub(context.data.word(506), 1);
+ context._sub(context.data.word(521), 1);
+ bothchannels(context);
+ return;
+mightbeonlych1:
+ context.data.byte(507) = 255;
+ context._cmp(context.data.word(521), 0);
+ if (context.flags.z()) goto notch1only;
+ context._sub(context.data.word(521), 1);
+ channel1only(context);
+notch1only:
+ return;
+mightbeonlych0:
+ context.data.byte(515) = 255;
+ context._cmp(context.data.word(506), 0);
+ if (context.flags.z()) goto notch0only;
+ context._sub(context.data.word(506), 1);
+ channel0only(context);
+ return;
+notch0only:
+ context.es = context.data.word(353);
+ context.di = context.data.word(525);
+ context.cx = 1024;
+ context.ax = 0x7f7f;
+ while(--context.cx) context._stosw();
+ context._and(context.di, 16384-1);
+ context.data.word(525) = context.di;
+ return;
+}
+
+static inline void volumeadjust(Context & context) {
+ context.al = context.data.byte(388);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto volok;
+ context.al = context.data.byte(386);
+ context._cmp(context.al, context.data.byte(387));
+ if (context.flags.z()) goto volfinish;
+ context._add(context.data.byte(389), 64);
+ if (!context.flags.z()) goto volok;
+ context.al = context.data.byte(386);
+ context._add(context.al, context.data.byte(388));
+ context.data.byte(386) = context.al;
+ return;
+volfinish:
+ context.data.byte(388) = 0;
+volok:
+ return;
+}
+
+static inline void loopchannel0(Context & context) {
+ context._cmp(context.data.word(506), 0);
+ if (!context.flags.z()) goto notloop;
+ context._cmp(context.data.byte(508), 0);
+ if (context.flags.z()) goto notloop;
+ context._cmp(context.data.byte(508), 255);
+ if (context.flags.z()) goto endlessloop;
+ context._sub(context.data.byte(508), 1);
+endlessloop:
+ context.ax = context.data.word(510);
+ context.data.word(502) = context.ax;
+ context.ax = context.data.word(512);
+ context.data.word(504) = context.ax;
+ context.ax = context.data.word(506);
+ context._add(context.ax, context.data.word(514));
+ context.data.word(506) = context.ax;
+ return;
+notloop:
+ return;
+}
+
+static inline void channel0tran(Context & context) {
+ context._cmp(context.data.byte(386), 0);
+ if (!context.flags.z()) goto lowvolumetran;
+ context.cx = 1024;
+ while(--context.cx) context._movsw();
+ return;
+lowvolumetran:
+ context.cx = 1024;
+ context.bh = context.data.byte(386);
+ context.bl = 0;
+ context._add(context.bx, 16384-256);
+volloop:
+ context._lodsw();
+ context.bl = context.al;
+ context.al = context.data.byte(context.bx);
+ context.bl = context.ah;
+ context.ah = context.data.byte(context.bx);
+ context._stosw();
+ if (--context.cx) goto volloop;
+ return;
+}
+
+static inline void domix(Context & context) {
+ context._cmp(context.data.byte(386), 0);
+ if (!context.flags.z()) goto lowvolumemix;
+slow:
+ context._lodsb();
+ context.ah = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.al, context.dh);
+ if (!context.flags.c()) goto toplot;
+botlot:
+ context._cmp(context.ah, context.dh);
+ if (!context.flags.c()) goto nodistort;
+ context._add(context.al, context.ah);
+ if (context.flags.s()) goto botok;
+ context._xor(context.al, context.al);
+ context._stosb();
+ if (--context.cx) goto slow;
+ goto doneit;
+botok:
+ context._xor(context.al, context.dh);
+ context._stosb();
+ if (--context.cx) goto slow;
+ goto doneit;
+toplot:
+ context._cmp(context.ah, context.dh);
+ if (context.flags.c()) goto nodistort;
+ context._add(context.al, context.ah);
+ if (!context.flags.s()) goto topok;
+ context.al = context.dl;
+ context._stosb();
+ if (--context.cx) goto slow;
+ goto doneit;
+topok:
+ context._xor(context.al, context.dh);
+ context._stosb();
+ if (--context.cx) goto slow;
+ goto doneit;
+nodistort:
+ context._add(context.al, context.ah);
+ context._xor(context.al, context.dh);
+ context._stosb();
+ if (--context.cx) goto slow;
+ goto doneit;
+lowvolumemix:
+ context._lodsb();
+ context.push(context.bx);
+ context.bh = context.data.byte(386);
+ context._add(context.bh, 63);
+ context.bl = context.al;
+ context.al = context.data.byte(context.bx);
+ context.bx = context.pop();
+ context.ah = context.data.byte(context.bx);
+ context._add(context.bx, 1);
+ context._cmp(context.al, context.dh);
+ if (!context.flags.c()) goto toplotv;
+botlotv:
+ context._cmp(context.ah, context.dh);
+ if (!context.flags.c()) goto nodistortv;
+ context._add(context.al, context.ah);
+ if (context.flags.s()) goto botokv;
+ context._xor(context.al, context.al);
+ context._stosb();
+ if (--context.cx) goto lowvolumemix;
+ goto doneit;
+botokv:
+ context._xor(context.al, context.dh);
+ context._stosb();
+ if (--context.cx) goto lowvolumemix;
+ goto doneit;
+toplotv:
+ context._cmp(context.ah, context.dh);
+ if (context.flags.c()) goto nodistortv;
+ context._add(context.al, context.ah);
+ if (!context.flags.s()) goto topokv;
+ context.al = context.dl;
+ context._stosb();
+ if (--context.cx) goto lowvolumemix;
+ goto doneit;
+topokv:
+ context._xor(context.al, context.dh);
+ context._stosb();
+ if (--context.cx) goto lowvolumemix;
+ goto doneit;
+nodistortv:
+ context._add(context.al, context.ah);
+ context._xor(context.al, context.dh);
+ context._stosb();
+ if (--context.cx) goto lowvolumemix;
+doneit:
+ return;
+}
+
+static inline void seecommandtail(Context & context) {
+ context.data.word(372) = 0x220;
+ context.data.byte(378) = 5;
+ context.data.byte(379) = 1;
+ context.data.byte(73) = 0;
+ context.bx = 2;
+ context.ax = context.data.word(context.bx);
+ context.dx = context.es;
+ context._sub(context.ax, context.dx);
+ context.data.word(534) = context.ax;
+ context.bx = 0x02c;
+ context.ax = context.data.word(context.bx);
+ context.push(context.es);
+ context.push(context.bx);
+ context.es = context.ax;
+ context.bx = 0;
+findblaster:
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.ax, 0);
+ if (context.flags.z()) goto endofenvironment;
+ context._cmp(context.al, 'B');
+ if (!context.flags.z()) goto notblast;
+ context._cmp(context.ah, 'L');
+ if (!context.flags.z()) goto notblast;
+ context._cmp(context.data.byte(context.bx+2), 'A');
+ if (!context.flags.z()) goto notblast;
+ context._cmp(context.data.byte(context.bx+3), 'S');
+ if (!context.flags.z()) goto notblast;
+ context._cmp(context.data.byte(context.bx+4), 'T');
+ if (!context.flags.z()) goto notblast;
+ context._cmp(context.data.byte(context.bx+5), 'E');
+ if (!context.flags.z()) goto notblast;
+ context._cmp(context.data.byte(context.bx+6), 'R');
+ if (!context.flags.z()) goto notblast;
+ context._add(context.bx, 7);
+ parseblaster(context);
+ goto endofenvironment;
+notblast:
+ context._add(context.bx, 1);
+ goto findblaster;
+endofenvironment:
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.bx = 0x81;
+ parseblaster(context);
+ return;
+}
+
+static inline void parseblaster(Context & context) {
+lookattail:
+ context.al = context.data.byte(context.bx);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto endtail;
+ context._cmp(context.al, 13);
+ if (context.flags.z()) goto endtail;
+ context._cmp(context.al, 'i');
+ if (context.flags.z()) goto issoundint;
+ context._cmp(context.al, 'I');
+ if (context.flags.z()) goto issoundint;
+ context._cmp(context.al, 'b');
+ if (context.flags.z()) goto isbright;
+ context._cmp(context.al, 'B');
+ if (context.flags.z()) goto isbright;
+ context._cmp(context.al, 'a');
+ if (context.flags.z()) goto isbaseadd;
+ context._cmp(context.al, 'A');
+ if (context.flags.z()) goto isbaseadd;
+ context._cmp(context.al, 'n');
+ if (context.flags.z()) goto isnosound;
+ context._cmp(context.al, 'N');
+ if (context.flags.z()) goto isnosound;
+ context._cmp(context.al, 'd');
+ if (context.flags.z()) goto isdma;
+ context._cmp(context.al, 'D');
+ if (context.flags.z()) goto isdma;
+ context._add(context.bx, 1);
+ if (--context.cx) goto lookattail;
+ return;
+issoundint:
+ context.al = context.data.byte(context.bx+1);
+ context._sub(context.al, '0');
+ context.data.byte(378) = context.al;
+ context._add(context.bx, 1);
+ goto lookattail;
+isdma:
+ context.al = context.data.byte(context.bx+1);
+ context._sub(context.al, '0');
+ context.data.byte(379) = context.al;
+ context._add(context.bx, 1);
+ goto lookattail;
+isbaseadd:
+ context.push(context.cx);
+ context.al = context.data.byte(context.bx+2);
+ context._sub(context.al, '0');
+ context.ah = 0;
+ context.cl = 4;
+ context._shl(context.ax, context.cl);
+ context._add(context.ax, 0x200);
+ context.data.word(372) = context.ax;
+ context.cx = context.pop();
+ context._add(context.bx, 1);
+ goto lookattail;
+isbright:
+ context.data.byte(73) = 1;
+ context._add(context.bx, 1);
+ goto lookattail;
+isnosound:
+ context.data.byte(378) = 255;
+ context._add(context.bx, 1);
+ goto lookattail;
+endtail:
+ return;
+}
+
+static inline void showbyte(Context & context) {
+ context.dl = context.al;
+ context._shr(context.dl, 1);
+ context._shr(context.dl, 1);
+ context._shr(context.dl, 1);
+ context._shr(context.dl, 1);
+ onedigit(context);
+ context.data.byte(context.di) = context.dl;
+ context.dl = context.al;
+ context._and(context.dl, 15);
+ onedigit(context);
+ context.data.byte(context.di+1) = context.dl;
+ context._add(context.di, 3);
+ return;
+}
+
+static inline void onedigit(Context & context) {
+ context._cmp(context.dl, 10);
+ if (!context.flags.c()) goto morethan10;
+ context._add(context.dl, '0');
+ return;
+morethan10:
+ context._sub(context.dl, 10);
+ context._add(context.dl, 'A');
+ return;
+}
+
+static inline void showword(Context & context) {
+ context.ch = 0;
+ context.bx = 10000;
+ context.cl = 47;
+word1:
+ context._add(context.cl, 1);
+ context._sub(context.ax, context.bx);
+ if (!context.flags.c()) goto word1;
+ context._add(context.ax, context.bx);
+ convnum(context);
+ context.data.byte(context.di) = context.cl;
+ context.bx = 1000;
+ context.cl = 47;
+word2:
+ context._add(context.cl, 1);
+ context._sub(context.ax, context.bx);
+ if (!context.flags.c()) goto word2;
+ context._add(context.ax, context.bx);
+ convnum(context);
+ context.data.byte(context.di+1) = context.cl;
+ context.bx = 100;
+ context.cl = 47;
+word3:
+ context._add(context.cl, 1);
+ context._sub(context.ax, context.bx);
+ if (!context.flags.c()) goto word3;
+ context._add(context.ax, context.bx);
+ convnum(context);
+ context.data.byte(context.di+2) = context.cl;
+ context.bx = 10;
+ context.cl = 47;
+word4:
+ context._add(context.cl, 1);
+ context._sub(context.ax, context.bx);
+ if (!context.flags.c()) goto word4;
+ context._add(context.ax, context.bx);
+ convnum(context);
+ context.data.byte(context.di+3) = context.cl;
+ context._add(context.al, 48);
+ context.cl = context.al;
+ convnum(context);
+ context.data.byte(context.di+4) = context.cl;
+ return;
+}
+
+static inline void convnum(Context & context) {
+ context._cmp(context.ch, 0);
+ if (!context.flags.z()) goto noconvnum;
+ context._cmp(context.cl, '0');
+ if (!context.flags.z()) goto notzeronum;
+ context.cl = 32;
+ goto noconvnum;
+notzeronum:
+ context.ch = 1;
+noconvnum:
+ return;
+}
+
+static inline void madmanrun(Context & context) {
+ context._cmp(context.data.byte(9), 14);
+ if (!context.flags.z()) { identifyob(context); return; };
+ context._cmp(context.data.byte(148), 22);
+ if (!context.flags.z()) { identifyob(context); return; };
+ context._cmp(context.data.byte(234), 2);
+ if (!context.flags.z()) { identifyob(context); return; };
+ context._cmp(context.data.byte(53), 0);
+ if (!context.flags.z()) { identifyob(context); return; };
+ context._cmp(context.data.byte(100), 211);
+ if (context.flags.z()) goto alreadyrun;
+ context.data.byte(100) = 211;
+ context.al = 52;
+ commandonly(context);
+alreadyrun:
+ context._cmp(context.data.word(202), 1);
+ if (!context.flags.z()) goto norun;
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, context.data.word(212));
+ if (context.flags.z()) goto norun;
+ context.data.byte(65) = 8;
+norun:
+ return;
+}
+
+static inline void identifyob(Context & context) {
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) { blank(context); return; };
+ context.ax = context.data.word(198);
+ context._sub(context.ax, context.data.word(117));
+ context._cmp(context.ax, 22*8);
+ if (context.flags.c()) goto notover1;
+ blank(context);
+ return;
+notover1:
+ context.bx = context.data.word(200);
+ context._sub(context.bx, context.data.word(119));
+ context._cmp(context.bx, 20*8);
+ if (context.flags.c()) goto notover2;
+ blank(context);
+ return;
+notover2:
+ context.data.byte(237) = 1;
+ context.ah = context.bl;
+ context.push(context.ax);
+ findpathofpoint(context);
+ context.data.byte(474) = context.dl;
+ context.ax = context.pop();
+ context.push(context.ax);
+ findfirstpath(context);
+ context.data.byte(476) = context.al;
+ context.ax = context.pop();
+ checkifex(context);
+ if (!context.flags.z()) goto finishidentify;
+ checkiffree(context);
+ if (!context.flags.z()) goto finishidentify;
+ checkifperson(context);
+ if (!context.flags.z()) goto finishidentify;
+ checkifset(context);
+ if (!context.flags.z()) goto finishidentify;
+ context.ax = context.data.word(198);
+ context._sub(context.ax, context.data.word(117));
+ context.cl = context.al;
+ context.ax = context.data.word(200);
+ context._sub(context.ax, context.data.word(119));
+ context.ch = context.al;
+ checkone(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto nothingund;
+ context._cmp(context.data.byte(56), 1);
+ if (context.flags.z()) goto nothingund;
+ context.ah = 3;
+ obname(context);
+finishidentify:
+ return;
+nothingund:
+ blank(context);
+ return;
+}
+
+static inline void checkifperson(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5);
+ context.cx = 12;
+identifyreel:
+ context.push(context.cx);
+ context._cmp(context.data.byte(context.bx+4), 255);
+ if (context.flags.z()) goto notareelid;
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.ax);
+ context.ax = context.data.word(context.bx+0);
+ context.data.word(239) = context.ax;
+ getreelstart(context);
+ context._cmp(context.data.word(context.si+2), 0x0ffff);
+ if (!context.flags.z()) goto notblankpers;
+ context._add(context.si, 5);
+notblankpers:
+ context.cx = context.data.word(context.si+2);
+ context.ax = context.data.word(context.si+0);
+ context.push(context.cx);
+ getreelframeax(context);
+ context.cx = context.pop();
+ context._add(context.cl, context.data.byte(context.bx+4));
+ context._add(context.ch, context.data.byte(context.bx+5));
+ context.dx = context.cx;
+ context._add(context.dl, context.data.byte(context.bx+0));
+ context._add(context.dh, context.data.byte(context.bx+1));
+ context.ax = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context._cmp(context.al, context.cl);
+ if (context.flags.c()) goto notareelid;
+ context._cmp(context.ah, context.ch);
+ if (context.flags.c()) goto notareelid;
+ context._cmp(context.al, context.dl);
+ if (!context.flags.c()) goto notareelid;
+ context._cmp(context.ah, context.dh);
+ if (!context.flags.c()) goto notareelid;
+ context.cx = context.pop();
+ context.ax = context.data.word(context.bx+2);
+ context.data.word(249) = context.ax;
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 5;
+ obname(context);
+ context.al = 0;
+ context._cmp(context.al, 1);
+ return;
+notareelid:
+ context.cx = context.pop();
+ context._add(context.bx, 5);
+ context._sub(context.cx, 1);
+ if (!context.flags.z()) goto identifyreel;
+ return;
+}
+
+static inline void checkifset(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(127*5);
+ context.cx = 127;
+identifyset:
+ context._cmp(context.data.byte(context.bx+4), 255);
+ if (context.flags.z()) goto notasetid;
+ context._cmp(context.al, context.data.byte(context.bx));
+ if (context.flags.c()) goto notasetid;
+ context._cmp(context.al, context.data.byte(context.bx+2));
+ if (!context.flags.c()) goto notasetid;
+ context._cmp(context.ah, context.data.byte(context.bx+1));
+ if (context.flags.c()) goto notasetid;
+ context._cmp(context.ah, context.data.byte(context.bx+3));
+ if (!context.flags.c()) goto notasetid;
+ pixelcheckset(context);
+ if (context.flags.z()) goto notasetid;
+ isitdescribed(context);
+ if (context.flags.z()) goto notasetid;
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 1;
+ obname(context);
+ context.al = 0;
+ context._cmp(context.al, 1);
+ return;
+notasetid:
+ context._sub(context.bx, 5);
+ context._sub(context.cx, 1);
+ context._cmp(context.cx, -1);
+ if (!context.flags.z()) goto identifyset;
+ return;
+}
+
+static inline void checkifex(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(99*5);
+ context.cx = 99;
+identifyex:
+ context._cmp(context.data.byte(context.bx+4), 255);
+ if (context.flags.z()) goto notanexid;
+ context._cmp(context.al, context.data.byte(context.bx));
+ if (context.flags.c()) goto notanexid;
+ context._cmp(context.al, context.data.byte(context.bx+2));
+ if (!context.flags.c()) goto notanexid;
+ context._cmp(context.ah, context.data.byte(context.bx+1));
+ if (context.flags.c()) goto notanexid;
+ context._cmp(context.ah, context.data.byte(context.bx+3));
+ if (!context.flags.c()) goto notanexid;
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 4;
+ obname(context);
+ context.al = 1;
+ context._cmp(context.al, 0);
+ return;
+notanexid:
+ context._sub(context.bx, 5);
+ context._sub(context.cx, 1);
+ context._cmp(context.cx, -1);
+ if (!context.flags.z()) goto identifyex;
+ return;
+}
+
+static inline void checkiffree(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(79*5);
+ context.cx = 79;
+identifyfree:
+ context._cmp(context.data.byte(context.bx+4), 255);
+ if (context.flags.z()) goto notafreeid;
+ context._cmp(context.al, context.data.byte(context.bx));
+ if (context.flags.c()) goto notafreeid;
+ context._cmp(context.al, context.data.byte(context.bx+2));
+ if (!context.flags.c()) goto notafreeid;
+ context._cmp(context.ah, context.data.byte(context.bx+1));
+ if (context.flags.c()) goto notafreeid;
+ context._cmp(context.ah, context.data.byte(context.bx+3));
+ if (!context.flags.c()) goto notafreeid;
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 2;
+ obname(context);
+ context.al = 0;
+ context._cmp(context.al, 1);
+ return;
+notafreeid:
+ context._sub(context.bx, 5);
+ context._sub(context.cx, 1);
+ context._cmp(context.cx, -1);
+ if (!context.flags.z()) goto identifyfree;
+ return;
+}
+
+static inline void isitdescribed(Context & context) {
+ context.push(context.ax);
+ context.push(context.cx);
+ context.push(context.es);
+ context.push(context.bx);
+ context.al = context.data.byte(context.bx+4);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.es = context.data.word(440);
+ context._add(context.bx, 0);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 0+(130*2));
+ context.bx = context.ax;
+ context.dl = context.data.byte(context.bx);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ context.ax = context.pop();
+ context._cmp(context.dl, 0);
+ return;
+}
+
+static inline void findfirstpath(Context & context) {
+ context.push(context.ax);
+ context.bx = 0;
+ context.es = context.data.word(450);
+ context.al = context.data.byte(185);
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.cx = context.pop();
+ context.dl = 0;
+fpathloop:
+ context.ax = context.data.word(context.bx+2);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto nofirst;
+ context._cmp(context.cl, context.al);
+ if (context.flags.c()) goto nofirst;
+ context._cmp(context.ch, context.ah);
+ if (context.flags.c()) goto nofirst;
+ context.ax = context.data.word(context.bx+4);
+ context._cmp(context.cl, context.al);
+ if (!context.flags.c()) goto nofirst;
+ context._cmp(context.ch, context.ah);
+ if (!context.flags.c()) goto nofirst;
+ goto gotfirst;
+nofirst:
+ context._add(context.bx, 8);
+ context._add(context.dl, 1);
+ context._cmp(context.dl, 12);
+ if (!context.flags.z()) goto fpathloop;
+ context.al = 0;
+ return;
+gotfirst:
+ context.al = context.data.byte(context.bx+6);
+ return;
+}
+
+static inline void turnpathoff(Context & context) {
+ context.push(context.ax);
+ context.push(context.ax);
+ context.cl = 0;
+ context.ch = context.data.byte(185);
+ context._add(context.ch, 100);
+ findormake(context);
+ context.ax = context.pop();
+ getroomspaths(context);
+ context.ax = context.pop();
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto nopathoff;
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = 0;
+ context.data.byte(context.bx+6) = context.al;
+nopathoff:
+ return;
+}
+
+static inline void turnanypathoff(Context & context) {
+ context.push(context.ax);
+ context.push(context.ax);
+ context.cl = 0;
+ context.ch = context.ah;
+ context._add(context.ch, 100);
+ findormake(context);
+ context.ax = context.pop();
+ context.al = context.ah;
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context.es = context.data.word(450);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = 0;
+ context.data.byte(context.bx+6) = context.al;
+ return;
+}
+
+static inline void obname(Context & context) {
+ context._cmp(context.data.byte(473), 0);
+ if (context.flags.z()) goto notnewpath;
+ context.data.byte(473) = 0;
+ goto diff;
+notnewpath:
+ context._cmp(context.ah, context.data.byte(100));
+ if (context.flags.z()) goto notdiffob;
+ goto diff;
+notdiffob:
+ context._cmp(context.al, context.data.byte(99));
+ if (!context.flags.z()) goto diff;
+ context._cmp(context.data.byte(306), 1);
+ if (context.flags.z()) goto walkandexamine;
+ context._cmp(context.data.word(202), 0);
+ if (context.flags.z()) goto noobselect;
+ context._cmp(context.data.byte(100), 3);
+ if (!context.flags.z()) goto isntblock;
+ context._cmp(context.data.byte(153), 2);
+ if (context.flags.c()) goto noobselect;
+isntblock:
+ context.bl = context.data.byte(475);
+ context._cmp(context.bl, context.data.byte(474));
+ if (!context.flags.z()) goto wantstowalk;
+ context._cmp(context.data.byte(100), 3);
+ if (context.flags.z()) goto wantstowalk;
+ finishedwalking(context);
+ if (!context.flags.z()) goto noobselect;
+ context._cmp(context.data.byte(100), 5);
+ if (context.flags.z()) goto wantstotalk;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto noobselect;
+ examineob(context);
+ return;
+wantstotalk:
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto noobselect;
+ talk(context);
+ return;
+walkandexamine:
+ finishedwalking(context);
+ if (!context.flags.z()) goto noobselect;
+ context.al = context.data.byte(307);
+ context.data.byte(100) = context.al;
+ context.al = context.data.byte(308);
+ context.data.byte(99) = context.al;
+ context.data.byte(306) = 0;
+ context._cmp(context.data.byte(100), 5);
+ if (context.flags.z()) goto noobselect;
+ examineob(context);
+ return;
+wantstowalk:
+ setwalk(context);
+ context.data.byte(473) = 1;
+noobselect:
+ return;
+diff:
+ context.data.byte(99) = context.al;
+ context.data.byte(100) = context.ah;
+diff2:
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto middleofwalk;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto middleofwalk;
+ context.al = context.data.byte(133);
+ context._cmp(context.al, context.data.byte(135));
+ if (!context.flags.z()) goto middleofwalk;
+ context._cmp(context.data.byte(100), 3);
+ if (!context.flags.z()) goto notblock;
+ context.bl = context.data.byte(475);
+ context._cmp(context.bl, context.data.byte(474));
+ if (!context.flags.z()) goto dontcheck;
+ context.cl = context.data.byte(151);
+ context._add(context.cl, 12);
+ context.ch = context.data.byte(152);
+ context._add(context.ch, 12);
+ checkone(context);
+ context._cmp(context.cl, 2);
+ if (context.flags.c()) goto isblock;
+dontcheck:
+ getflagunderp(context);
+ context._cmp(context.data.byte(153), 2);
+ if (context.flags.c()) goto isblock;
+ context._cmp(context.data.byte(153), 128);
+ if (!context.flags.c()) goto isblock;
+ goto toofaraway;
+notblock:
+ context.bl = context.data.byte(475);
+ context._cmp(context.bl, context.data.byte(474));
+ if (!context.flags.z()) goto toofaraway;
+ context._cmp(context.data.byte(100), 3);
+ if (context.flags.z()) goto isblock;
+ context._cmp(context.data.byte(100), 5);
+ if (context.flags.z()) goto isaperson;
+ examineobtext(context);
+ return;
+middleofwalk:
+ blocknametext(context);
+ return;
+isblock:
+ blocknametext(context);
+ return;
+isaperson:
+ personnametext(context);
+ return;
+toofaraway:
+ walktotext(context);
+ return;
+}
+
+static inline void commandonly(Context & context) {
+ context.push(context.ax);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.dx);
+ context.push(context.es);
+ context.push(context.ds);
+ context.push(context.si);
+ context.push(context.di);
+ deltextline(context);
+ context.di = context.pop();
+ context.si = context.pop();
+ context.ds = context.pop();
+ context.es = context.pop();
+ context.dx = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.es = context.data.word(452);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+ context.di = context.data.word(79);
+ context.bx = context.data.word(81);
+ context.dl = context.data.byte(82);
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.data.byte(109) = 1;
+ return;
+}
+
+static inline void printmessage2(Context & context) {
+ context.push(context.dx);
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.ax);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.es = context.data.word(452);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+ context.ax = context.pop();
+searchmess:
+ context.push(context.ax);
+ findnextcolon(context);
+ context.ax = context.pop();
+ context._sub(context.ah, 1);
+ if (!context.flags.z()) goto searchmess;
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.dx = context.pop();
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ return;
+}
+
+static inline void usetempcharset(Context & context) {
+ context.ax = context.data.word(406);
+ context.data.word(268) = context.ax;
+ return;
+}
+
+static inline void blank(Context & context) {
+ context._cmp(context.data.byte(100), 199);
+ if (context.flags.z()) goto alreadyblnk;
+ context.data.byte(100) = 199;
+ context.al = 0;
+ commandonly(context);
+alreadyblnk:
+ return;
+}
+
+static inline void allpointer(Context & context) {
+ readmouse(context);
+ showpointer(context);
+ dumppointer(context);
+ return;
+}
+
+static inline void hangoncurs(Context & context) {
+monloop1:
+ context.push(context.cx);
+ printcurs(context);
+ vsync(context);
+ delcurs(context);
+ context.cx = context.pop();
+ if (--context.cx) goto monloop1;
+ return;
+}
+
+static inline void readkey(Context & context) {
+ context.bx = context.data.word(396);
+ context._cmp(context.bx, context.data.word(394));
+ if (context.flags.z()) goto nokey;
+ context._add(context.bx, 1);
+ context._and(context.bx, 15);
+ context.data.word(396) = context.bx;
+ context.di = 5715;
+ context._add(context.di, context.bx);
+ context.al = context.data.byte(context.di);
+ context.data.byte(142) = context.al;
+ return;
+nokey:
+ context.data.byte(142) = 0;
+ return;
+}
+
+static inline void convertkey(Context & context) {
+ context._and(context.al, 127);
+ context.ah = 0;
+ context.di = 5731;
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(context.di);
+ return;
+}
+
+static inline void randomnum2(Context & context) {
+ context.push(context.ds);
+ context.push(context.es);
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.ax);
+ randomnumber(context);
+ context.cl = context.al;
+ context.ax = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.es = context.pop();
+ context.ds = context.pop();
+ return;
+}
+
+static inline void loadtempcharset(Context & context) {
+ standardload(context);
+ context.data.word(406) = context.ax;
+ return;
+}
+
+static inline void getridofall(Context & context) {
+ context.es = context.data.word(416);
+ deallocatemem(context);
+ context.es = context.data.word(444);
+ deallocatemem(context);
+ context.es = context.data.word(430);
+ deallocatemem(context);
+ context.es = context.data.word(432);
+ deallocatemem(context);
+ context.es = context.data.word(434);
+ deallocatemem(context);
+ context.es = context.data.word(450);
+ deallocatemem(context);
+ context.es = context.data.word(448);
+ deallocatemem(context);
+ context.es = context.data.word(440);
+ deallocatemem(context);
+ context.es = context.data.word(442);
+ deallocatemem(context);
+ context.es = context.data.word(436);
+ deallocatemem(context);
+ context.es = context.data.word(446);
+ deallocatemem(context);
+ context.es = context.data.word(438);
+ deallocatemem(context);
+ return;
+}
+
+static inline void restoreall(Context & context) {
+ context.al = context.data.byte(9);
+ getroomdata(context);
+ context.dx = context.bx;
+ openfile(context);
+ readheader(context);
+ allocateload(context);
+ context.ds = context.ax;
+ context.data.word(416) = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ context.ds = context.data.word(400);
+ context.dx = 0;
+ context.cx = 132*66;
+ context.al = 0;
+ fillspace(context);
+ loadseg(context);
+ sortoutmap(context);
+ allocateload(context);
+ context.data.word(444) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ dontloadseg(context);
+ allocateload(context);
+ context.data.word(430) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(432) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(434) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(450) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(448) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(440) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(442) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(436) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(446) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ dontloadseg(context);
+ allocateload(context);
+ context.data.word(438) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ closefile(context);
+ setallchanges(context);
+ return;
+}
+
+static inline void disablepath(Context & context) {
+ context.push(context.cx);
+ context._xchg(context.al, context.ah);
+ context.cx = -6;
+looky2:
+ context._add(context.cx, 6);
+ context._sub(context.al, 10);
+ if (!context.flags.c()) goto looky2;
+ context.al = context.ah;
+ context._sub(context.cx, 1);
+lookx2:
+ context._add(context.cx, 1);
+ context._sub(context.al, 11);
+ if (!context.flags.c()) goto lookx2;
+ context.al = context.cl;
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context.es = context.data.word(450);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = 0;
+ context.data.byte(context.bx+6) = context.al;
+ return;
+}
+
+static inline void getridoftempcharset(Context & context) {
+ context.es = context.data.word(406);
+ deallocatemem(context);
+ return;
+}
+
+static inline void getridoftempsp(Context & context) {
+ context.es = context.data.word(464);
+ deallocatemem(context);
+ return;
+}
+
+static inline void checkforemm(Context & context) {
+ return;
+}
+
+static inline void trysoundalloc(Context & context) {
+ context._cmp(context.data.byte(358), 1);
+ if (context.flags.z()) goto gotsoundbuff;
+ context._add(context.data.byte(357), 1);
+ context.bx = (16384+2048)/16;
+ allocatemem(context);
+ context.data.word(353) = context.ax;
+ context.push(context.ax);
+ context.al = context.ah;
+ context.cl = 4;
+ context._shr(context.al, context.cl);
+ context.data.byte(356) = context.al;
+ context.ax = context.pop();
+ context.cl = 4;
+ context._shl(context.ax, context.cl);
+ context.data.word(355) = context.ax;
+ context._cmp(context.ax, 0x0b7ff);
+ if (!context.flags.c()) goto soundfail;
+ context.es = context.data.word(353);
+ context.di = 0;
+ context.cx = 16384/2;
+ context.ax = 0x7f7f;
+ while(--context.cx) context._stosw();
+ context.data.byte(358) = 1;
+ return;
+soundfail:
+ context.es = context.data.word(353);
+ deallocatemem(context);
+gotsoundbuff:
+ return;
+}
+
+static inline void allocatework(Context & context) {
+ context.bx = 0x1000;
+ allocatemem(context);
+ context.data.word(400) = context.ax;
+ return;
+}
+
+static inline void allocatebuffers(Context & context) {
+ context.bx = 0+2080+30000+(16*114)+((114+2)*2)+18000/16;
+ allocatemem(context);
+ context.data.word(398) = context.ax;
+ trysoundalloc(context);
+ context.bx = 0+(66*60)/16;
+ allocatemem(context);
+ context.data.word(418) = context.ax;
+ trysoundalloc(context);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537)+68-context.data.byte(1)/16;
+ allocatemem(context);
+ context.data.word(412) = context.ax;
+ trysoundalloc(context);
+ context.bx = 16*80/16;
+ allocatemem(context);
+ context.data.word(426) = context.ax;
+ trysoundalloc(context);
+ context.bx = 64*128/16;
+ allocatemem(context);
+ context.data.word(428) = context.ax;
+ trysoundalloc(context);
+ context.bx = 22*8*20*8/16;
+ allocatemem(context);
+ context.data.word(402) = context.ax;
+ allocatework(context);
+ context.bx = 2048/16;
+ allocatemem(context);
+ context.data.word(420) = context.ax;
+ context.bx = 2048/16;
+ allocatemem(context);
+ context.data.word(422) = context.ax;
+ return;
+}
+
+static inline void clearbuffers(Context & context) {
+ context.es = context.data.word(412);
+ context.cx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537)+68-context.data.byte(1)/2;
+ context.ax = 0;
+ context.di = 0;
+ while(--context.cx) context._stosw();
+ context.es = context.data.word(398);
+ context.cx = 0+2080+30000+(16*114)+((114+2)*2)+18000/2;
+ context.ax = 0x0ffff;
+ context.di = 0;
+ while(--context.cx) context._stosw();
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64);
+ context.ds = context.cs;
+ context.si = 537;
+ context.cx = 991-context.data.byte(537);
+ while(--context.cx) context._movsb();
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537);
+ context.ds = context.cs;
+ context.si = 1;
+ context.cx = 68-context.data.byte(1);
+ while(--context.cx) context._movsb();
+ clearchanges(context);
+ return;
+}
+
+static inline void clearpalette(Context & context) {
+ context.data.byte(344) = 0;
+ clearstartpal(context);
+ dumpcurrent(context);
+ return;
+}
+
+static inline void readsetdata(Context & context) {
+ context.dx = 1870;
+ standardload(context);
+ context.data.word(404) = context.ax;
+ context.dx = 1935;
+ standardload(context);
+ context.data.word(408) = context.ax;
+ context.dx = 1948;
+ standardload(context);
+ context.data.word(410) = context.ax;
+ context.dx = 1832;
+ standardload(context);
+ context.data.word(414) = context.ax;
+ context.dx = 2234;
+ standardload(context);
+ context.data.word(454) = context.ax;
+ context.dx = 2286;
+ standardload(context);
+ context.data.word(452) = context.ax;
+ context.ax = context.data.word(404);
+ context.data.word(268) = context.ax;
+ context._cmp(context.data.byte(378), 255);
+ if (context.flags.z()) goto novolumeload;
+ context.dx = 2299;
+ openfile(context);
+ context.cx = 2048-256;
+ context.ds = context.data.word(353);
+ context.dx = 16384;
+ readfromfile(context);
+ closefile(context);
+novolumeload:
+ return;
+}
+
+static inline void loadpalfromiff(Context & context) {
+ context.dx = 2494;
+ openfile(context);
+ context.cx = 2000;
+ context.ds = context.data.word(402);
+ context.dx = 0;
+ readfromfile(context);
+ closefile(context);
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768;
+ context.ds = context.data.word(402);
+ context.si = 0x30;
+ context.cx = 768;
+palloop:
+ context._lodsb();
+ context._shr(context.al, 1);
+ context._shr(context.al, 1);
+ context._cmp(context.data.byte(73), 1);
+ if (!context.flags.z()) goto nought;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto nought;
+ context.ah = context.al;
+ context._shr(context.ah, 1);
+ context._add(context.al, context.ah);
+ context._shr(context.ah, 1);
+ context._add(context.al, context.ah);
+ context._cmp(context.al, 64);
+ if (context.flags.c()) goto nought;
+ context.al = 63;
+nought:
+ context._stosb();
+ if (--context.cx) goto palloop;
+ return;
+}
+
+static inline void biblequote(Context & context) {
+ mode640x480(context);
+ context.dx = 2390;
+ showpcx(context);
+ fadescreenups(context);
+ context.cx = 80;
+ hangone(context);
+ context.cx = 560;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 200;
+ hangone(context);
+ cancelch0(context);
+ return;
+}
+
+static inline void runintroseq(Context & context) {
+ context.data.byte(103) = 0;
+moreintroseq:
+ vsync(context);
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto earlyendrun;
+ spriteupdate(context);
+ vsync(context);
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto earlyendrun;
+ deleverything(context);
+ printsprites(context);
+ reelsonscreen(context);
+ afterintroroom(context);
+ usetimedtext(context);
+ vsync(context);
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto earlyendrun;
+ dumpmap(context);
+ dumptimedtext(context);
+ vsync(context);
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto earlyendrun;
+ context._cmp(context.data.byte(103), 1);
+ if (!context.flags.z()) goto moreintroseq;
+ return;
+earlyendrun:
+ context.ax = context.pop();
+ context.ax = context.pop();
+ getridoftemptext(context);
+ clearbeforeload(context);
+ return;
+}
+
+static inline void intro(Context & context) {
+ context.dx = 2260;
+ loadtemptext(context);
+ loadpalfromiff(context);
+ setmode(context);
+ context.data.byte(188) = 50;
+ clearpalette(context);
+ loadintroroom(context);
+ context.data.byte(386) = 7;
+ context.data.byte(388) = -1;
+ context.data.byte(387) = 0;
+ context.al = 12;
+ context.ah = 255;
+ playchannel0(context);
+ fadescreenups(context);
+ runintroseq(context);
+ clearbeforeload(context);
+ context.data.byte(188) = 52;
+ loadintroroom(context);
+ runintroseq(context);
+ clearbeforeload(context);
+ context.data.byte(188) = 53;
+ loadintroroom(context);
+ runintroseq(context);
+ clearbeforeload(context);
+ allpalette(context);
+ context.data.byte(188) = 54;
+ loadintroroom(context);
+ runintroseq(context);
+ getridoftemptext(context);
+ clearbeforeload(context);
+ return;
+}
+
+static inline void titles(Context & context) {
+ clearpalette(context);
+ biblequote(context);
+ intro(context);
+ return;
+}
+
+static inline void dumpcurrent(Context & context) {
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.ds = context.data.word(412);
+ vsync(context);
+ context.al = 0;
+ context.cx = 128;
+ showgroup(context);
+ vsync(context);
+ context.al = 128;
+ context.cx = 128;
+ showgroup(context);
+ return;
+}
+
+static inline void allpalette(Context & context) {
+ context.es = context.data.word(412);
+ context.ds = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768;
+ context.cx = 768/2;
+ while(--context.cx) context._movsw();
+ dumpcurrent(context);
+ return;
+}
+
+static inline void realcredits(Context & context) {
+ context.data.byte(531) = 33;
+ loadroomssample(context);
+ context.data.byte(386) = 0;
+ mode640x480(context);
+ context.cx = 35;
+ hangon(context);
+ context.dx = 2403;
+ showpcx(context);
+ context.al = 12;
+ context.ah = 0;
+ playchannel0(context);
+ context.cx = 2;
+ hangone(context);
+ allpalette(context);
+ context.cx = 80;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 256;
+ hangone(context);
+ context.dx = 2416;
+ showpcx(context);
+ context.al = 12;
+ context.ah = 0;
+ playchannel0(context);
+ context.cx = 2;
+ hangone(context);
+ allpalette(context);
+ context.cx = 80;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 256;
+ hangone(context);
+ context.dx = 2429;
+ showpcx(context);
+ context.al = 12;
+ context.ah = 0;
+ playchannel0(context);
+ context.cx = 2;
+ hangone(context);
+ allpalette(context);
+ context.cx = 80;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 256;
+ hangone(context);
+ context.dx = 2442;
+ showpcx(context);
+ context.al = 12;
+ context.ah = 0;
+ playchannel0(context);
+ context.cx = 2;
+ hangone(context);
+ allpalette(context);
+ context.cx = 80;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 256;
+ hangone(context);
+ context.dx = 2455;
+ showpcx(context);
+ context.al = 12;
+ context.ah = 0;
+ playchannel0(context);
+ context.cx = 2;
+ hangone(context);
+ allpalette(context);
+ context.cx = 80;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 256;
+ hangone(context);
+ context.dx = 2468;
+ showpcx(context);
+ fadescreenups(context);
+ context.cx = 60;
+ hangone(context);
+ context.al = 13;
+ context.ah = 0;
+ playchannel0(context);
+ context.cx = 350;
+ hangone(context);
+ fadescreendowns(context);
+ context.cx = 256;
+ hangone(context);
+ return;
+}
+
+static inline void credits(Context & context) {
+ clearpalette(context);
+ realcredits(context);
+ return;
+}
+
+static inline void cls(Context & context) {
+ context.ax = 0x0a000;
+ context.es = context.ax;
+ context.di = 0;
+ context.cx = 0x7fff;
+ context.ax = 0;
+ while(--context.cx) context._stosw();
+ return;
+}
+
+static inline void loadsavebox(Context & context) {
+ context.dx = 1974;
+ loadintotemp(context);
+ return;
+}
+
+static inline void showopbox(Context & context) {
+ context.ds = context.data.word(458);
+ context.di = 60;
+ context.bx = 52;
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 60;
+ context.bx = 52+55;
+ context.al = 4;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void showdecisions(Context & context) {
+ createpanel2(context);
+ showopbox(context);
+ context.ds = context.data.word(458);
+ context.di = 60+17;
+ context.bx = 52+13;
+ context.al = 6;
+ context.ah = 0;
+ showframe(context);
+ undertextline(context);
+ return;
+}
+
+static inline void decide(Context & context) {
+ setmode(context);
+ loadpalfromiff(context);
+ clearpalette(context);
+ context.data.byte(234) = 0;
+ context.data.word(21) = 0;
+ context.data.byte(231) = 0;
+ context.data.word(79) = 70;
+ context.data.word(81) = 182-8;
+ context.data.byte(82) = 181;
+ context.data.byte(131) = 1;
+ loadsavebox(context);
+ showdecisions(context);
+ worktoscreen(context);
+ fadescreenup(context);
+ context.data.byte(103) = 0;
+waitdecide:
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ delpointer(context);
+ context.bx = 4884;
+ checkcoords(context);
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto waitdecide;
+ context._cmp(context.data.byte(103), 4);
+ if (context.flags.z()) goto hasloadedroom;
+ getridoftemp(context);
+hasloadedroom:
+ context.data.word(79) = 13;
+ context.data.word(81) = 182;
+ context.data.byte(82) = 240;
+ return;
+}
+
+static inline void clearchanges(Context & context) {
+ context.es = context.data.word(412);
+ context.cx = 250*2;
+ context.ax = 0x0ffff;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80);
+ while(--context.cx) context._stosw();
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64);
+ context.es = context.cs;
+ context.di = 537;
+ context.cx = 991-context.data.byte(537);
+ while(--context.cx) context._movsb();
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537);
+ context.es = context.cs;
+ context.di = 1;
+ context.cx = 68-context.data.byte(1);
+ while(--context.cx) context._movsb();
+ context.data.byte(10) = 0;
+ context.data.word(12) = 0;
+ context.data.word(14) = 0;
+ context.es = context.data.word(398);
+ context.cx = 0+2080+30000+(16*114)+((114+2)*2)+18000/2;
+ context.ax = 0x0ffff;
+ context.di = 0;
+ while(--context.cx) context._stosw();
+ context.es = context.cs;
+ context.di = 7798;
+ context.al = 1;
+ context._stosb();
+ context._stosb();
+ context.al = 0;
+ context._stosb();
+ context.al = 1;
+ context._stosb();
+ context.ax = 0;
+ context.cx = 6;
+ while(--context.cx) context._stosw();
+ return;
+}
+
+static inline void fillspace(Context & context) {
+ context.push(context.es);
+ context.push(context.ds);
+ context.push(context.dx);
+ context.push(context.di);
+ context.push(context.bx);
+ context.di = context.dx;
+ context.es = context.ds;
+ while(--context.cx) context._stosb();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.dx = context.pop();
+ context.ds = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void sortoutmap(Context & context) {
+ context.push(context.es);
+ context.push(context.di);
+ context.ds = context.data.word(400);
+ context.si = 0;
+ context.es = context.data.word(418);
+ context.di = 0;
+ context.cx = 60;
+blimey:
+ context.push(context.cx);
+ context.push(context.si);
+ context.cx = 66;
+ while(--context.cx) context._movsb();
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 132);
+ if (--context.cx) goto blimey;
+ context.di = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void deletetaken(Context & context) {
+ context.es = context.data.word(426);
+ context.ah = context.data.byte(184);
+ context.ds = context.data.word(398);
+ context.si = 0+2080+30000;
+ context.cx = 114;
+takenloop:
+ context.al = context.data.byte(context.si+11);
+ context._cmp(context.al, context.ah);
+ if (!context.flags.z()) goto notinhere;
+ context.bl = context.data.byte(context.si+1);
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context._add(context.bx, context.bx);
+ context._add(context.bx, context.bx);
+ context._add(context.bx, context.bx);
+ context.data.byte(context.bx+2) = 254;
+notinhere:
+ context._add(context.si, 16);
+ if (--context.cx) goto takenloop;
+ return;
+}
+
+static inline void dochange(Context & context) {
+ context._cmp(context.ch, 0);
+ if (context.flags.z()) goto object;
+ context._cmp(context.ch, 1);
+ if (context.flags.z()) goto freeobject;
+path:
+ context.push(context.cx);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context.push(context.ax);
+ context.al = context.ch;
+ context._sub(context.al, 100);
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context.bx = context.pop();
+ context._add(context.bx, context.ax);
+ context._add(context.bx, 0);
+ context.es = context.data.word(450);
+ context.cx = context.pop();
+ context.data.byte(context.bx+6) = context.cl;
+nopath:
+ return;
+object:
+ context.push(context.cx);
+ getsetad(context);
+ context.cx = context.pop();
+ context.data.byte(context.bx+58) = context.cl;
+ return;
+freeobject:
+ context.push(context.cx);
+ getfreead(context);
+ context.cx = context.pop();
+ context._cmp(context.data.byte(context.bx+2), 255);
+ if (!context.flags.z()) goto beenpickedup;
+ context.data.byte(context.bx+2) = context.cl;
+beenpickedup:
+ return;
+}
+
+static inline void setallchanges(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80);
+setallloop:
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto endsetloop;
+ context.cx = context.data.word(context.bx+2);
+ context._add(context.bx, 4);
+ context._cmp(context.ah, context.data.byte(184));
+ if (!context.flags.z()) goto setallloop;
+ context.push(context.es);
+ context.push(context.bx);
+ dochange(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ goto setallloop;
+endsetloop:
+ return;
+}
+
+static inline void autoappear(Context & context) {
+ context._cmp(context.data.byte(9), 32);
+ if (!context.flags.z()) goto notinalley;
+ context.al = 5;
+ resetlocation(context);
+ context.al = 10;
+ setlocation(context);
+ context.data.byte(183) = 10;
+ return;
+notinalley:
+ context._cmp(context.data.byte(184), 24);
+ if (!context.flags.z()) goto notinedens;
+ context._cmp(context.data.byte(42), 1);
+ if (!context.flags.z()) goto edenspart2;
+ context._add(context.data.byte(42), 1);
+ context.al = 44;
+ placesetobject(context);
+ context.al = 18;
+ placesetobject(context);
+ context.al = 93;
+ placesetobject(context);
+ context.al = 92;
+ removesetobject(context);
+ context.al = 55;
+ removesetobject(context);
+ context.al = 75;
+ removesetobject(context);
+ context.al = 84;
+ removesetobject(context);
+ context.al = 85;
+ removesetobject(context);
+ return;
+edenspart2:
+ context._cmp(context.data.byte(43), 1);
+ if (!context.flags.z()) goto notedens2;
+ context.al = 44;
+ removesetobject(context);
+ context.al = 93;
+ removesetobject(context);
+ context.al = 55;
+ placesetobject(context);
+ context._add(context.data.byte(43), 1);
+notedens2:
+ return;
+notinedens:
+ context._cmp(context.data.byte(184), 25);
+ if (!context.flags.z()) goto notonsartroof;
+ context.data.byte(34) = 3;
+ context.al = 6;
+ resetlocation(context);
+ context.al = 11;
+ setlocation(context);
+ context.data.byte(183) = 11;
+ return;
+notonsartroof:
+ context._cmp(context.data.byte(184), 2);
+ if (!context.flags.z()) goto notinlouiss;
+ context._cmp(context.data.byte(41), 0);
+ if (context.flags.z()) goto notinlouiss;
+ context.al = 23;
+ placesetobject(context);
+notinlouiss:
+ return;
+}
+
+static inline void startloading(Context & context) {
+ context.data.byte(64) = 0;
+ context.al = context.data.byte(context.bx+13);
+ context.data.byte(531) = context.al;
+ context.al = context.data.byte(context.bx+15);
+ context.data.byte(148) = context.al;
+ context.al = context.data.byte(context.bx+16);
+ context.data.byte(149) = context.al;
+ context.al = context.data.byte(context.bx+20);
+ context.data.byte(35) = context.al;
+ context.al = context.data.byte(context.bx+21);
+ context.data.byte(475) = context.al;
+ context.data.byte(478) = context.al;
+ context.data.byte(477) = context.al;
+ context.al = context.data.byte(context.bx+22);
+ context.data.byte(133) = context.al;
+ context.data.byte(135) = context.al;
+ context.al = context.data.byte(context.bx+23);
+ context.data.byte(39) = context.al;
+ context.al = context.data.byte(context.bx+24);
+ context.data.byte(36) = context.al;
+ context.al = context.data.byte(context.bx+25);
+ context.data.byte(38) = context.al;
+ context.data.byte(65) = -1;
+ context.al = context.data.byte(context.bx+27);
+ context.push(context.ax);
+ context.al = context.data.byte(context.bx+31);
+ context.ah = context.data.byte(184);
+ context.data.byte(184) = context.al;
+ context.dx = context.bx;
+ openfile(context);
+ readheader(context);
+ allocateload(context);
+ context.ds = context.ax;
+ context.data.word(416) = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ context.ds = context.data.word(400);
+ context.dx = 0;
+ context.cx = 132*66;
+ context.al = 0;
+ fillspace(context);
+ loadseg(context);
+ sortoutmap(context);
+ allocateload(context);
+ context.data.word(444) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ context.ds = context.data.word(428);
+ context.dx = 0;
+ context.cx = 64*128;
+ context.al = 255;
+ fillspace(context);
+ loadseg(context);
+ allocateload(context);
+ context.data.word(430) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(432) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(434) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(450) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(448) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(440) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(442) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(436) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(446) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ context.ds = context.data.word(426);
+ context.dx = 0;
+ context.cx = 16*80;
+ context.al = 255;
+ fillspace(context);
+ loadseg(context);
+ allocateload(context);
+ context.data.word(438) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ closefile(context);
+ findroominloc(context);
+ deletetaken(context);
+ setallchanges(context);
+ autoappear(context);
+ context.al = context.data.byte(188);
+ getroomdata(context);
+ context.data.byte(65) = -1;
+ context.data.byte(56) = 0;
+ context.data.word(98) = 160;
+ context.data.byte(188) = 255;
+ context.data.byte(492) = 254;
+ context.ax = context.pop();
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto dontwalkin;
+ context.data.byte(475) = context.al;
+ context.push(context.bx);
+ autosetwalk(context);
+ context.bx = context.pop();
+dontwalkin:
+ findxyfrompath(context);
+ return;
+}
+
+static inline void loadroom(Context & context) {
+ context.data.byte(74) = 1;
+ context.data.word(328) = 0;
+ context.data.word(138) = 0;
+ context.data.word(121) = 104;
+ context.data.word(123) = 38;
+ context.data.word(79) = 13;
+ context.data.word(81) = 182;
+ context.data.byte(82) = 240;
+ context.al = context.data.byte(188);
+ context.data.byte(9) = context.al;
+ getroomdata(context);
+ startloading(context);
+ loadroomssample(context);
+ switchryanon(context);
+ drawflags(context);
+ getdimension(context);
+ return;
+}
+
+static inline void clearsprites(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
+ context.al = 255;
+ context.cx = 32*16;
+ while(--context.cx) context._stosb();
+ return;
+}
+
+static inline void initman(Context & context) {
+ context.al = context.data.byte(151);
+ context.ah = context.data.byte(152);
+ context.si = context.ax;
+ context.cx = 49464;
+ context.dx = context.data.word(414);
+ context.di = 0;
+ makesprite(context);
+ context.data.byte(context.bx+23) = 4;
+ context.data.byte(context.bx+22) = 0;
+ context.data.byte(context.bx+29) = 0;
+ return;
+}
+
+static inline void entrytexts(Context & context) {
+ context._cmp(context.data.byte(9), 21);
+ if (!context.flags.z()) goto notloc15;
+ context.al = 28;
+ context.cx = 60;
+ context.dx = 11;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+notloc15:
+ context._cmp(context.data.byte(9), 30);
+ if (!context.flags.z()) goto notloc43;
+ context.al = 27;
+ context.cx = 60;
+ context.dx = 11;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+notloc43:
+ context._cmp(context.data.byte(9), 23);
+ if (!context.flags.z()) goto notloc23;
+ context.al = 29;
+ context.cx = 60;
+ context.dx = 11;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+notloc23:
+ context._cmp(context.data.byte(9), 31);
+ if (!context.flags.z()) goto notloc44;
+ context.al = 30;
+ context.cx = 60;
+ context.dx = 11;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+notloc44:
+ context._cmp(context.data.byte(9), 20);
+ if (!context.flags.z()) goto notsarters2;
+ context.al = 31;
+ context.cx = 60;
+ context.dx = 11;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+notsarters2:
+ context._cmp(context.data.byte(9), 24);
+ if (!context.flags.z()) goto notedenlob;
+ context.al = 32;
+ context.cx = 60;
+ context.dx = 3;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+notedenlob:
+ context._cmp(context.data.byte(9), 34);
+ if (!context.flags.z()) goto noteden2;
+ context.al = 33;
+ context.cx = 60;
+ context.dx = 3;
+ context.bl = 68;
+ context.bh = 64;
+ setuptimeduse(context);
+ return;
+noteden2:
+ return;
+}
+
+static inline void purgealocation(Context & context) {
+ context.push(context.ax);
+ context.es = context.data.word(398);
+ context.di = 0+2080+30000;
+ context.bx = context.pop();
+ context.cx = 0;
+purgeloc:
+ context._cmp(context.bl, context.data.byte(context.di+0));
+ if (!context.flags.z()) goto dontpurge;
+ context._cmp(context.data.byte(context.di+2), 0);
+ if (!context.flags.z()) goto dontpurge;
+ context.push(context.di);
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.cx);
+ deleteexobject(context);
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.di = context.pop();
+dontpurge:
+ context._add(context.di, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 114);
+ if (!context.flags.z()) goto purgeloc;
+ return;
+}
+
+static inline void resetlocation(Context & context) {
+ context.push(context.ax);
+ context._cmp(context.al, 5);
+ if (!context.flags.z()) goto notdelhotel;
+ purgealocation(context);
+ context.al = 21;
+ purgealocation(context);
+ context.al = 22;
+ purgealocation(context);
+ context.al = 27;
+ purgealocation(context);
+ goto clearedlocations;
+notdelhotel:
+ context._cmp(context.al, 8);
+ if (!context.flags.z()) goto notdeltvstud;
+ purgealocation(context);
+ context.al = 28;
+ purgealocation(context);
+ goto clearedlocations;
+notdeltvstud:
+ context._cmp(context.al, 6);
+ if (!context.flags.z()) goto notdelsarters;
+ purgealocation(context);
+ context.al = 20;
+ purgealocation(context);
+ context.al = 25;
+ purgealocation(context);
+ goto clearedlocations;
+notdelsarters:
+ context._cmp(context.al, 13);
+ if (!context.flags.z()) goto notdelboathouse;
+ purgealocation(context);
+ context.al = 29;
+ purgealocation(context);
+ goto clearedlocations;
+notdelboathouse:
+clearedlocations:
+ context.ax = context.pop();
+ context.ah = 0;
+ context.bx = context.ax;
+ context.dx = context.ds;
+ context.es = context.dx;
+ context._add(context.bx, 7798);
+ context.data.byte(context.bx) = 0;
+ return;
+}
+
+static inline void checkifpathison(Context & context) {
+ context.push(context.ax);
+ getroomspaths(context);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx+6);
+ context._cmp(context.al, 255);
+ return;
+}
+
+static inline void turnpathon(Context & context) {
+ context.push(context.ax);
+ context.push(context.ax);
+ context.cl = 255;
+ context.ch = context.data.byte(185);
+ context._add(context.ch, 100);
+ findormake(context);
+ context.ax = context.pop();
+ getroomspaths(context);
+ context.ax = context.pop();
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto nopathon;
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = 255;
+ context.data.byte(context.bx+6) = context.al;
+nopathon:
+ return;
+}
+
+static inline void turnanypathon(Context & context) {
+ context.push(context.ax);
+ context.push(context.ax);
+ context.cl = 255;
+ context.ch = context.ah;
+ context._add(context.ch, 100);
+ findormake(context);
+ context.ax = context.pop();
+ context.al = context.ah;
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context.es = context.data.word(450);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = 255;
+ context.data.byte(context.bx+6) = context.al;
+ return;
+}
+
+static inline void entryanims(Context & context) {
+ context.data.word(23) = -1;
+ context.data.byte(32) = -1;
+ context._cmp(context.data.byte(9), 33);
+ if (!context.flags.z()) goto notinthebeach;
+ switchryanoff(context);
+ context.data.word(21) = 76*2;
+ context.data.word(23) = 0;
+ context.data.word(25) = 76;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ return;
+notinthebeach:
+ context._cmp(context.data.byte(9), 44);
+ if (!context.flags.z()) goto notsparkys;
+ context.al = 8;
+ resetlocation(context);
+ context.data.word(21) = 50*2;
+ context.data.word(23) = 247;
+ context.data.word(25) = 297;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ switchryanoff(context);
+ return;
+notsparkys:
+ context._cmp(context.data.byte(9), 22);
+ if (!context.flags.z()) goto notinthelift;
+ context.data.word(21) = 31*2;
+ context.data.word(23) = 0;
+ context.data.word(25) = 30;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ switchryanoff(context);
+ return;
+notinthelift:
+ context._cmp(context.data.byte(9), 26);
+ if (!context.flags.z()) goto notunderchurch;
+ context.data.byte(292) = 2;
+ context.data.byte(295) = 1;
+ return;
+notunderchurch:
+ context._cmp(context.data.byte(9), 45);
+ if (!context.flags.z()) goto notenterdream;
+ context.data.byte(54) = 0;
+ context.data.word(21) = 296;
+ context.data.word(23) = 45;
+ context.data.word(25) = 198;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ switchryanoff(context);
+ return;
+notenterdream:
+ context._cmp(context.data.byte(184), 46);
+ if (!context.flags.z()) goto notcrystal;
+ context._cmp(context.data.byte(43), 1);
+ if (!context.flags.z()) goto notcrystal;
+ context.al = 0;
+ removefreeobject(context);
+ return;
+notcrystal:
+ context._cmp(context.data.byte(9), 9);
+ if (!context.flags.z()) goto nottopchurch;
+ context.al = 2;
+ checkifpathison(context);
+ if (context.flags.z()) goto nottopchurch;
+ context._cmp(context.data.byte(44), 0);
+ if (context.flags.z()) goto nottopchurch;
+ context.al = 3;
+ checkifpathison(context);
+ if (!context.flags.z()) goto makedoorsopen;
+ context.al = 2;
+ turnpathon(context);
+makedoorsopen:
+ context.al = 4;
+ removesetobject(context);
+ context.al = 5;
+ placesetobject(context);
+ return;
+nottopchurch:
+ context._cmp(context.data.byte(9), 47);
+ if (!context.flags.z()) goto notdreamcentre;
+ context.al = 4;
+ placesetobject(context);
+ context.al = 5;
+ placesetobject(context);
+ return;
+notdreamcentre:
+ context._cmp(context.data.byte(9), 38);
+ if (!context.flags.z()) goto notcarpark;
+ context.data.word(21) = 57*2;
+ context.data.word(23) = 4;
+ context.data.word(25) = 57;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ switchryanoff(context);
+ return;
+notcarpark:
+ context._cmp(context.data.byte(9), 32);
+ if (!context.flags.z()) goto notalley;
+ context.data.word(21) = 66*2;
+ context.data.word(23) = 0;
+ context.data.word(25) = 66;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ switchryanoff(context);
+ return;
+notalley:
+ context._cmp(context.data.byte(9), 24);
+ if (!context.flags.z()) goto notedensagain;
+ context.al = 2;
+ context.ah = context.data.byte(185);
+ context._sub(context.ah, 1);
+ turnanypathon(context);
+notedensagain:
+ return;
+}
+
+static inline void deleteexframe(Context & context) {
+ context.di = 0;
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.di, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(context.di);
+ context.ah = 0;
+ context.cl = context.data.byte(context.di+1);
+ context.ch = 0;
+ context._mul(context.cx);
+ context.si = context.data.word(context.di+2);
+ context.push(context.si);
+ context._add(context.si, 0+2080);
+ context.cx = 30000;
+ context._sub(context.cx, context.data.word(context.di+2));
+ context.di = context.si;
+ context._add(context.si, context.ax);
+ context.push(context.ax);
+ context.ds = context.es;
+ while(--context.cx) context._movsb();
+ context.bx = context.pop();
+ context._sub(context.data.word(12), context.bx);
+ context.si = context.pop();
+ context.cx = 114*3;
+ context.di = 0;
+shuffleadsdown:
+ context.ax = context.data.word(context.di+2);
+ context._cmp(context.ax, context.si);
+ if (context.flags.c()) goto beforethisone;
+ context._sub(context.ax, context.bx);
+beforethisone:
+ context.data.word(context.di+2) = context.ax;
+ context._add(context.di, 6);
+ if (--context.cx) goto shuffleadsdown;
+ return;
+}
+
+static inline void deleteextext(Context & context) {
+ context.di = 0+2080+30000+(16*114);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.di, context.ax);
+ context.ax = context.data.word(context.di);
+ context.si = context.ax;
+ context.di = context.ax;
+ context._add(context.si, 0+2080+30000+(16*114)+((114+2)*2));
+ context._add(context.di, 0+2080+30000+(16*114)+((114+2)*2));
+ context.ax = 0;
+findlenextext:
+ context.cl = context.data.byte(context.si);
+ context._add(context.ax, 1);
+ context._add(context.si, 1);
+ context._cmp(context.cl, 0);
+ if (!context.flags.z()) goto findlenextext;
+ context.cx = 18000;
+ context.bx = context.si;
+ context._sub(context.bx, 0+2080+30000+(16*114)+((114+2)*2));
+ context.push(context.bx);
+ context.push(context.ax);
+ context._sub(context.cx, context.bx);
+ while(--context.cx) context._movsb();
+ context.bx = context.pop();
+ context._sub(context.data.word(14), context.bx);
+ context.si = context.pop();
+ context.cx = 114;
+ context.di = 0+2080+30000+(16*114);
+shuffletextads:
+ context.ax = context.data.word(context.di);
+ context._cmp(context.ax, context.si);
+ if (context.flags.c()) goto beforethistext;
+ context._sub(context.ax, context.bx);
+beforethistext:
+ context.data.word(context.di) = context.ax;
+ context._add(context.di, 2);
+ if (--context.cx) goto shuffletextads;
+ return;
+}
+
+static inline void deleteexobject(Context & context) {
+ context.push(context.cx);
+ context.push(context.cx);
+ context.push(context.cx);
+ context.push(context.cx);
+ context.al = 255;
+ context.cx = 16;
+ while(--context.cx) context._stosb();
+ context.ax = context.pop();
+ context.cl = context.al;
+ context._add(context.al, context.al);
+ context._add(context.al, context.cl);
+ deleteexframe(context);
+ context.ax = context.pop();
+ context.cl = context.al;
+ context._add(context.al, context.al);
+ context._add(context.al, context.cl);
+ context._add(context.al, 1);
+ deleteexframe(context);
+ context.ax = context.pop();
+ deleteextext(context);
+ context.bx = context.pop();
+ context.bh = context.bl;
+ context.bl = 4;
+ context.di = 0+2080+30000;
+ context.cx = 0;
+deleteconts:
+ context._cmp(context.data.word(context.di+2), context.bx);
+ if (!context.flags.z()) goto notinsideex;
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.di);
+ deleteexobject(context);
+ context.di = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+notinsideex:
+ context._add(context.di, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 114);
+ if (!context.flags.z()) goto deleteconts;
+ return;
+}
+
+static inline void purgeanitem(Context & context) {
+ context.es = context.data.word(398);
+ context.di = 0+2080+30000;
+ context.bl = context.data.byte(184);
+ context.cx = 0;
+lookforpurge:
+ context.al = context.data.byte(context.di+2);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto cantpurge;
+ context._cmp(context.data.byte(context.di+12), 2);
+ if (context.flags.z()) goto iscup;
+ context._cmp(context.data.byte(context.di+12), 255);
+ if (!context.flags.z()) goto cantpurge;
+iscup:
+ context._cmp(context.data.byte(context.di+11), context.bl);
+ if (context.flags.z()) goto cantpurge;
+ deleteexobject(context);
+ return;
+cantpurge:
+ context._add(context.di, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 114);
+ if (!context.flags.z()) goto lookforpurge;
+ context.di = 0+2080+30000;
+ context.bl = context.data.byte(184);
+ context.cx = 0;
+lookforpurge2:
+ context.al = context.data.byte(context.di+2);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto cantpurge2;
+ context._cmp(context.data.byte(context.di+12), 255);
+ if (!context.flags.z()) goto cantpurge2;
+ deleteexobject(context);
+ return;
+cantpurge2:
+ context._add(context.di, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 114);
+ if (!context.flags.z()) goto lookforpurge2;
+ return;
+}
+
+static inline void emergencypurge(Context & context) {
+checkpurgeagain:
+ context.ax = context.data.word(12);
+ context._add(context.ax, 4000);
+ context._cmp(context.ax, 30000);
+ if (context.flags.c()) goto notnearframeend;
+ purgeanitem(context);
+ goto checkpurgeagain;
+notnearframeend:
+ context.ax = context.data.word(14);
+ context._add(context.ax, 400);
+ context._cmp(context.ax, 18000);
+ if (context.flags.c()) goto notneartextend;
+ purgeanitem(context);
+ goto checkpurgeagain;
+notneartextend:
+ return;
+}
+
+static inline void getexpos(Context & context) {
+ context.es = context.data.word(398);
+ context.al = 0;
+ context.di = 0+2080+30000;
+tryanotherex:
+ context._cmp(context.data.byte(context.di+2), 255);
+ if (context.flags.z()) goto foundnewex;
+ context._add(context.di, 16);
+ context._add(context.al, 1);
+ context._cmp(context.al, 114);
+ if (!context.flags.z()) goto tryanotherex;
+foundnewex:
+ context.data.byte(10) = context.al;
+ return;
+}
+
+static inline void transfermap(Context & context) {
+ context.di = context.data.word(12);
+ context.push(context.di);
+ context.al = context.data.byte(10);
+ context.ah = 0;
+ context.bx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.bx);
+ context.cx = 6;
+ context._mul(context.cx);
+ context.es = context.data.word(398);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context._add(context.di, 0+2080);
+ context.push(context.bx);
+ context.al = context.data.byte(90);
+ context.ah = 0;
+ context.bx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.bx);
+ context.cx = 6;
+ context._mul(context.cx);
+ context.ds = context.data.word(446);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context.si = 0+2080;
+ context.al = context.data.byte(context.bx);
+ context.ah = 0;
+ context.cl = context.data.byte(context.bx+1);
+ context.ch = 0;
+ context._add(context.si, context.data.word(context.bx+2));
+ context.dx = context.data.word(context.bx+4);
+ context.bx = context.pop();
+ context.data.byte(context.bx+0) = context.al;
+ context.data.byte(context.bx+1) = context.cl;
+ context.data.word(context.bx+4) = context.dx;
+ context._mul(context.cx);
+ context.cx = context.ax;
+ context.push(context.cx);
+ while(--context.cx) context._movsb();
+ context.cx = context.pop();
+ context.ax = context.pop();
+ context.data.word(context.bx+2) = context.ax;
+ context._add(context.data.word(12), context.cx);
+ return;
+}
+
+static inline void transferinv(Context & context) {
+ context.di = context.data.word(12);
+ context.push(context.di);
+ context.al = context.data.byte(10);
+ context.ah = 0;
+ context.bx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.bx);
+ context._add(context.ax, 1);
+ context.cx = 6;
+ context._mul(context.cx);
+ context.es = context.data.word(398);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context._add(context.di, 0+2080);
+ context.push(context.bx);
+ context.al = context.data.byte(90);
+ context.ah = 0;
+ context.bx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.bx);
+ context._add(context.ax, 1);
+ context.cx = 6;
+ context._mul(context.cx);
+ context.ds = context.data.word(446);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context.si = 0+2080;
+ context.al = context.data.byte(context.bx);
+ context.ah = 0;
+ context.cl = context.data.byte(context.bx+1);
+ context.ch = 0;
+ context._add(context.si, context.data.word(context.bx+2));
+ context.dx = context.data.word(context.bx+4);
+ context.bx = context.pop();
+ context.data.byte(context.bx+0) = context.al;
+ context.data.byte(context.bx+1) = context.cl;
+ context.data.word(context.bx+4) = context.dx;
+ context._mul(context.cx);
+ context.cx = context.ax;
+ context.push(context.cx);
+ while(--context.cx) context._movsb();
+ context.cx = context.pop();
+ context.ax = context.pop();
+ context.data.word(context.bx+2) = context.ax;
+ context._add(context.data.word(12), context.cx);
+ return;
+}
+
+static inline void transfertext(Context & context) {
+ context.es = context.data.word(398);
+ context.al = context.data.byte(10);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = 0+2080+30000+(16*114);
+ context._add(context.bx, context.ax);
+ context.di = context.data.word(14);
+ context.data.word(context.bx) = context.di;
+ context._add(context.di, 0+2080+30000+(16*114)+((114+2)*2));
+ context.al = context.data.byte(90);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.ds = context.data.word(438);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ context.si = 0+(82*2);
+ context.ax = context.data.word(context.bx);
+ context._add(context.si, context.ax);
+moretext:
+ context._lodsb();
+ context._stosb();
+ context._add(context.data.word(14), 1);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto moretext;
+ return;
+}
+
+static inline void transfercontoex(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.dx);
+ context.push(context.es);
+ context.push(context.bx);
+ getexpos(context);
+ context.si = context.pop();
+ context.ds = context.pop();
+ context.push(context.di);
+ context.cx = 8;
+ while(--context.cx) context._movsw();
+ context.di = context.pop();
+ context.dx = context.pop();
+ context.al = context.data.byte(184);
+ context.data.byte(context.di) = context.al;
+ context.data.byte(context.di+11) = context.al;
+ context.al = context.data.byte(90);
+ context.data.byte(context.di+1) = context.al;
+ context.data.byte(context.di+3) = context.dl;
+ context.data.byte(context.di+2) = 4;
+ transfermap(context);
+ transferinv(context);
+ transfertext(context);
+ context.si = context.pop();
+ context.ds = context.pop();
+ context.data.byte(context.si+2) = 255;
+ return;
+}
+
+static inline void pickupconts(Context & context) {
+ context.al = context.data.byte(context.si+7);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto notopenable;
+ context.al = context.data.byte(89);
+ context.ah = context.data.byte(102);
+ context.dl = context.data.byte(10);
+ context.es = context.data.word(426);
+ context.bx = 0;
+ context.cx = 0;
+pickupcontloop:
+ context.push(context.cx);
+ context.push(context.es);
+ context.push(context.bx);
+ context.push(context.dx);
+ context.push(context.ax);
+ context._cmp(context.data.byte(context.bx+2), context.ah);
+ if (!context.flags.z()) goto notinsidethis;
+ context._cmp(context.data.byte(context.bx+3), context.al);
+ if (!context.flags.z()) goto notinsidethis;
+ context.data.byte(90) = context.cl;
+ transfercontoex(context);
+notinsidethis:
+ context.ax = context.pop();
+ context.dx = context.pop();
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 80);
+ if (!context.flags.z()) goto pickupcontloop;
+notopenable:
+ return;
+}
+
+static inline void transfertoex(Context & context) {
+ emergencypurge(context);
+ getexpos(context);
+ context.al = context.data.byte(10);
+ context.push(context.ax);
+ context.push(context.di);
+ context.al = context.data.byte(89);
+ context.ah = 0;
+ context.bx = 16;
+ context._mul(context.bx);
+ context.ds = context.data.word(426);
+ context.si = context.ax;
+ context.cx = 8;
+ while(--context.cx) context._movsw();
+ context.di = context.pop();
+ context.al = context.data.byte(184);
+ context.data.byte(context.di) = context.al;
+ context.data.byte(context.di+11) = context.al;
+ context.al = context.data.byte(89);
+ context.data.byte(context.di+1) = context.al;
+ context.data.byte(context.di+2) = 4;
+ context.data.byte(context.di+3) = 255;
+ context.al = context.data.byte(107);
+ context.data.byte(context.di+4) = context.al;
+ context.al = context.data.byte(89);
+ context.data.byte(90) = context.al;
+ transfermap(context);
+ transferinv(context);
+ transfertext(context);
+ context.al = context.data.byte(89);
+ context.ah = 0;
+ context.bx = 16;
+ context._mul(context.bx);
+ context.ds = context.data.word(426);
+ context.si = context.ax;
+ context.data.byte(context.si+2) = 254;
+ pickupconts(context);
+ context.ax = context.pop();
+ return;
+}
+
+static inline void pickupob(Context & context) {
+ context.data.byte(107) = context.ah;
+ context.data.byte(102) = 2;
+ context.data.byte(89) = context.al;
+ context.data.byte(99) = context.al;
+ getanyad(context);
+ transfertoex(context);
+ return;
+}
+
+static inline void initialinv(Context & context) {
+ context._cmp(context.data.byte(184), 24);
+ if (context.flags.z()) goto isedens;
+ return;
+isedens:
+ context.al = 11;
+ context.ah = 5;
+ pickupob(context);
+ context.al = 12;
+ context.ah = 6;
+ pickupob(context);
+ context.al = 13;
+ context.ah = 7;
+ pickupob(context);
+ context.al = 14;
+ context.ah = 8;
+ pickupob(context);
+ context.al = 18;
+ context.al = 18;
+ context.ah = 0;
+ pickupob(context);
+ context.al = 19;
+ context.ah = 1;
+ pickupob(context);
+ context.al = 20;
+ context.ah = 9;
+ pickupob(context);
+ context.al = 16;
+ context.ah = 2;
+ pickupob(context);
+ context.data.byte(32) = 1;
+ context.data.word(29) = 0;
+ context.data.word(31) = 6;
+ context.data.byte(27) = 1;
+ context.data.byte(26) = 1;
+ switchryanoff(context);
+ return;
+}
+
+static inline void startup1(Context & context) {
+ clearpalette(context);
+ context.data.byte(61) = 0;
+ context.data.byte(142) = '0';
+ context.data.byte(105) = 0;
+ createpanel(context);
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ showicon(context);
+ getunderzoom(context);
+ spriteupdate(context);
+ printsprites(context);
+ undertextline(context);
+ reelsonscreen(context);
+ atmospheres(context);
+ worktoscreen(context);
+ fadescreenup(context);
+ return;
+}
+
+static inline void clearreels(Context & context) {
+ context.es = context.data.word(430);
+ deallocatemem(context);
+ context.es = context.data.word(432);
+ deallocatemem(context);
+ context.es = context.data.word(434);
+ deallocatemem(context);
+ return;
+}
+
+static inline void clearrest(Context & context) {
+ context.es = context.data.word(418);
+ context.cx = 66*60/2;
+ context.ax = 0;
+ context.di = 0;
+ while(--context.cx) context._stosw();
+ context.es = context.data.word(416);
+ deallocatemem(context);
+ context.es = context.data.word(444);
+ deallocatemem(context);
+ context.es = context.data.word(450);
+ deallocatemem(context);
+ context.es = context.data.word(448);
+ deallocatemem(context);
+ context.es = context.data.word(440);
+ deallocatemem(context);
+ context.es = context.data.word(442);
+ deallocatemem(context);
+ context.es = context.data.word(436);
+ deallocatemem(context);
+ context.es = context.data.word(446);
+ deallocatemem(context);
+ context.es = context.data.word(438);
+ deallocatemem(context);
+ return;
+}
+
+static inline void clearbeforeload(Context & context) {
+ context._cmp(context.data.byte(74), 1);
+ if (!context.flags.z()) goto noclear;
+ clearreels(context);
+ clearrest(context);
+ context.data.byte(74) = 0;
+noclear:
+ return;
+}
+
+static inline void startup(Context & context) {
+ context.data.byte(142) = 0;
+ context.data.byte(105) = 0;
+ createpanel(context);
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ showicon(context);
+ getunderzoom(context);
+ spriteupdate(context);
+ printsprites(context);
+ undertextline(context);
+ reelsonscreen(context);
+ atmospheres(context);
+ return;
+}
+
+static inline void worktoscreenm(Context & context) {
+ animpointer(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void readcitypic(Context & context) {
+ context.dx = 2013;
+ loadintotemp(context);
+ return;
+}
+
+static inline void showcity(Context & context) {
+ clearwork(context);
+ context.ds = context.data.word(458);
+ context.di = 57;
+ context.bx = 32;
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.di = 120+57;
+ context.bx = 32;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void loadintotemp2(Context & context) {
+ context.ds = context.cs;
+ standardload(context);
+ context.data.word(460) = context.ax;
+ return;
+}
+
+static inline void loadintotemp3(Context & context) {
+ context.ds = context.cs;
+ standardload(context);
+ context.data.word(462) = context.ax;
+ return;
+}
+
+static inline void readdesticon(Context & context) {
+ context.dx = 2026;
+ loadintotemp(context);
+ context.dx = 2039;
+ loadintotemp2(context);
+ context.dx = 1974;
+ loadintotemp3(context);
+ return;
+}
+
+static inline void loadtraveltext(Context & context) {
+ context.dx = 2247;
+ standardload(context);
+ context.data.word(456) = context.ax;
+ return;
+}
+
+static inline void showarrows(Context & context) {
+ context.di = 116-12;
+ context.bx = 16;
+ context.ds = context.data.word(458);
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.di = 226+12;
+ context.bx = 16;
+ context.ds = context.data.word(458);
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context.di = 280;
+ context.bx = 14;
+ context.ds = context.data.word(458);
+ context.al = 2;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void getdestinfo(Context & context) {
+ context.al = context.data.byte(183);
+ context.ah = 0;
+ context.push(context.ax);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.si = 7798;
+ context._add(context.si, context.ax);
+ context.cl = context.data.byte(context.si);
+ context.ax = context.pop();
+ context.push(context.cx);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.si = 7813;
+ context._add(context.si, context.ax);
+ context.ax = context.pop();
+ return;
+}
+
+static inline void locationpic(Context & context) {
+ getdestinfo(context);
+ context.al = context.data.byte(context.si);
+ context.push(context.es);
+ context.push(context.si);
+ context.di = 0;
+ context._cmp(context.al, 6);
+ if (!context.flags.c()) goto secondlot;
+ context.ds = context.data.word(458);
+ context._add(context.al, 4);
+ goto gotgraphic;
+secondlot:
+ context._sub(context.al, 6);
+ context.ds = context.data.word(460);
+gotgraphic:
+ context._add(context.di, 104);
+ context.bx = 138+14;
+ context.ah = 0;
+ showframe(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.al = context.data.byte(183);
+ context._cmp(context.al, context.data.byte(184));
+ if (!context.flags.z()) goto notinthisone;
+ context.al = 3;
+ context.di = 104;
+ context.bx = 140+14;
+ context.ds = context.data.word(458);
+ context.ah = 0;
+ showframe(context);
+notinthisone:
+ context.bl = context.data.byte(183);
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(456);
+ context.si = context.data.word(context.bx);
+ context._add(context.si, 66*2);
+ context.di = 50;
+ context.bx = 20;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ return;
+}
+
+static inline void getridoftemp2(Context & context) {
+ context.es = context.data.word(460);
+ deallocatemem(context);
+ return;
+}
+
+static inline void getridoftemp3(Context & context) {
+ context.es = context.data.word(462);
+ deallocatemem(context);
+ return;
+}
+
+static inline void selectlocation(Context & context) {
+ context.data.byte(237) = 0;
+ clearbeforeload(context);
+ context.data.byte(103) = 0;
+ context.data.byte(231) = 22;
+ readcitypic(context);
+ showcity(context);
+ getridoftemp(context);
+ readdesticon(context);
+ loadtraveltext(context);
+ showpanel(context);
+ showman(context);
+ showarrows(context);
+ showexit(context);
+ locationpic(context);
+ undertextline(context);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ context.data.byte(231) = 0;
+ showpointer(context);
+ worktoscreen(context);
+ context.al = 9;
+ context.ah = 255;
+ playchannel0(context);
+ context.data.byte(188) = 255;
+select:
+ delpointer(context);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ context._cmp(context.data.byte(103), 1);
+ if (context.flags.z()) goto quittravel;
+ context.bx = 2714;
+ checkcoords(context);
+ context._cmp(context.data.byte(188), 255);
+ if (context.flags.z()) goto select;
+ context.al = context.data.byte(188);
+ context._cmp(context.al, context.data.byte(9));
+ if (context.flags.z()) goto quittravel;
+ getridoftemp(context);
+ getridoftemp2(context);
+ getridoftemp3(context);
+ context.es = context.data.word(456);
+ deallocatemem(context);
+ return;
+quittravel:
+ context.al = context.data.byte(184);
+ context.data.byte(188) = context.al;
+ context.data.byte(103) = 0;
+ getridoftemp(context);
+ getridoftemp2(context);
+ getridoftemp3(context);
+ context.es = context.data.word(456);
+ deallocatemem(context);
+ return;
+}
+
+static inline void newplace(Context & context) {
+ context._cmp(context.data.byte(60), 1);
+ if (context.flags.z()) goto istravel;
+ context._cmp(context.data.byte(189), -1);
+ if (!context.flags.z()) goto isautoloc;
+ return;
+isautoloc:
+ context.al = context.data.byte(189);
+ context.data.byte(188) = context.al;
+ context.data.byte(189) = -1;
+ return;
+istravel:
+ context.data.byte(60) = 0;
+ selectlocation(context);
+ return;
+}
+
+static inline void checkcoords(Context & context) {
+loop048:
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto nonefound;
+ context.push(context.bx);
+ context._cmp(context.data.word(198), context.ax);
+ if (context.flags.l()) goto over045;
+ context.ax = context.data.word(context.bx+2);
+ context._cmp(context.data.word(198), context.ax);
+ if (!context.flags.ge()) goto over045;
+ context.ax = context.data.word(context.bx+4);
+ context._cmp(context.data.word(200), context.ax);
+ if (context.flags.l()) goto over045;
+ context.ax = context.data.word(context.bx+6);
+ context._cmp(context.data.word(200), context.ax);
+ if (!context.flags.ge()) goto over045;
+ context.ax = context.data.word(context.bx+8);
+ __dispatch_call(context, context.ax);
+finished:
+ context.ax = context.pop();
+ return;
+over045:
+ context.bx = context.pop();
+ context._add(context.bx, 10);
+ goto loop048;
+nonefound:
+ return;
+}
+
+static inline void finishedwalking(Context & context) {
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto iswalking;
+ context.al = context.data.byte(133);
+ context._cmp(context.al, context.data.byte(135));
+iswalking:
+ return;
+}
+
+static inline void showexit(Context & context) {
+ context.ds = context.data.word(408);
+ context.di = 274;
+ context.bx = 154;
+ context.al = 11;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void getanyad(Context & context) {
+ context._cmp(context.data.byte(102), 4);
+ if (context.flags.z()) goto isex;
+ context._cmp(context.data.byte(102), 2);
+ if (context.flags.z()) goto isfree;
+ context.al = context.data.byte(99);
+ getsetad(context);
+ context.ax = context.data.word(context.bx+4);
+ return;
+isfree:
+ context.al = context.data.byte(99);
+ getfreead(context);
+ context.ax = context.data.word(context.bx+7);
+ return;
+isex:
+ context.al = context.data.byte(99);
+ getexad(context);
+ context.ax = context.data.word(context.bx+7);
+ return;
+}
+
+static inline void obicons(Context & context) {
+ context.al = context.data.byte(99);
+ getanyad(context);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto cantopenit;
+ context.ds = context.data.word(410);
+ context.di = 210;
+ context.bx = 1;
+ context.al = 4;
+ context.ah = 0;
+ showframe(context);
+cantopenit:
+ context.ds = context.data.word(410);
+ context.di = 260;
+ context.bx = 1;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void obpicture(Context & context) {
+ context.al = context.data.byte(99);
+ context.ah = context.data.byte(102);
+ context._cmp(context.ah, 1);
+ if (context.flags.z()) goto setframe;
+ context._cmp(context.ah, 4);
+ if (context.flags.z()) goto exframe;
+ context.ds = context.data.word(446);
+ context.di = 160;
+ context.bx = 68;
+ context.cl = context.al;
+ context._add(context.al, context.al);
+ context._add(context.al, context.cl);
+ context._add(context.al, 1);
+ context.ah = 128;
+ showframe(context);
+ return;
+setframe:
+ return;
+exframe:
+ context.ds = context.data.word(398);
+ context.di = 160;
+ context.bx = 68;
+ context.cl = context.al;
+ context._add(context.al, context.al);
+ context._add(context.al, context.cl);
+ context._add(context.al, 1);
+ context.ah = 128;
+ showframe(context);
+ return;
+}
+
+static inline void searchforsame(Context & context) {
+ context.si = context.cx;
+searchagain:
+ context._add(context.si, 1);
+ context.al = context.data.byte(context.bx);
+search:
+ context._cmp(context.data.byte(context.si), context.al);
+ if (context.flags.z()) goto gotstartletter;
+ context._add(context.cx, 1);
+ context._add(context.si, 1);
+ context._cmp(context.si, 8000);
+ if (context.flags.c()) goto search;
+ context.si = context.bx;
+ context.ax = context.pop();
+ return;
+gotstartletter:
+ context.push(context.bx);
+ context.push(context.si);
+keepchecking:
+ context._add(context.si, 1);
+ context._add(context.bx, 1);
+ context.al = context.data.byte(context.bx);
+ context.ah = context.data.byte(context.si);
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto foundmatch;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundmatch;
+ context._cmp(context.al, context.ah);
+ if (context.flags.z()) goto keepchecking;
+ context.si = context.pop();
+ context.bx = context.pop();
+ goto searchagain;
+foundmatch:
+ context.si = context.pop();
+ context.bx = context.pop();
+ return;
+}
+
+static inline void getobtextstart(Context & context) {
+ context.es = context.data.word(438);
+ context.si = 0;
+ context.cx = 0+(82*2);
+ context._cmp(context.data.byte(102), 2);
+ if (context.flags.z()) goto describe;
+ context.es = context.data.word(440);
+ context.si = 0;
+ context.cx = 0+(130*2);
+ context._cmp(context.data.byte(102), 1);
+ if (context.flags.z()) goto describe;
+ context.es = context.data.word(398);
+ context.si = 0+2080+30000+(16*114);
+ context.cx = 0+2080+30000+(16*114)+((114+2)*2);
+describe:
+ context.al = context.data.byte(99);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.si, context.ax);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, context.cx);
+ context.si = context.ax;
+ context.bx = context.ax;
+tryagain:
+ context.push(context.si);
+ findnextcolon(context);
+ context.al = context.data.byte(context.si);
+ context.cx = context.si;
+ context.si = context.pop();
+ context._cmp(context.data.byte(102), 1);
+ if (!context.flags.z()) goto cantmakeoneup;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto findsometext;
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto findsometext;
+cantmakeoneup:
+ return;
+findsometext:
+ searchforsame(context);
+ goto tryagain;
+ return;
+}
+
+static inline void getlocation(Context & context) {
+ context.ah = 0;
+ context.bx = context.ax;
+ context.dx = context.ds;
+ context.es = context.dx;
+ context._add(context.bx, 7798);
+ context.al = context.data.byte(context.bx);
+ return;
+}
+
+static inline void setlocation(Context & context) {
+ context.ah = 0;
+ context.bx = context.ax;
+ context.dx = context.ds;
+ context.es = context.dx;
+ context._add(context.bx, 7798);
+ context.data.byte(context.bx) = 1;
+ return;
+}
+
+static inline void getridofreels(Context & context) {
+ context._cmp(context.data.byte(74), 0);
+ if (context.flags.z()) goto dontgetrid;
+ context.es = context.data.word(430);
+ deallocatemem(context);
+ context.es = context.data.word(432);
+ deallocatemem(context);
+ context.es = context.data.word(434);
+ deallocatemem(context);
+dontgetrid:
+ return;
+}
+
+static inline void loadkeypad(Context & context) {
+ context.dx = 1961;
+ loadintotemp(context);
+ return;
+}
+
+static inline void hangonw(Context & context) {
+hangloopw:
+ context.push(context.cx);
+ delpointer(context);
+ readmouse(context);
+ animpointer(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ context.cx = context.pop();
+ if (--context.cx) goto hangloopw;
+ return;
+}
+
+static inline void getroomdata(Context & context) {
+ context.ah = 0;
+ context.cx = 32;
+ context._mul(context.cx);
+ context.bx = 5971;
+ context._add(context.bx, context.ax);
+ return;
+}
+
+static inline void allocateload(Context & context) {
+ context.push(context.es);
+ context.push(context.di);
+ context.bx = context.data.word(context.di);
+ context.cl = 4;
+ context._shr(context.bx, context.cl);
+ allocatemem(context);
+ context.di = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void restorereels(Context & context) {
+ context._cmp(context.data.byte(74), 0);
+ if (context.flags.z()) goto dontrestore;
+ context.al = context.data.byte(184);
+ getroomdata(context);
+ context.dx = context.bx;
+ openfile(context);
+ readheader(context);
+ dontloadseg(context);
+ dontloadseg(context);
+ dontloadseg(context);
+ dontloadseg(context);
+ allocateload(context);
+ context.data.word(430) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(432) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ allocateload(context);
+ context.data.word(434) = context.ax;
+ context.ds = context.ax;
+ context.dx = 0;
+ loadseg(context);
+ closefile(context);
+dontrestore:
+ return;
+}
+
+static inline void putbackobstuff(Context & context) {
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ obicons(context);
+ showexit(context);
+ obpicture(context);
+ describeob(context);
+ undertextline(context);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+ return;
+}
+
+static inline void lookatcard(Context & context) {
+ context.data.byte(131) = 1;
+ getridofreels(context);
+ loadkeypad(context);
+ createpanel2(context);
+ context.di = 160;
+ context.bx = 80;
+ context.ds = context.data.word(458);
+ context.al = 42;
+ context.ah = 128;
+ showframe(context);
+ getobtextstart(context);
+ findnextcolon(context);
+ findnextcolon(context);
+ findnextcolon(context);
+ context.di = 36;
+ context.bx = 124;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.push(context.es);
+ context.push(context.si);
+ worktoscreenm(context);
+ context.cx = 280;
+ hangonw(context);
+ createpanel2(context);
+ context.di = 160;
+ context.bx = 80;
+ context.ds = context.data.word(458);
+ context.al = 42;
+ context.ah = 128;
+ showframe(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.di = 36;
+ context.bx = 130;
+ context.dl = 241;
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ worktoscreenm(context);
+ context.cx = 200;
+ hangonw(context);
+ context.data.byte(131) = 0;
+ getridoftemp(context);
+ restorereels(context);
+ putbackobstuff(context);
+ return;
+}
+
+static inline void obsthatdothings(Context & context) {
+ context.al = context.data.byte(99);
+ context.ah = context.data.byte(102);
+ context.cl = 'M';
+ context.ch = 'E';
+ context.dl = 'M';
+ context.dh = 'B';
+ compare(context);
+ if (!context.flags.z()) goto notlouiscard;
+ context.al = 4;
+ getlocation(context);
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto seencard;
+ context.al = 4;
+ setlocation(context);
+ lookatcard(context);
+seencard:
+ return;
+notlouiscard:
+ return;
+}
+
+static inline void findpuztext(Context & context) {
+ context.ah = 0;
+ context.si = context.ax;
+ context._add(context.si, context.si);
+ context.es = context.data.word(454);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+ return;
+}
+
+static inline void additionaltext(Context & context) {
+ context._add(context.bx, 10);
+ context.push(context.bx);
+ context.al = context.data.byte(99);
+ context.ah = context.data.byte(102);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'E';
+ compare(context);
+ if (context.flags.z()) goto emptycup;
+ context.al = context.data.byte(99);
+ context.ah = context.data.byte(102);
+ context.cl = 'C';
+ context.ch = 'U';
+ context.dl = 'P';
+ context.dh = 'F';
+ compare(context);
+ if (context.flags.z()) goto fullcup;
+ context.bx = context.pop();
+ return;
+emptycup:
+ context.al = 40;
+ findpuztext(context);
+ context.bx = context.pop();
+ context.di = 36;
+ context.dl = 241;
+ context.ah = 0;
+ printdirect(context);
+ return;
+fullcup:
+ context.al = 39;
+ findpuztext(context);
+ context.bx = context.pop();
+ context.di = 36;
+ context.dl = 241;
+ context.ah = 0;
+ printdirect(context);
+ return;
+}
+
+static inline void describeob(Context & context) {
+ getobtextstart(context);
+ context.di = 33;
+ context.bx = 92;
+ context._cmp(context.data.byte(102), 1);
+ if (!context.flags.z()) goto notsetd;
+ context.bx = 82;
+notsetd:
+ context.dl = 241;
+ context.ah = 16;
+ context.data.word(71) = 91+91;
+ printdirect(context);
+ context.data.word(71) = 0;
+ context.di = 36;
+ context.bx = 104;
+ context._cmp(context.data.byte(102), 1);
+ if (!context.flags.z()) goto notsetd2;
+ context.bx = 94;
+notsetd2:
+ context.dl = 241;
+ context.ah = 0;
+ printdirect(context);
+ context.push(context.bx);
+ obsthatdothings(context);
+ context.bx = context.pop();
+ additionaltext(context);
+ return;
+}
+
+static inline void makemainscreen(Context & context) {
+ createpanel(context);
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ spriteupdate(context);
+ printsprites(context);
+ reelsonscreen(context);
+ showicon(context);
+ getunderzoom(context);
+ undertextline(context);
+ context.data.byte(100) = 255;
+ animpointer(context);
+ worktoscreenm(context);
+ context.data.byte(100) = 200;
+ context.data.byte(131) = 0;
+ return;
+}
+
+static inline void examineob(Context & context) {
+ context.data.byte(234) = 0;
+ context.data.word(328) = 0;
+examineagain:
+ context.data.byte(237) = 0;
+ context.data.byte(108) = 0;
+ context.data.byte(110) = 255;
+ context.data.byte(111) = 255;
+ context.data.byte(104) = 0;
+ context.al = context.data.byte(100);
+ context.data.byte(102) = context.al;
+ context.data.byte(89) = 0;
+ context.data.byte(231) = 0;
+ createpanel(context);
+ showpanel(context);
+ showman(context);
+ showexit(context);
+ obicons(context);
+ obpicture(context);
+ describeob(context);
+ undertextline(context);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ showpointer(context);
+ worktoscreen(context);
+ delpointer(context);
+waitexam:
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ dumptextline(context);
+ delpointer(context);
+ context.data.byte(103) = 0;
+ context.bx = 2494;
+ context._cmp(context.data.byte(104), 0);
+ if (context.flags.z()) goto notuseinv;
+ context.bx = 2556;
+ context._cmp(context.data.byte(104), 1);
+ if (context.flags.z()) goto notuseinv;
+ context.bx = 2618;
+notuseinv:
+ checkcoords(context);
+ context._cmp(context.data.byte(108), 0);
+ if (context.flags.z()) goto norex;
+ goto examineagain;
+norex:
+ context._cmp(context.data.byte(103), 0);
+ if (context.flags.z()) goto waitexam;
+ context.data.byte(106) = 0;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto iswatching;
+ context._cmp(context.data.byte(188), 255);
+ if (!context.flags.z()) goto justgetback;
+iswatching:
+ makemainscreen(context);
+ context.data.byte(104) = 0;
+ context.data.byte(110) = 255;
+ return;
+justgetback:
+ context.data.byte(104) = 0;
+ context.data.byte(110) = 255;
+ return;
+}
+
+static inline void facerightway(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ getroomspaths(context);
+ context.al = context.data.byte(475);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx+7);
+ context.data.byte(135) = context.al;
+ context.data.byte(134) = context.al;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void setwalk(Context & context) {
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto alreadywalking;
+ context.al = context.data.byte(474);
+ context._cmp(context.al, context.data.byte(475));
+ if (context.flags.z()) goto cantwalk2;
+ context._cmp(context.data.byte(32), 1);
+ if (context.flags.z()) goto holdingreel;
+ context._cmp(context.data.byte(32), 2);
+ if (context.flags.z()) goto cantwalk;
+ context.data.byte(478) = context.al;
+ context.data.byte(477) = context.al;
+ context._cmp(context.data.word(202), 2);
+ if (!context.flags.z()) goto notwalkandexam;
+ context._cmp(context.data.byte(100), 3);
+ if (context.flags.z()) goto notwalkandexam;
+ context.data.byte(306) = 1;
+ context.al = context.data.byte(100);
+ context.data.byte(307) = context.al;
+ context.al = context.data.byte(99);
+ context.data.byte(308) = context.al;
+notwalkandexam:
+ autosetwalk(context);
+cantwalk:
+ return;
+cantwalk2:
+ facerightway(context);
+ return;
+alreadywalking:
+ context.al = context.data.byte(474);
+ context.data.byte(477) = context.al;
+ return;
+holdingreel:
+ context.data.byte(33) = context.al;
+ context.data.byte(32) = 2;
+ return;
+}
+
+static inline void examineobtext(Context & context) {
+ context.bl = context.data.byte(99);
+ context.bh = context.data.byte(100);
+ context.al = 1;
+ commandwithob(context);
+ return;
+}
+
+static inline void blocknametext(Context & context) {
+ context.bl = context.data.byte(99);
+ context.bh = context.data.byte(100);
+ context.al = 0;
+ commandwithob(context);
+ return;
+}
+
+static inline void personnametext(Context & context) {
+ context.bl = context.data.byte(99);
+ context._and(context.bl, 127);
+ context.bh = context.data.byte(100);
+ context.al = 2;
+ commandwithob(context);
+ return;
+}
+
+static inline void deltextline(Context & context) {
+ context.di = context.data.word(79);
+ context.bx = context.data.word(81);
+ context._sub(context.bx, 3);
+ context.ds = context.data.word(412);
+ context.si = 0;
+ context.cl = 228;
+ context.ch = 13;
+ multiput(context);
+ return;
+}
+
+static inline void findobname(Context & context) {
+ context.push(context.ax);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.ax = context.pop();
+ context._cmp(context.ah, 5);
+ if (!context.flags.z()) goto notpersonname;
+ context.push(context.ax);
+ context._and(context.al, 127);
+ context.ah = 0;
+ context.bx = 64*2;
+ context._mul(context.bx);
+ context.si = context.ax;
+ context.ds = context.data.word(448);
+ context._add(context.si, 0+24);
+ context.cx = 0+24+(1026*2);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, context.cx);
+ context.si = context.ax;
+ context.ax = context.pop();
+ return;
+notpersonname:
+ context._cmp(context.ah, 4);
+ if (!context.flags.z()) goto notextraname;
+ context.ds = context.data.word(398);
+ context._add(context.bx, 0+2080+30000+(16*114));
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 0+2080+30000+(16*114)+((114+2)*2));
+ context.si = context.ax;
+ return;
+notextraname:
+ context._cmp(context.ah, 2);
+ if (!context.flags.z()) goto notfreename;
+ context.ds = context.data.word(438);
+ context._add(context.bx, 0);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 0+(82*2));
+ context.si = context.ax;
+ return;
+notfreename:
+ context._cmp(context.ah, 1);
+ if (!context.flags.z()) goto notsetname;
+ context.ds = context.data.word(440);
+ context._add(context.bx, 0);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 0+(130*2));
+ context.si = context.ax;
+ return;
+notsetname:
+ context.ds = context.data.word(442);
+ context._add(context.bx, 0);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 0+(98*2));
+ context.si = context.ax;
+ return;
+}
+
+static inline void copyname(Context & context) {
+ context.push(context.di);
+ findobname(context);
+ context.di = context.pop();
+ context.es = context.cs;
+copytext:
+ context.cx = 28;
+make:
+ context._lodsb();
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto finishmakename;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishmakename;
+ context._stosb();
+ if (--context.cx) goto make;
+finishmakename:
+ context._add(context.cx, 1);
+ context.al = 0;
+ context._stosb();
+ return;
+ context.al = 255;
+ while(--context.cx) context._stosb();
+ return;
+}
+
+static inline void commandwithob(Context & context) {
+ context.push(context.ax);
+ context.push(context.ax);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.dx);
+ context.push(context.es);
+ context.push(context.ds);
+ context.push(context.si);
+ context.push(context.di);
+ deltextline(context);
+ context.di = context.pop();
+ context.si = context.pop();
+ context.ds = context.pop();
+ context.es = context.pop();
+ context.dx = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ax = context.pop();
+ context.push(context.bx);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.es = context.data.word(452);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+ context.di = context.data.word(79);
+ context.bx = context.data.word(81);
+ context.dl = context.data.byte(82);
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.ax = context.pop();
+ context.di = 5674;
+ copyname(context);
+ context.ax = context.pop();
+ context.di = context.data.word(84);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto noadd;
+ context._add(context.di, 5);
+noadd:
+ context.bx = context.data.word(81);
+ context.es = context.cs;
+ context.si = 5674;
+ context.dl = context.data.byte(82);
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.data.byte(109) = 1;
+ return;
+}
+
+static inline void walktotext(Context & context) {
+ context.bl = context.data.byte(99);
+ context.bh = context.data.byte(100);
+ context.al = 3;
+ commandwithob(context);
+ return;
+}
+
+static inline void walkandexamine(Context & context) {
+ finishedwalking(context);
+ if (!context.flags.z()) goto noobselect;
+ context.al = context.data.byte(307);
+ context.data.byte(100) = context.al;
+ context.al = context.data.byte(308);
+ context.data.byte(99) = context.al;
+ context.data.byte(306) = 0;
+ context._cmp(context.data.byte(100), 5);
+ if (context.flags.z()) goto noobselect;
+ examineob(context);
+ return;
+wantstowalk:
+ setwalk(context);
+ context.data.byte(473) = 1;
+noobselect:
+ return;
+diff:
+ context.data.byte(99) = context.al;
+ context.data.byte(100) = context.ah;
+diff2:
+ context._cmp(context.data.byte(492), 254);
+ if (!context.flags.z()) goto middleofwalk;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto middleofwalk;
+ context.al = context.data.byte(133);
+ context._cmp(context.al, context.data.byte(135));
+ if (!context.flags.z()) goto middleofwalk;
+ context._cmp(context.data.byte(100), 3);
+ if (!context.flags.z()) goto notblock;
+ context.bl = context.data.byte(475);
+ context._cmp(context.bl, context.data.byte(474));
+ if (!context.flags.z()) goto dontcheck;
+ context.cl = context.data.byte(151);
+ context._add(context.cl, 12);
+ context.ch = context.data.byte(152);
+ context._add(context.ch, 12);
+ checkone(context);
+ context._cmp(context.cl, 2);
+ if (context.flags.c()) goto isblock;
+dontcheck:
+ getflagunderp(context);
+ context._cmp(context.data.byte(153), 2);
+ if (context.flags.c()) goto isblock;
+ context._cmp(context.data.byte(153), 128);
+ if (!context.flags.c()) goto isblock;
+ goto toofaraway;
+notblock:
+ context.bl = context.data.byte(475);
+ context._cmp(context.bl, context.data.byte(474));
+ if (!context.flags.z()) goto toofaraway;
+ context._cmp(context.data.byte(100), 3);
+ if (context.flags.z()) goto isblock;
+ context._cmp(context.data.byte(100), 5);
+ if (context.flags.z()) goto isaperson;
+ examineobtext(context);
+ return;
+middleofwalk:
+ blocknametext(context);
+ return;
+isblock:
+ blocknametext(context);
+ return;
+isaperson:
+ personnametext(context);
+ return;
+toofaraway:
+ walktotext(context);
+ return;
+}
+
+static inline void mainscreen(Context & context) {
+ context.data.byte(237) = 0;
+ context.bx = 4949;
+ context._cmp(context.data.byte(3), 1);
+ if (context.flags.z()) goto checkmain;
+ context.bx = 5011;
+checkmain:
+ checkcoords(context);
+ context._cmp(context.data.byte(306), 0);
+ if (context.flags.z()) goto finishmain;
+ walkandexamine(context);
+finishmain:
+ return;
+}
+
+static inline void getflagunderp(Context & context) {
+ context.cx = context.data.word(198);
+ context._sub(context.cx, context.data.word(117));
+ context.ax = context.data.word(200);
+ context._sub(context.ax, context.data.word(119));
+ context.ch = context.al;
+ checkone(context);
+ context.data.byte(153) = context.cl;
+ context.data.byte(154) = context.ch;
+ return;
+}
+
+static inline void animpointer(Context & context) {
+ context._cmp(context.data.byte(234), 2);
+ if (context.flags.z()) goto combathand;
+ context._cmp(context.data.byte(234), 3);
+ if (context.flags.z()) goto mousehand;
+ context._cmp(context.data.word(21), 0);
+ if (context.flags.z()) goto notwatchpoint;
+ context.data.byte(231) = 11;
+ return;
+notwatchpoint:
+ context.data.byte(231) = 0;
+ context._cmp(context.data.byte(237), 0);
+ if (context.flags.z()) goto gothand;
+ context._cmp(context.data.byte(476), 0);
+ if (context.flags.z()) goto gothand;
+arrow:
+ getflagunderp(context);
+ context._cmp(context.cl, 2);
+ if (context.flags.c()) goto gothand;
+ context._cmp(context.cl, 128);
+ if (!context.flags.c()) goto gothand;
+ context.data.byte(231) = 3;
+ context._test(context.cl, 4);
+ if (!context.flags.z()) goto gothand;
+ context.data.byte(231) = 4;
+ context._test(context.cl, 16);
+ if (!context.flags.z()) goto gothand;
+ context.data.byte(231) = 5;
+ context._test(context.cl, 2);
+ if (!context.flags.z()) goto gothand;
+ context.data.byte(231) = 6;
+ context._test(context.cl, 8);
+ if (!context.flags.z()) goto gothand;
+ context.data.byte(231) = 8;
+gothand:
+ return;
+mousehand:
+ context._cmp(context.data.byte(235), 0);
+ if (context.flags.z()) goto rightspeed3;
+ context._sub(context.data.byte(235), 1);
+ goto finflashmouse;
+rightspeed3:
+ context.data.byte(235) = 5;
+ context._add(context.data.byte(236), 1);
+ context._cmp(context.data.byte(236), 16);
+ if (!context.flags.z()) goto finflashmouse;
+ context.data.byte(236) = 0;
+finflashmouse:
+ context.al = context.data.byte(236);
+ context.ah = 0;
+ context.bx = 5698;
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context.data.byte(231) = context.al;
+ return;
+combathand:
+ context.data.byte(231) = 0;
+ context._cmp(context.data.byte(184), 14);
+ if (!context.flags.z()) goto notarrow;
+ context._cmp(context.data.byte(100), 211);
+ if (!context.flags.z()) goto notarrow;
+ context.data.byte(231) = 5;
+notarrow:
+ return;
+}
+
+static inline void showblink(Context & context) {
+ context._cmp(context.data.byte(131), 1);
+ if (context.flags.z()) goto finblink1;
+ context._add(context.data.byte(472), 1);
+ context._cmp(context.data.byte(4), 0);
+ if (!context.flags.z()) goto finblink1;
+ context._cmp(context.data.byte(184), 50);
+ if (!context.flags.c()) goto eyesshut;
+ context.al = context.data.byte(472);
+ context._cmp(context.al, 3);
+ if (!context.flags.z()) goto finblink1;
+ context.data.byte(472) = 0;
+ context.al = context.data.byte(471);
+ context._add(context.al, 1);
+ context.data.byte(471) = context.al;
+ context._cmp(context.al, 6);
+ if (context.flags.c()) goto nomorethan6;
+ context.al = 6;
+nomorethan6:
+ context.ah = 0;
+ context.bx = 5691;
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context.ds = context.data.word(408);
+ context.di = 44;
+ context.bx = 32;
+ context.ah = 0;
+ showframe(context);
+finblink1:
+ return;
+eyesshut:
+ return;
+}
+
+static inline void showpointer(Context & context) {
+ showblink(context);
+ context.di = context.data.word(198);
+ context.data.word(220) = context.di;
+ context.bx = context.data.word(200);
+ context.data.word(222) = context.bx;
+ context._cmp(context.data.byte(106), 1);
+ if (context.flags.z()) goto itsanobject;
+ context.push(context.bx);
+ context.push(context.di);
+ context.ds = context.data.word(408);
+ context.al = context.data.byte(231);
+ context._add(context.al, 20);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.si = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.si, context.ax);
+ context.cx = context.data.word(context.si);
+ context._cmp(context.cl, 12);
+ if (!context.flags.c()) goto notsmallx;
+ context.cl = 12;
+notsmallx:
+ context._cmp(context.ch, 12);
+ if (!context.flags.c()) goto notsmally;
+ context.ch = 12;
+notsmally:
+ context.data.byte(227) = context.cl;
+ context.data.byte(228) = context.ch;
+ context.push(context.ds);
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60;
+ multiget(context);
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.push(context.di);
+ context.push(context.bx);
+ context.al = context.data.byte(231);
+ context._add(context.al, 20);
+ context.ah = 0;
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ return;
+itsanobject:
+ context.al = context.data.byte(89);
+ context.ds = context.data.word(398);
+ context._cmp(context.data.byte(102), 4);
+ if (context.flags.z()) goto itsfrominv;
+ context.ds = context.data.word(446);
+itsfrominv:
+ context.cl = context.al;
+ context._add(context.al, context.al);
+ context._add(context.al, context.cl);
+ context._add(context.al, 1);
+ context.ah = 0;
+ context.push(context.ax);
+ context._add(context.ax, context.ax);
+ context.si = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.si, context.ax);
+ context.ax = 2080;
+ context.cx = context.data.word(context.si);
+ context._cmp(context.cl, 12);
+ if (!context.flags.c()) goto notsmallx2;
+ context.cl = 12;
+notsmallx2:
+ context._cmp(context.ch, 12);
+ if (!context.flags.c()) goto notsmally2;
+ context.ch = 12;
+notsmally2:
+ context.data.byte(227) = context.cl;
+ context.data.byte(228) = context.ch;
+ context.ax = context.pop();
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.ax);
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.ds);
+ context.al = context.cl;
+ context.ah = 0;
+ context._shr(context.ax, 1);
+ context._sub(context.data.word(220), context.ax);
+ context._sub(context.di, context.ax);
+ context.al = context.ch;
+ context._shr(context.ax, 1);
+ context._sub(context.data.word(222), context.ax);
+ context._sub(context.bx, context.ax);
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60;
+ multiget(context);
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.ax = context.pop();
+ context.ah = 128;
+ showframe(context);
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.ds = context.data.word(408);
+ context.al = 3;
+ context.ah = 128;
+ showframe(context);
+ return;
+}
+
+static inline void readmouse1(Context & context) {
+ context.ax = context.data.word(198);
+ context.data.word(214) = context.ax;
+ context.ax = context.data.word(200);
+ context.data.word(216) = context.ax;
+ mousecall(context);
+ context.data.word(198) = context.cx;
+ context.data.word(200) = context.dx;
+ context.data.word(204) = context.bx;
+ return;
+}
+
+static inline void dumpblink(Context & context) {
+ context._cmp(context.data.byte(4), 0);
+ if (!context.flags.z()) goto nodumpeye;
+ context._cmp(context.data.byte(472), 0);
+ if (!context.flags.z()) goto nodumpeye;
+ context.al = context.data.byte(471);
+ context._cmp(context.al, 6);
+ if (!context.flags.c()) goto nodumpeye;
+ context.push(context.ds);
+ context.di = 44;
+ context.bx = 32;
+ context.cl = 16;
+ context.ch = 12;
+ multidump(context);
+ context.ds = context.pop();
+nodumpeye:
+ return;
+}
+
+static inline void dumppointer(Context & context) {
+ dumpblink(context);
+ context.cl = context.data.byte(229);
+ context.ch = context.data.byte(230);
+ context.di = context.data.word(224);
+ context.bx = context.data.word(226);
+ multidump(context);
+ context.bx = context.data.word(222);
+ context.di = context.data.word(220);
+ context._cmp(context.di, context.data.word(224));
+ if (!context.flags.z()) goto difffound;
+ context._cmp(context.bx, context.data.word(226));
+ if (context.flags.z()) goto notboth;
+difffound:
+ context.cl = context.data.byte(227);
+ context.ch = context.data.byte(228);
+ multidump(context);
+notboth:
+ return;
+}
+
+static inline void dumptextline(Context & context) {
+ context._cmp(context.data.byte(109), 1);
+ if (!context.flags.z()) goto nodumptextline;
+ context.data.byte(109) = 0;
+ context.di = context.data.word(79);
+ context.bx = context.data.word(81);
+ context._sub(context.bx, 3);
+ context.cl = 228;
+ context.ch = 13;
+ multidump(context);
+nodumptextline:
+ return;
+}
+
+static inline void delpointer(Context & context) {
+ context.ax = context.data.word(220);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto nevershown;
+ context.data.word(224) = context.ax;
+ context.ax = context.data.word(222);
+ context.data.word(226) = context.ax;
+ context.cl = context.data.byte(227);
+ context.data.byte(229) = context.cl;
+ context.ch = context.data.byte(228);
+ context.data.byte(230) = context.ch;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60;
+ context.di = context.data.word(224);
+ context.bx = context.data.word(226);
+ multiput(context);
+nevershown:
+ return;
+}
+
+static inline void findnextcolon(Context & context) {
+isntcolon:
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto endofcolon;
+ context._cmp(context.al, ':');
+ if (!context.flags.z()) goto isntcolon;
+endofcolon:
+ return;
+}
+
+static inline void printboth(Context & context) {
+ context.push(context.ax);
+ context.push(context.cx);
+ context.push(context.bx);
+ context.push(context.di);
+ printchar(context);
+ context.ax = context.pop();
+ context.push(context.di);
+ context.di = context.ax;
+ multidump(context);
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context.ax = context.pop();
+ return;
+}
+
+static inline void waitframes(Context & context) {
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.es);
+ context.push(context.si);
+ context.push(context.ds);
+ readmouse(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ delpointer(context);
+ context.ax = context.data.word(202);
+ context.ds = context.pop();
+ context.si = context.pop();
+ context.es = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ return;
+}
+
+static inline void printslow(Context & context) {
+ context.data.byte(231) = 1;
+ context.data.byte(234) = 3;
+ context.ds = context.data.word(404);
+printloopslow6:
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.dx);
+ getnumber(context);
+ context.ch = 0;
+printloopslow5:
+ context.push(context.cx);
+ context.push(context.si);
+ context.push(context.es);
+ context.ax = context.data.word(context.si);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.es);
+ context.push(context.si);
+ context.push(context.ds);
+ modifychar(context);
+ printboth(context);
+ context.ds = context.pop();
+ context.si = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ax = context.data.word(context.si+1);
+ context._add(context.si, 1);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishslow;
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto finishslow;
+ context._cmp(context.cl, 1);
+ if (context.flags.z()) goto afterslow;
+ context.push(context.di);
+ context.push(context.ds);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.es);
+ context.push(context.si);
+ modifychar(context);
+ context.data.word(71) = 91;
+ printboth(context);
+ context.data.word(71) = 0;
+ context.si = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ waitframes(context);
+ context._cmp(context.ax, 0);
+ if (context.flags.z()) goto keepgoing;
+ context._cmp(context.ax, context.data.word(212));
+ if (!context.flags.z()) goto finishslow2;
+keepgoing:
+ waitframes(context);
+noslow:
+ context._cmp(context.ax, 0);
+ if (context.flags.z()) goto afterslow;
+ context._cmp(context.ax, context.data.word(212));
+ if (!context.flags.z()) goto finishslow2;
+afterslow:
+ context.es = context.pop();
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 1);
+ if (--context.cx) goto printloopslow5;
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context._add(context.bx, 10);
+ goto printloopslow6;
+finishslow:
+ context.cx = context.pop();
+ context.si = context.pop();
+ context.es = context.pop();
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.al = 0;
+ return;
+finishslow2:
+ context.cx = context.pop();
+ context.si = context.pop();
+ context.es = context.pop();
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.al = 1;
+ return;
+}
+
+static inline void hangonp(Context & context) {
+ context.push(context.cx);
+ context._add(context.cx, context.cx);
+ context.ax = context.pop();
+ context._add(context.cx, context.ax);
+ context.data.word(138) = 0;
+ context.al = context.data.byte(231);
+ context.ah = context.data.byte(106);
+ context.push(context.ax);
+ context.data.byte(234) = 3;
+ context.data.byte(106) = 0;
+ context.push(context.cx);
+ context.data.byte(100) = 255;
+ readmouse(context);
+ animpointer(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ context.cx = context.pop();
+hangloop:
+ context.push(context.cx);
+ delpointer(context);
+ readmouse(context);
+ animpointer(context);
+ showpointer(context);
+ vsync(context);
+ dumppointer(context);
+ context.cx = context.pop();
+ context.ax = context.data.word(202);
+ context._cmp(context.ax, 0);
+ if (context.flags.z()) goto notpressed;
+ context._cmp(context.ax, context.data.word(212));
+ if (!context.flags.z()) goto getoutofit;
+notpressed:
+ if (--context.cx) goto hangloop;
+getoutofit:
+ delpointer(context);
+ context.ax = context.pop();
+ context.data.byte(231) = context.al;
+ context.data.byte(106) = context.ah;
+ context.data.byte(234) = 0;
+ return;
+}
+
+static inline void readmouse(Context & context) {
+ context.ax = context.data.word(202);
+ context.data.word(212) = context.ax;
+ context.ax = context.data.word(198);
+ context.data.word(214) = context.ax;
+ context.ax = context.data.word(200);
+ context.data.word(216) = context.ax;
+ mousecall(context);
+ context.data.word(198) = context.cx;
+ context.data.word(200) = context.dx;
+ context.data.word(202) = context.bx;
+ return;
+}
+
+static inline void redrawmainscrn(Context & context) {
+ context.data.word(328) = 0;
+ createpanel(context);
+ context.data.byte(62) = 0;
+ drawfloor(context);
+ printsprites(context);
+ reelsonscreen(context);
+ showicon(context);
+ getunderzoom(context);
+ undertextline(context);
+ readmouse(context);
+ context.data.byte(100) = 255;
+ return;
+}
+
+static inline void dolook(Context & context) {
+ createpanel(context);
+ showicon(context);
+ undertextline(context);
+ worktoscreenm(context);
+ context.data.byte(100) = 255;
+ dumptextline(context);
+ context.bl = context.data.byte(185);
+ context._and(context.bl, 31);
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(436);
+ context._add(context.bx, 0);
+ context.si = context.data.word(context.bx);
+ context._add(context.si, 0+(38*2));
+ findnextcolon(context);
+ context.di = 66;
+ context._cmp(context.data.byte(184), 50);
+ if (context.flags.c()) goto notdream3;
+ context.di = 40;
+notdream3:
+ context.bx = 80;
+ context.dl = 241;
+ printslow(context);
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto afterlook;
+ context.cx = 400;
+ hangonp(context);
+afterlook:
+ context.data.byte(234) = 0;
+ context.data.byte(100) = 0;
+ redrawmainscrn(context);
+ worktoscreenm(context);
+ return;
+}
+
+static inline void autolook(Context & context) {
+ context.ax = context.data.word(198);
+ context._cmp(context.ax, context.data.word(214));
+ if (!context.flags.z()) goto diffmouse;
+ context.ax = context.data.word(200);
+ context._cmp(context.ax, context.data.word(216));
+ if (!context.flags.z()) goto diffmouse;
+ context._sub(context.data.word(98), 1);
+ context._cmp(context.data.word(98), 0);
+ if (!context.flags.z()) goto noautolook;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto noautolook;
+ dolook(context);
+noautolook:
+ return;
+diffmouse:
+ context.data.word(98) = 1000;
+ return;
+}
+
+static inline void watchcount(Context & context) {
+ context._cmp(context.data.byte(3), 0);
+ if (context.flags.z()) goto nowatchworn;
+ context._add(context.data.byte(146), 1);
+ context._cmp(context.data.byte(146), 9);
+ if (context.flags.z()) goto flashdots;
+ context._cmp(context.data.byte(146), 18);
+ if (context.flags.z()) goto uptime;
+nowatchworn:
+ return;
+flashdots:
+ context.ax = 91*3+21;
+ context.di = 268+4;
+ context.bx = 21;
+ context.ds = context.data.word(404);
+ showframe(context);
+ goto finishwatch;
+uptime:
+ context.data.byte(146) = 0;
+ context._add(context.data.byte(5), 1);
+ context._cmp(context.data.byte(5), 60);
+ if (!context.flags.z()) goto finishtime;
+ context.data.byte(5) = 0;
+ context._add(context.data.byte(6), 1);
+ context._cmp(context.data.byte(6), 60);
+ if (!context.flags.z()) goto finishtime;
+ context.data.byte(6) = 0;
+ context._add(context.data.byte(7), 1);
+ context._cmp(context.data.byte(7), 24);
+ if (!context.flags.z()) goto finishtime;
+ context.data.byte(7) = 0;
+finishtime:
+ showtime(context);
+finishwatch:
+ context.data.byte(266) = 1;
+ return;
+}
+
+static inline void putunderzoom(Context & context) {
+ context.di = 8+5;
+ context.bx = 132+4;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5);
+ context.cl = 46;
+ context.ch = 40;
+ multiput(context);
+ return;
+}
+
+static inline void crosshair(Context & context) {
+ context._cmp(context.data.byte(100), 3);
+ if (context.flags.z()) goto nocross;
+ context._cmp(context.data.byte(100), 10);
+ if (!context.flags.c()) goto nocross;
+ context.es = context.data.word(400);
+ context.ds = context.data.word(408);
+ context.di = 8+24;
+ context.bx = 132+19;
+ context.al = 9;
+ context.ah = 0;
+ showframe(context);
+ return;
+nocross:
+ context.es = context.data.word(400);
+ context.ds = context.data.word(408);
+ context.di = 8+24;
+ context.bx = 132+19;
+ context.al = 29;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void zoom(Context & context) {
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto inwatching;
+ context._cmp(context.data.byte(8), 1);
+ if (context.flags.z()) goto zoomswitch;
+inwatching:
+ return;
+zoomswitch:
+ context._cmp(context.data.byte(100), 199);
+ if (context.flags.c()) goto zoomit;
+cantzoom:
+ putunderzoom(context);
+ return;
+zoomit:
+ context.ax = context.data.word(222);
+ context._sub(context.ax, 9);
+ context.cx = 320;
+ context._mul(context.cx);
+ context._add(context.ax, context.data.word(220));
+ context._sub(context.ax, 11);
+ context.si = context.ax;
+ context.ax = 132+4;
+ context.cx = 320;
+ context._mul(context.cx);
+ context._add(context.ax, 8+5);
+ context.di = context.ax;
+ context.es = context.data.word(400);
+ context.ds = context.data.word(400);
+ context.cx = 20;
+zoomloop:
+ context.push(context.cx);
+ context.cx = 23;
+zoomloop2:
+ context._lodsb();
+ context.ah = context.al;
+ context._stosw();
+ context.data.word(context.di+320-2) = context.ax;
+ if (--context.cx) goto zoomloop2;
+ context._add(context.si, 320-23);
+ context._add(context.di, 320-46+320);
+ context.cx = context.pop();
+ if (--context.cx) goto zoomloop;
+ crosshair(context);
+ context.data.byte(75) = 1;
+ return;
+}
+
+static inline void readmouse2(Context & context) {
+ context.ax = context.data.word(198);
+ context.data.word(214) = context.ax;
+ context.ax = context.data.word(200);
+ context.data.word(216) = context.ax;
+ mousecall(context);
+ context.data.word(198) = context.cx;
+ context.data.word(200) = context.dx;
+ context.data.word(206) = context.bx;
+ return;
+}
+
+static inline void dumpzoom(Context & context) {
+ context._cmp(context.data.byte(8), 1);
+ if (!context.flags.z()) goto notzoomon;
+ context.di = 8+5;
+ context.bx = 132+4;
+ context.cl = 46;
+ context.ch = 40;
+ multidump(context);
+notzoomon:
+ return;
+}
+
+static inline void findpathofpoint(Context & context) {
+ context.push(context.ax);
+ context.bx = 0;
+ context.es = context.data.word(450);
+ context.al = context.data.byte(185);
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.cx = context.pop();
+ context.dl = 0;
+pathloop:
+ context.al = context.data.byte(context.bx+6);
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto flunkedit;
+ context.ax = context.data.word(context.bx+2);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto flunkedit;
+ context._cmp(context.cl, context.al);
+ if (context.flags.c()) goto flunkedit;
+ context._cmp(context.ch, context.ah);
+ if (context.flags.c()) goto flunkedit;
+ context.ax = context.data.word(context.bx+4);
+ context._cmp(context.cl, context.al);
+ if (!context.flags.c()) goto flunkedit;
+ context._cmp(context.ch, context.ah);
+ if (!context.flags.c()) goto flunkedit;
+ goto gotvalidpath;
+flunkedit:
+ context._add(context.bx, 8);
+ context._add(context.dl, 1);
+ context._cmp(context.dl, 12);
+ if (!context.flags.z()) goto pathloop;
+ context.dl = 255;
+gotvalidpath:
+ return;
+}
+
+static inline void findxyfrompath(Context & context) {
+ getroomspaths(context);
+ context.al = context.data.byte(475);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.ax = context.data.word(context.bx);
+ context._sub(context.al, 12);
+ context._sub(context.ah, 12);
+ context.data.byte(151) = context.al;
+ context.data.byte(152) = context.ah;
+ return;
+}
+
+static inline void showpanel(Context & context) {
+ context.ds = context.data.word(408);
+ context.di = 72;
+ context.bx = 0;
+ context.al = 19;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(408);
+ context.di = 192;
+ context.bx = 0;
+ context.al = 19;
+ context.ah = 0;
+ showframe(context);
+ return;
+}
+
+static inline void showman(Context & context) {
+ context.ds = context.data.word(408);
+ context.di = 0;
+ context.bx = 0;
+ context.al = 0;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(408);
+ context.di = 0;
+ context.bx = 114;
+ context.al = 1;
+ context.ah = 0;
+ showframe(context);
+ context._cmp(context.data.byte(4), 0);
+ if (context.flags.z()) goto notverycool;
+ context.ds = context.data.word(408);
+ context.di = 28;
+ context.bx = 25;
+ context.al = 2;
+ context.ah = 0;
+ showframe(context);
+notverycool:
+ return;
+}
+
+static inline void printmessage(Context & context) {
+ context.push(context.dx);
+ context.push(context.bx);
+ context.push(context.di);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context.es = context.data.word(452);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.dx = context.pop();
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ return;
+}
+
+static inline void usecharset1(Context & context) {
+ context.ax = context.data.word(404);
+ context.data.word(268) = context.ax;
+ return;
+}
+
+static inline void roomname(Context & context) {
+ context.di = 88;
+ context.bx = 18;
+ context.al = 53;
+ context.dl = 240;
+ printmessage(context);
+ context.bl = context.data.byte(185);
+ context._cmp(context.bl, 32);
+ if (context.flags.c()) goto notover32;
+ context._sub(context.bl, 32);
+notover32:
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(436);
+ context._add(context.bx, 0);
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, 0+(38*2));
+ context.si = context.ax;
+ context.data.word(77) = 7;
+ context.di = 88;
+ context.bx = 25;
+ context.dl = 120;
+ context._cmp(context.data.byte(3), 1);
+ if (context.flags.z()) goto gotpl;
+ context.dl = 160;
+gotpl:
+ context.al = 0;
+ context.ah = 0;
+ printdirect(context);
+ context.data.word(77) = 10;
+ usecharset1(context);
+ return;
+}
+
+static inline void showtime(Context & context) {
+ context._cmp(context.data.byte(3), 0);
+ if (context.flags.z()) goto nowatch;
+ context.al = context.data.byte(5);
+ context.cl = 0;
+ twodigitnum(context);
+ context.push(context.ax);
+ context.al = context.ah;
+ context.ah = 0;
+ context._add(context.ax, 91*3+10);
+ context.ds = context.data.word(404);
+ context.di = 282+5;
+ context.bx = 21;
+ showframe(context);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, 91*3+10);
+ context.ds = context.data.word(404);
+ context.di = 282+9;
+ context.bx = 21;
+ showframe(context);
+ context.al = context.data.byte(6);
+ context.cl = 0;
+ twodigitnum(context);
+ context.push(context.ax);
+ context.al = context.ah;
+ context.ah = 0;
+ context._add(context.ax, 91*3);
+ context.ds = context.data.word(404);
+ context.di = 270+5;
+ context.bx = 21;
+ showframe(context);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, 91*3);
+ context.ds = context.data.word(404);
+ context.di = 270+11;
+ context.bx = 21;
+ showframe(context);
+ context.al = context.data.byte(7);
+ context.cl = 0;
+ twodigitnum(context);
+ context.push(context.ax);
+ context.al = context.ah;
+ context.ah = 0;
+ context._add(context.ax, 91*3);
+ context.ds = context.data.word(404);
+ context.di = 256+5;
+ context.bx = 21;
+ showframe(context);
+ context.ax = context.pop();
+ context.ah = 0;
+ context._add(context.ax, 91*3);
+ context.ds = context.data.word(404);
+ context.di = 256+11;
+ context.bx = 21;
+ showframe(context);
+ context.ax = 91*3+20;
+ context.ds = context.data.word(404);
+ context.di = 267+5;
+ context.bx = 21;
+ showframe(context);
+nowatch:
+ return;
+}
+
+static inline void showwatch(Context & context) {
+ context._cmp(context.data.byte(3), 0);
+ if (context.flags.z()) goto nowristwatch;
+ context.ds = context.data.word(408);
+ context.di = 250;
+ context.bx = 1;
+ context.al = 6;
+ context.ah = 0;
+ showframe(context);
+ showtime(context);
+nowristwatch:
+ return;
+}
+
+static inline void panelicons1(Context & context) {
+ context.di = 0;
+ context._cmp(context.data.byte(3), 1);
+ if (context.flags.z()) goto watchison;
+ context.di = 48;
+watchison:
+ context.push(context.di);
+ context.ds = context.data.word(410);
+ context._add(context.di, 204);
+ context.bx = 4;
+ context.al = 2;
+ context.ah = 0;
+ showframe(context);
+ context.di = context.pop();
+ context.push(context.di);
+ context._cmp(context.data.byte(8), 1);
+ if (context.flags.z()) goto zoomisoff;
+ context.ds = context.data.word(408);
+ context._add(context.di, 228);
+ context.bx = 8;
+ context.al = 5;
+ context.ah = 0;
+ showframe(context);
+zoomisoff:
+ context.di = context.pop();
+ showwatch(context);
+ return;
+}
+
+static inline void zoomicon(Context & context) {
+ context._cmp(context.data.byte(8), 0);
+ if (context.flags.z()) goto nozoom1;
+ context.ds = context.data.word(408);
+ context.di = 8;
+ context.bx = 132-1;
+ context.al = 8;
+ context.ah = 0;
+ showframe(context);
+nozoom1:
+ return;
+}
+
+static inline void middlepanel(Context & context) {
+ context.ds = context.data.word(464);
+ context.di = 72+47+20;
+ context.bx = 0;
+ context.al = 48;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 72+19;
+ context.bx = 21;
+ context.al = 47;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 160+23;
+ context.bx = 0;
+ context.al = 48;
+ context.ah = 4;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 160+71;
+ context.bx = 21;
+ context.al = 47;
+ context.ah = 4;
+ showframe(context);
+ return;
+}
+
+static inline void showicon(Context & context) {
+ context._cmp(context.data.byte(184), 50);
+ if (!context.flags.c()) goto isdream1;
+ showpanel(context);
+ showman(context);
+ roomname(context);
+ panelicons1(context);
+ zoomicon(context);
+ return;
+isdream1:
+ context.ds = context.data.word(464);
+ context.di = 72;
+ context.bx = 2;
+ context.al = 45;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 72+47;
+ context.bx = 2;
+ context.al = 46;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 69-10;
+ context.bx = 21;
+ context.al = 49;
+ context.ah = 0;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 160+88;
+ context.bx = 2;
+ context.al = 45;
+ context.ah = 4;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 160+43;
+ context.bx = 2;
+ context.al = 46;
+ context.ah = 4;
+ showframe(context);
+ context.ds = context.data.word(464);
+ context.di = 160+101;
+ context.bx = 21;
+ context.al = 49;
+ context.ah = 4;
+ showframe(context);
+ middlepanel(context);
+ return;
+}
+
+static inline void getunderzoom(Context & context) {
+ context.di = 8+5;
+ context.bx = 132+4;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5);
+ context.cl = 46;
+ context.ch = 40;
+ multiget(context);
+ return;
+}
+
+static inline void walkintoroom(Context & context) {
+ context._cmp(context.data.byte(9), 14);
+ if (!context.flags.z()) goto notlair;
+ context._cmp(context.data.byte(148), 22);
+ if (!context.flags.z()) goto notlair;
+ context.data.byte(478) = 1;
+ context.data.byte(477) = 1;
+ autosetwalk(context);
+notlair:
+ return;
+}
+
+static inline void isryanholding(Context & context) {
+ context._sub(context.al, 'A');
+ context._sub(context.ah, 'A');
+ context._sub(context.cl, 'A');
+ context._sub(context.ch, 'A');
+ context.es = context.data.word(398);
+ context.bx = 0+2080+30000;
+ context.dl = 0;
+searchinv:
+ context._cmp(context.data.byte(context.bx+2), 4);
+ if (!context.flags.z()) goto nofindininv;
+ context._cmp(context.al, context.data.byte(context.bx+12));
+ if (!context.flags.z()) goto nofindininv;
+ context._cmp(context.ah, context.data.byte(context.bx+13));
+ if (!context.flags.z()) goto nofindininv;
+ context._cmp(context.cl, context.data.byte(context.bx+14));
+ if (!context.flags.z()) goto nofindininv;
+ context._cmp(context.ch, context.data.byte(context.bx+15));
+ if (!context.flags.z()) goto nofindininv;
+ context.al = context.dl;
+ context._cmp(context.al, 114);
+ return;
+nofindininv:
+ context._add(context.bx, 16);
+ context._add(context.dl, 1);
+ context._cmp(context.dl, 114);
+ if (!context.flags.z()) goto searchinv;
+ context.al = context.dl;
+ context._cmp(context.al, 114);
+ return;
+}
+
+static inline void findexobject(Context & context) {
+ context._sub(context.al, 'A');
+ context._sub(context.ah, 'A');
+ context._sub(context.cl, 'A');
+ context._sub(context.ch, 'A');
+ context.es = context.data.word(398);
+ context.bx = 0+2080+30000;
+ context.dl = 0;
+findexloop:
+ context._cmp(context.al, context.data.byte(context.bx+12));
+ if (!context.flags.z()) goto nofindex;
+ context._cmp(context.ah, context.data.byte(context.bx+13));
+ if (!context.flags.z()) goto nofindex;
+ context._cmp(context.cl, context.data.byte(context.bx+14));
+ if (!context.flags.z()) goto nofindex;
+ context._cmp(context.ch, context.data.byte(context.bx+15));
+ if (!context.flags.z()) goto nofindex;
+ context.al = context.dl;
+ return;
+nofindex:
+ context._add(context.bx, 16);
+ context._add(context.dl, 1);
+ context._cmp(context.dl, 114);
+ if (!context.flags.z()) goto findexloop;
+ context.al = context.dl;
+ return;
+}
+
+static inline void getexad(Context & context) {
+ context.ah = 0;
+ context.bx = 16;
+ context._mul(context.bx);
+ context.bx = context.ax;
+ context.es = context.data.word(398);
+ context._add(context.bx, 0+2080+30000);
+ return;
+}
+
+static inline void getanyaddir(Context & context) {
+ context._cmp(context.ah, 4);
+ if (context.flags.z()) goto isex3;
+ context._cmp(context.ah, 2);
+ if (context.flags.z()) goto isfree3;
+ getsetad(context);
+ return;
+isfree3:
+ getfreead(context);
+ return;
+isex3:
+ getexad(context);
+ return;
+}
+
+static inline void compare(Context & context) {
+ context._sub(context.dl, 'A');
+ context._sub(context.dh, 'A');
+ context._sub(context.cl, 'A');
+ context._sub(context.ch, 'A');
+ context.push(context.cx);
+ context.push(context.dx);
+ getanyaddir(context);
+ context.dx = context.pop();
+ context.cx = context.pop();
+ context._cmp(context.data.word(context.bx+12), context.cx);
+ if (!context.flags.z()) goto comparefin;
+ context._cmp(context.data.word(context.bx+14), context.dx);
+comparefin:
+ return;
+}
+
+static inline void setuptimeduse(Context & context) {
+ context._cmp(context.data.word(328), 0);
+ if (!context.flags.z()) goto cantsetup;
+ context.data.byte(335) = context.bh;
+ context.data.byte(336) = context.bl;
+ context.data.word(330) = context.cx;
+ context._add(context.dx, context.cx);
+ context.data.word(328) = context.dx;
+ context.bl = context.al;
+ context.bh = 0;
+ context._add(context.bx, context.bx);
+ context.es = context.data.word(454);
+ context.cx = 66*2;
+ context.ax = context.data.word(context.bx);
+ context._add(context.ax, context.cx);
+ context.bx = context.ax;
+ context.data.word(332) = context.es;
+ context.data.word(334) = context.bx;
+cantsetup:
+ return;
+}
+
+static inline void reminders(Context & context) {
+ context._cmp(context.data.byte(184), 24);
+ if (!context.flags.z()) goto notinedenslift;
+ context._cmp(context.data.byte(148), 44);
+ if (!context.flags.z()) goto notinedenslift;
+ context._cmp(context.data.byte(2), 0);
+ if (!context.flags.z()) goto notfirst;
+ context.al = 'D';
+ context.ah = 'K';
+ context.cl = 'E';
+ context.ch = 'Y';
+ isryanholding(context);
+ if (context.flags.z()) goto forgotone;
+ context.al = 'C';
+ context.ah = 'S';
+ context.cl = 'H';
+ context.ch = 'R';
+ findexobject(context);
+ context._cmp(context.al, 114);
+ if (context.flags.z()) goto forgotone;
+ context.ax = context.data.word(context.bx+2);
+ context._cmp(context.al, 4);
+ if (!context.flags.z()) goto forgotone;
+ context._cmp(context.ah, 255);
+ if (context.flags.z()) goto havegotcard;
+ context.cl = 'P';
+ context.ch = 'U';
+ context.dl = 'R';
+ context.dh = 'S';
+ context._xchg(context.al, context.ah);
+ compare(context);
+ if (!context.flags.z()) goto forgotone;
+havegotcard:
+ context._add(context.data.byte(2), 1);
+notfirst:
+ return;
+forgotone:
+ context.al = 50;
+ context.bl = 54;
+ context.bh = 70;
+ context.cx = 48;
+ context.dx = 8;
+ setuptimeduse(context);
+ return;
+notinedenslift:
+ return;
+}
+
+static inline void afternewroom(Context & context) {
+ context._cmp(context.data.byte(186), 0);
+ if (context.flags.z()) goto notnew;
+ context.data.word(328) = 0;
+ createpanel(context);
+ context.data.byte(100) = 0;
+ findroominloc(context);
+ context._cmp(context.data.byte(63), 1);
+ if (context.flags.z()) goto ryansoff;
+ context.al = context.data.byte(151);
+ context._add(context.al, 12);
+ context.ah = context.data.byte(152);
+ context._add(context.ah, 12);
+ findpathofpoint(context);
+ context.data.byte(475) = context.dl;
+ findxyfrompath(context);
+ context.data.byte(187) = 1;
+ryansoff:
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ context.data.word(98) = 160;
+ context.data.byte(186) = 0;
+ showicon(context);
+ spriteupdate(context);
+ printsprites(context);
+ undertextline(context);
+ reelsonscreen(context);
+ mainscreen(context);
+ getunderzoom(context);
+ zoom(context);
+ worktoscreenm(context);
+ walkintoroom(context);
+ reminders(context);
+ atmospheres(context);
+notnew:
+ return;
+}
+
+static inline void readmouse3(Context & context) {
+ context.ax = context.data.word(198);
+ context.data.word(214) = context.ax;
+ context.ax = context.data.word(200);
+ context.data.word(216) = context.ax;
+ mousecall(context);
+ context.data.word(198) = context.cx;
+ context.data.word(200) = context.dx;
+ context.data.word(208) = context.bx;
+ return;
+}
+
+static inline void readmouse4(Context & context) {
+ context.ax = context.data.word(202);
+ context.data.word(212) = context.ax;
+ context.ax = context.data.word(198);
+ context.data.word(214) = context.ax;
+ context.ax = context.data.word(200);
+ context.data.word(216) = context.ax;
+ mousecall(context);
+ context.data.word(198) = context.cx;
+ context.data.word(200) = context.dx;
+ context.ax = context.data.word(204);
+ context._or(context.ax, context.data.word(206));
+ context._or(context.ax, context.data.word(208));
+ context._or(context.bx, context.ax);
+ context.data.word(202) = context.bx;
+ return;
+}
+
+static inline void dumpwatch(Context & context) {
+ context._cmp(context.data.byte(266), 1);
+ if (!context.flags.z()) goto nodumpwatch;
+ context.di = 256;
+ context.bx = 21;
+ context.cl = 40;
+ context.ch = 12;
+ multidump(context);
+ context.data.byte(266) = 0;
+nodumpwatch:
+ return;
+}
+
+static inline void screenupdate(Context & context) {
+ newplace(context);
+ mainscreen(context);
+ animpointer(context);
+ showpointer(context);
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto iswatchingmode;
+ context._cmp(context.data.byte(188), 255);
+ if (!context.flags.z()) goto finishearly;
+iswatchingmode:
+ vsync(context);
+ readmouse1(context);
+ dumppointer(context);
+ dumptextline(context);
+ delpointer(context);
+ autolook(context);
+ spriteupdate(context);
+ watchcount(context);
+ zoom(context);
+ showpointer(context);
+ context._cmp(context.data.byte(391), 0);
+ if (!context.flags.z()) goto finishearly;
+ vsync(context);
+ readmouse2(context);
+ dumppointer(context);
+ dumpzoom(context);
+ delpointer(context);
+ deleverything(context);
+ printsprites(context);
+ reelsonscreen(context);
+ afternewroom(context);
+ showpointer(context);
+ vsync(context);
+ readmouse3(context);
+ dumppointer(context);
+ dumpmap(context);
+ dumptimedtext(context);
+ delpointer(context);
+ showpointer(context);
+ vsync(context);
+ readmouse4(context);
+ dumppointer(context);
+ dumpwatch(context);
+ delpointer(context);
+finishearly:
+ return;
+}
+
+static inline void greyscalesum(Context & context) {
+ context.es = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.cx = 256;
+greysumloop1:
+ context.push(context.cx);
+ context.bx = 0;
+ context.al = context.data.byte(context.si);
+ context.ah = 0;
+ context.cx = 20;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.si+1);
+ context.ah = 0;
+ context.cx = 59;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.si+2);
+ context.ah = 0;
+ context.cx = 11;
+ context._mul(context.cx);
+ context._add(context.bx, context.ax);
+ context.al = -1;
+greysumloop2:
+ context._add(context.al, 1);
+ context._sub(context.bx, 100);
+ if (!context.flags.c()) goto greysumloop2;
+ context.bl = context.al;
+ context.al = context.bl;
+ context.ah = context.data.byte(348);
+ context._cmp(context.al, 0);
+ context._add(context.al, context.ah);
+noaddr:
+ context._stosb();
+ context.ah = context.data.byte(347);
+ context.al = context.bl;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto noaddg;
+ context._add(context.al, context.ah);
+noaddg:
+ context._stosb();
+ context.ah = context.data.byte(349);
+ context.al = context.bl;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto noaddb;
+ context._add(context.al, context.ah);
+noaddb:
+ context._stosb();
+ context._add(context.si, 3);
+ context.cx = context.pop();
+ if (--context.cx) goto greysumloop1;
+ return;
+}
+
+static inline void endpaltostart(Context & context) {
+ context.es = context.data.word(412);
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.cx = 768/2;
+ while(--context.cx) context._movsw();
+ return;
+}
+
+static inline void createpanel(Context & context) {
+ context.di = 0;
+ context.bx = 8;
+ context.ds = context.data.word(410);
+ context.al = 0;
+ context.ah = 2;
+ showframe(context);
+ context.di = 160;
+ context.bx = 8;
+ context.ds = context.data.word(410);
+ context.al = 0;
+ context.ah = 2;
+ showframe(context);
+ context.di = 0;
+ context.bx = 104;
+ context.ds = context.data.word(410);
+ context.al = 0;
+ context.ah = 2;
+ showframe(context);
+ context.di = 160;
+ context.bx = 104;
+ context.ds = context.data.word(410);
+ context.al = 0;
+ context.ah = 2;
+ showframe(context);
+ return;
+}
+
+static inline void createpanel2(Context & context) {
+ createpanel(context);
+ context.di = 0;
+ context.bx = 0;
+ context.ds = context.data.word(410);
+ context.al = 5;
+ context.ah = 2;
+ showframe(context);
+ context.di = 160;
+ context.bx = 0;
+ context.ds = context.data.word(410);
+ context.al = 5;
+ context.ah = 2;
+ showframe(context);
+ return;
+}
+
+static inline void fadescreenup(Context & context) {
+ clearstartpal(context);
+ paltoendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ return;
+}
+
+static inline void hangone(Context & context) {
+hangonloope:
+ context.push(context.cx);
+ vsync(context);
+ context.cx = context.pop();
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto hangonearly;
+ if (--context.cx) goto hangonloope;
+ return;
+hangonearly:
+ context.ax = context.pop();
+ context.ax = context.pop();
+ return;
+}
+
+static inline void rollem(Context & context) {
+ context.cl = 160;
+ context.ch = 160;
+ context.di = 25;
+ context.bx = 20;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ multiget(context);
+ context.es = context.data.word(466);
+ context.si = 49*2;
+ context.ax = context.data.word(context.si);
+ context.si = context.ax;
+ context._add(context.si, 66*2);
+ context.cx = 80;
+endcredits21:
+ context.push(context.cx);
+ context.bx = 10;
+ context.cx = context.data.word(77);
+endcredits22:
+ context.push(context.cx);
+ context.push(context.si);
+ context.push(context.di);
+ context.push(context.es);
+ context.push(context.bx);
+ vsync(context);
+ context.cl = 160;
+ context.ch = 160;
+ context.di = 25;
+ context.bx = 20;
+ context.ds = context.data.word(402);
+ context.si = 0;
+ multiput(context);
+ vsync(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.di = context.pop();
+ context.si = context.pop();
+ context.push(context.si);
+ context.push(context.di);
+ context.push(context.es);
+ context.push(context.bx);
+ context.cx = 18;
+onelot2:
+ context.push(context.cx);
+ context.di = 25;
+ context.dx = 161;
+ context.ax = 0;
+ printdirect(context);
+ context._add(context.bx, context.data.word(77));
+ context.cx = context.pop();
+ if (--context.cx) goto onelot2;
+ vsync(context);
+ context.cl = 160;
+ context.ch = 160;
+ context.di = 25;
+ context.bx = 20;
+ multidump(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ context.di = context.pop();
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto endearly2;
+ context._sub(context.bx, 1);
+ if (--context.cx) goto endcredits22;
+ context.cx = context.pop();
+looknext2:
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto gotnext2;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto gotnext2;
+ goto looknext2;
+gotnext2:
+ context._cmp(context.data.byte(392), 1);
+ if (context.flags.z()) goto endearly;
+ if (--context.cx) goto endcredits21;
+ context.cx = 120;
+ hangone(context);
+ return;
+endearly2:
+ context.cx = context.pop();
+endearly:
+ return;
+}
+
+static inline void rollendcredits2(Context & context) {
+ rollem(context);
+ return;
+}
+
+static inline void showgun(Context & context) {
+ context.data.byte(348) = 0;
+ context.data.byte(347) = 0;
+ context.data.byte(349) = 0;
+ paltostartpal(context);
+ paltoendpal(context);
+ greyscalesum(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ context.cx = 130;
+ hangon(context);
+ endpaltostart(context);
+ clearendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ context.cx = 200;
+ hangon(context);
+ context.data.byte(531) = 34;
+ loadroomssample(context);
+ context.data.byte(386) = 0;
+ context.dx = 2364;
+ loadintotemp(context);
+ createpanel2(context);
+ context.ds = context.data.word(458);
+ context.al = 0;
+ context.ah = 0;
+ context.di = 100;
+ context.bx = 4;
+ showframe(context);
+ context.ds = context.data.word(458);
+ context.al = 1;
+ context.ah = 0;
+ context.di = 158;
+ context.bx = 106;
+ showframe(context);
+ worktoscreen(context);
+ getridoftemp(context);
+ fadescreenup(context);
+ context.cx = 160;
+ hangon(context);
+ context.al = 12;
+ context.ah = 0;
+ playchannel0(context);
+ context.dx = 2273;
+ loadtemptext(context);
+ rollendcredits2(context);
+ getridoftemptext(context);
+ return;
+}
+
+static inline void fadescreendown(Context & context) {
+ paltostartpal(context);
+ clearendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 128;
+ return;
+}
+
+static inline void hangon(Context & context) {
+hangonloop:
+ context.push(context.cx);
+ vsync(context);
+ context.cx = context.pop();
+ if (--context.cx) goto hangonloop;
+ return;
+}
+
+static inline void paltostartpal(Context & context) {
+ context.es = context.data.word(412);
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.cx = 768/2;
+ while(--context.cx) context._movsw();
+ return;
+}
+
+static inline void clearendpal(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.cx = 768;
+ context.al = 0;
+ while(--context.cx) context._stosb();
+ return;
+}
+
+static inline void fadescreendowns(Context & context) {
+ paltostartpal(context);
+ clearendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 64;
+ return;
+}
+
+static inline void loadtemptext(Context & context) {
+ standardload(context);
+ context.data.word(466) = context.ax;
+ return;
+}
+
+static inline void twodigitnum(Context & context) {
+ context.ah = context.cl;
+ context._sub(context.ah, 1);
+numloop1:
+ context._add(context.ah, 1);
+ context._sub(context.al, 10);
+ if (!context.flags.c()) goto numloop1;
+ context._add(context.al, 10);
+ context._add(context.al, context.cl);
+ return;
+}
+
+static inline void cancelch1(Context & context) {
+ context.data.word(521) = 0;
+ context.data.byte(515) = 255;
+ return;
+}
+
+static inline void loadroomssample(Context & context) {
+ context.al = context.data.byte(531);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto loadedalready;
+ context._cmp(context.al, context.data.byte(530));
+ if (context.flags.z()) goto loadedalready;
+ context.data.byte(530) = context.al;
+ context.al = context.data.byte(530);
+ context.cl = '0';
+ twodigitnum(context);
+ context.di = 1909;
+ context._xchg(context.al, context.ah);
+ context.data.word(context.di+10) = context.ax;
+ context.dx = context.di;
+ loadsecondsample(context);
+loadedalready:
+ return;
+}
+
+static inline void readheader(Context & context) {
+ context.ds = context.cs;
+ context.dx = 5881;
+ context.cx = 5958-context.data.byte(5881);
+ readfromfile(context);
+ context.es = context.cs;
+ context.di = 5952;
+ return;
+}
+
+static inline void standardload(Context & context) {
+ openfile(context);
+ readheader(context);
+ context.bx = context.data.word(context.di);
+ context.push(context.bx);
+ context.cl = 4;
+ context._shr(context.bx, context.cl);
+ allocatemem(context);
+ context.ds = context.ax;
+ context.cx = context.pop();
+ context.push(context.ax);
+ context.dx = 0;
+ readfromfile(context);
+ closefile(context);
+ context.ax = context.pop();
+ return;
+}
+
+static inline void loadintotemp(Context & context) {
+ context.ds = context.cs;
+ standardload(context);
+ context.data.word(458) = context.ax;
+ return;
+}
+
+static inline void showmonk(Context & context) {
+ context.al = 0;
+ context.ah = 128;
+ context.di = 160;
+ context.bx = 72;
+ context.ds = context.data.word(458);
+ showframe(context);
+ return;
+}
+
+static inline void getridoftemp(Context & context) {
+ context.es = context.data.word(458);
+ deallocatemem(context);
+ return;
+}
+
+static inline void monkspeaking(Context & context) {
+ context.data.byte(531) = 35;
+ loadroomssample(context);
+ context.dx = 2377;
+ loadintotemp(context);
+ clearwork(context);
+ showmonk(context);
+ worktoscreen(context);
+ context.data.byte(386) = 7;
+ context.data.byte(388) = -1;
+ context.data.byte(387) = 0;
+ context.al = 12;
+ context.ah = 255;
+ playchannel0(context);
+ fadescreenups(context);
+ context.cx = 300;
+ hangon(context);
+ context.al = 40;
+nextmonkspeak:
+ context.push(context.ax);
+ context.ah = 0;
+ context.si = context.ax;
+ context._add(context.si, context.si);
+ context.es = context.data.word(466);
+ context.ax = context.data.word(context.si);
+ context._add(context.ax, 66*2);
+ context.si = context.ax;
+nextbit:
+ context.di = 36;
+ context.bx = 140;
+ context.dl = 239;
+ printdirect(context);
+ context.push(context.ax);
+ context.push(context.si);
+ context.push(context.es);
+ worktoscreen(context);
+ clearwork(context);
+ showmonk(context);
+ context.cx = 240;
+ hangon(context);
+ context.es = context.pop();
+ context.si = context.pop();
+ context.ax = context.pop();
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto nextbit;
+ context.ax = context.pop();
+ context._add(context.al, 1);
+ context._cmp(context.al, 44);
+ if (!context.flags.z()) goto nextmonkspeak;
+ context.data.byte(388) = 1;
+ context.data.byte(387) = 7;
+ fadescreendowns(context);
+ context.cx = 300;
+ hangon(context);
+ getridoftemp(context);
+ return;
+}
+
+static inline void loadintroroom(Context & context) {
+ context.data.byte(139) = 0;
+ context.data.byte(9) = 255;
+ loadroom(context);
+ context.data.word(121) = 72;
+ context.data.word(123) = 16;
+ clearsprites(context);
+ context.data.byte(61) = 0;
+ context.data.byte(142) = '0';
+ context.data.byte(105) = 0;
+ clearwork(context);
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ reelsonscreen(context);
+ spriteupdate(context);
+ printsprites(context);
+ worktoscreen(context);
+ return;
+}
+
+static inline void clearstartpal(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+ context.cx = 256;
+wholeloop1:
+ context.ax = 0;
+ context._stosw();
+ context.al = 0;
+ context._stosb();
+ if (--context.cx) goto wholeloop1;
+ return;
+}
+
+static inline void paltoendpal(Context & context) {
+ context.es = context.data.word(412);
+ context.ds = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768;
+ context.cx = 768/2;
+ while(--context.cx) context._movsw();
+ return;
+}
+
+static inline void fadescreenups(Context & context) {
+ clearstartpal(context);
+ paltoendpal(context);
+ context.data.byte(344) = 1;
+ context.data.byte(346) = 63;
+ context.data.byte(343) = 0;
+ context.data.byte(345) = 64;
+ return;
+}
+
+static inline void playchannel0(Context & context) {
+ context._cmp(context.data.byte(378), 255);
+ if (context.flags.z()) goto dontbother4;
+ context.push(context.es);
+ context.push(context.ds);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.si);
+ context.data.byte(507) = context.al;
+ context.es = context.data.word(420);
+ context._cmp(context.al, 12);
+ if (context.flags.c()) goto notsecondbank;
+ context.es = context.data.word(422);
+ context._sub(context.al, 12);
+notsecondbank:
+ context.data.byte(508) = context.ah;
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context.ah = 0;
+ context.data.word(502) = context.ax;
+ context.ax = context.data.word(context.bx+1);
+ context.data.word(504) = context.ax;
+ context.ax = context.data.word(context.bx+3);
+ context.data.word(506) = context.ax;
+ context._cmp(context.data.byte(508), 0);
+ if (context.flags.z()) goto nosetloop;
+ context.ax = context.data.word(502);
+ context.data.word(510) = context.ax;
+ context.ax = context.data.word(504);
+ context.data.word(512) = context.ax;
+ context.ax = context.data.word(506);
+ context.data.word(514) = context.ax;
+nosetloop:
+ context.si = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ds = context.pop();
+ context.es = context.pop();
+dontbother4:
+ return;
+}
+
+static inline void cancelch0(Context & context) {
+ context.data.byte(508) = 0;
+ context.data.word(506) = 0;
+ context.data.byte(507) = 255;
+ return;
+}
+
+static inline void atmospheres(Context & context) {
+ context.cl = context.data.byte(148);
+ context.ch = context.data.byte(149);
+ context.bx = 5073;
+nextatmos:
+ context.al = context.data.byte(context.bx);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto nomoreatmos;
+ context._cmp(context.al, context.data.byte(184));
+ if (!context.flags.z()) goto wrongatmos;
+ context.ax = context.data.word(context.bx+1);
+ context._cmp(context.ax, context.cx);
+ if (!context.flags.z()) goto wrongatmos;
+ context.ax = context.data.word(context.bx+3);
+ context._cmp(context.al, context.data.byte(507));
+ if (context.flags.z()) goto playingalready;
+ context._cmp(context.data.byte(9), 45);
+ if (!context.flags.z()) goto notweb;
+ context._cmp(context.data.word(23), 45);
+ if (context.flags.z()) goto wrongatmos;
+notweb:
+ playchannel0(context);
+ context._cmp(context.data.byte(184), 2);
+ context._cmp(context.data.byte(149), 0);
+ if (context.flags.z()) goto fullvol;
+ if (!context.flags.z()) goto notlouisvol;
+ context._cmp(context.data.byte(149), 10);
+ if (!context.flags.z()) goto notlouisvol;
+ context._cmp(context.data.byte(148), 22);
+ if (!context.flags.z()) goto notlouisvol;
+ context.data.byte(386) = 5;
+notlouisvol:
+playingalready:
+ context._cmp(context.data.byte(184), 2);
+ if (!context.flags.z()) goto notlouisvol2;
+ context._cmp(context.data.byte(148), 22);
+ if (context.flags.z()) goto louisvol;
+ context._cmp(context.data.byte(148), 11);
+ if (!context.flags.z()) goto notlouisvol2;
+fullvol:
+ context.data.byte(386) = 0;
+notlouisvol2:
+ return;
+louisvol:
+ context.data.byte(386) = 5;
+ return;
+wrongatmos:
+ context._add(context.bx, 5);
+ goto nextatmos;
+nomoreatmos:
+ cancelch0(context);
+ return;
+}
+
+static inline void spriteupdate(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
+ context.al = context.data.byte(63);
+ context.data.byte(context.bx+31) = context.al;
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
+ context.cx = 16;
+_tmp18:
+ context.push(context.cx);
+ context.push(context.bx);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto _tmp18a;
+ context.push(context.es);
+ context.push(context.ds);
+ context.cx = context.data.word(context.bx+2);
+ context.data.word(context.bx+24) = context.cx;
+ __dispatch_call(context, context.ax);
+ context.ds = context.pop();
+ context.es = context.pop();
+_tmp18a:
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._cmp(context.data.byte(186), 1);
+ if (context.flags.z()) goto _tmp18b;
+ context._add(context.bx, 32);
+ if (--context.cx) goto _tmp18;
+_tmp18b:
+ return;
+}
+
+static inline void maptopanel(Context & context) {
+ context.di = context.data.word(125);
+ context._add(context.di, context.data.word(117));
+ context.bx = context.data.word(127);
+ context._add(context.bx, context.data.word(119));
+ context.ds = context.data.word(402);
+ context.si = 0;
+ context.cl = context.data.byte(128);
+ context.ch = context.data.byte(129);
+ multiput(context);
+ return;
+}
+
+static inline void deleverything(Context & context) {
+ context.al = context.data.byte(129);
+ context.ah = 0;
+ context._add(context.ax, context.data.word(123));
+ context._cmp(context.ax, 182);
+ if (!context.flags.c()) goto bigroom;
+ maptopanel(context);
+ return;
+bigroom:
+ context._sub(context.data.byte(129), 8);
+ maptopanel(context);
+ context._add(context.data.byte(129), 8);
+ return;
+}
+
+static inline void printasprite(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.si = context.bx;
+ context.ds = context.data.word(context.si+6);
+ context.al = context.data.byte(context.si+11);
+ context.ah = 0;
+ context._cmp(context.al, 220);
+ if (context.flags.c()) goto notnegative1;
+ context.ah = 255;
+notnegative1:
+ context.bx = context.ax;
+ context._add(context.bx, context.data.word(119));
+ context.al = context.data.byte(context.si+10);
+ context.ah = 0;
+ context._cmp(context.al, 220);
+ if (context.flags.c()) goto notnegative2;
+ context.ah = 255;
+notnegative2:
+ context.di = context.ax;
+ context._add(context.di, context.data.word(117));
+ context.al = context.data.byte(context.si+15);
+ context.ah = 0;
+ context._cmp(context.data.byte(context.si+30), 0);
+ if (context.flags.z()) goto steadyframe;
+ context.ah = 8;
+steadyframe:
+ context._cmp(context.data.byte(182), 6);
+ if (!context.flags.z()) goto notquickp;
+notquickp:
+ showframe(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void printsprites(Context & context) {
+ context.es = context.data.word(412);
+ context.cx = 0;
+priorityloop:
+ context.push(context.cx);
+ context.data.byte(182) = context.cl;
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
+ context.cx = 16;
+prtspriteloop:
+ context.push(context.cx);
+ context.push(context.bx);
+ context.ax = context.data.word(context.bx);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto skipsprite;
+ context.al = context.data.byte(182);
+ context._cmp(context.al, context.data.byte(context.bx+23));
+ if (!context.flags.z()) goto skipsprite;
+ context._cmp(context.data.byte(context.bx+31), 1);
+ if (context.flags.z()) goto skipsprite;
+ printasprite(context);
+skipsprite:
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 32);
+ if (--context.cx) goto prtspriteloop;
+ context.cx = context.pop();
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 7);
+ if (!context.flags.z()) goto priorityloop;
+ return;
+}
+
+static inline void undertextline(Context & context) {
+ context.di = context.data.word(79);
+ context.bx = context.data.word(81);
+ context._sub(context.bx, 3);
+ context.ds = context.data.word(412);
+ context.si = 0;
+ context.cl = 228;
+ context.ch = 13;
+ multiget(context);
+ return;
+}
+
+static inline void reconstruct(Context & context) {
+ context._cmp(context.data.byte(130), 0);
+ if (context.flags.z()) goto noneedtorecon;
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ spriteupdate(context);
+ printsprites(context);
+ context._cmp(context.data.byte(184), 20);
+ if (!context.flags.z()) goto notfudge;
+ undertextline(context);
+notfudge:
+ context.data.byte(130) = 0;
+noneedtorecon:
+ return;
+}
+
+static inline void updatepeople(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5);
+ context.data.word(18) = context.di;
+ context.cx = 12*5;
+ context.al = 255;
+ while(--context.cx) context._stosb();
+ context._add(context.data.word(138), 1);
+ context.es = context.cs;
+ context.bx = 537;
+ context.di = 1003;
+updateloop:
+ context.al = context.data.byte(context.bx);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto endupdate;
+ context._cmp(context.al, context.data.byte(184));
+ if (!context.flags.z()) goto notinthisroom;
+ context.cx = context.data.word(context.bx+1);
+ context._cmp(context.cl, context.data.byte(148));
+ if (!context.flags.z()) goto notinthisroom;
+ context._cmp(context.ch, context.data.byte(149));
+ if (!context.flags.z()) goto notinthisroom;
+ context.push(context.di);
+ context.ax = context.data.word(context.di);
+ __dispatch_call(context, context.ax);
+ context.di = context.pop();
+notinthisroom:
+ context._add(context.bx, 8);
+ context._add(context.di, 2);
+ goto updateloop;
+endupdate:
+ return;
+}
+
+static inline void getreelstart(Context & context) {
+ context.ax = context.data.word(239);
+ context.cx = 40;
+ context._mul(context.cx);
+ context.es = context.data.word(450);
+ context.si = context.ax;
+ context._add(context.si, 0+(36*144));
+ return;
+}
+
+static inline void placesetobject(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.cl = 0;
+ context.ch = 0;
+ findormake(context);
+ getsetad(context);
+ context.data.byte(context.bx+58) = 0;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void getsetad(Context & context) {
+ context.ah = 0;
+ context.bx = 64;
+ context._mul(context.bx);
+ context.bx = context.ax;
+ context.es = context.data.word(428);
+ return;
+}
+
+static inline void removesetobject(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.cl = 255;
+ context.ch = 0;
+ findormake(context);
+ getsetad(context);
+ context.data.byte(context.bx+58) = 255;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void findormake(Context & context) {
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80);
+ context.push(context.ax);
+ context.es = context.data.word(412);
+ context.ah = context.data.byte(184);
+changeloop:
+ context._cmp(context.data.byte(context.bx), 255);
+ if (context.flags.z()) goto haventfound;
+ context._cmp(context.ax, context.data.word(context.bx));
+ if (!context.flags.z()) goto nofoundchange;
+ context._cmp(context.ch, context.data.byte(context.bx+3));
+ if (context.flags.z()) goto foundchange;
+nofoundchange:
+ context._add(context.bx, 4);
+ goto changeloop;
+foundchange:
+ context.ax = context.pop();
+ context.data.byte(context.bx+2) = context.cl;
+ return;
+haventfound:
+ context.data.word(context.bx) = context.ax;
+ context.data.word(context.bx+2) = context.cx;
+ context.ax = context.pop();
+ return;
+}
+
+static inline void placefreeobject(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ context.cl = 0;
+ context.ch = 1;
+ findormake(context);
+ getfreead(context);
+ context.data.byte(context.bx+2) = 0;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void getfreead(Context & context) {
+ context.ah = 0;
+ context.cl = 4;
+ context._shl(context.ax, context.cl);
+ context.bx = context.ax;
+ context.es = context.data.word(426);
+ return;
+}
+
+static inline void removefreeobject(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ getfreead(context);
+ context.data.byte(context.bx+2) = 255;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void switchryanoff(Context & context) {
+ context.data.byte(63) = 1;
+ return;
+}
+
+static inline void switchryanon(Context & context) {
+ context.data.byte(63) = 255;
+ return;
+}
+
+static inline void movemap(Context & context) {
+ context._cmp(context.ah, 32);
+ if (!context.flags.z()) goto notmapup2;
+ context._sub(context.data.byte(149), 20);
+ context.data.byte(186) = 1;
+ return;
+notmapup2:
+ context._cmp(context.ah, 16);
+ if (!context.flags.z()) goto notmapupspec;
+ context._sub(context.data.byte(149), 10);
+ context.data.byte(186) = 1;
+ return;
+notmapupspec:
+ context._cmp(context.ah, 8);
+ if (!context.flags.z()) goto notmapdownspec;
+ context._add(context.data.byte(149), 10);
+ context.data.byte(186) = 1;
+ return;
+notmapdownspec:
+ context._cmp(context.ah, 2);
+ if (!context.flags.z()) goto notmaprightspec;
+ context._add(context.data.byte(148), 11);
+ context.data.byte(186) = 1;
+ return;
+notmaprightspec:
+ context._sub(context.data.byte(148), 11);
+ context.data.byte(186) = 1;
+ return;
+}
+
+static inline void dealwithspecial(Context & context) {
+ context._sub(context.al, 220);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto notplset;
+ context.al = context.ah;
+ placesetobject(context);
+ context.data.byte(130) = 1;
+ return;
+notplset:
+ context._cmp(context.al, 1);
+ if (!context.flags.z()) goto notremset;
+ context.al = context.ah;
+ removesetobject(context);
+ context.data.byte(130) = 1;
+ return;
+notremset:
+ context._cmp(context.al, 2);
+ if (!context.flags.z()) goto notplfree;
+ context.al = context.ah;
+ placefreeobject(context);
+ context.data.byte(130) = 1;
+ return;
+notplfree:
+ context._cmp(context.al, 3);
+ if (!context.flags.z()) goto notremfree;
+ context.al = context.ah;
+ removefreeobject(context);
+ context.data.byte(130) = 1;
+ return;
+notremfree:
+ context._cmp(context.al, 4);
+ if (!context.flags.z()) goto notryanoff;
+ switchryanoff(context);
+ return;
+notryanoff:
+ context._cmp(context.al, 5);
+ if (!context.flags.z()) goto notryanon;
+ context.data.byte(135) = context.ah;
+ context.data.byte(133) = context.ah;
+ switchryanon(context);
+ return;
+notryanon:
+ context._cmp(context.al, 6);
+ if (!context.flags.z()) goto notchangeloc;
+ context.data.byte(188) = context.ah;
+ return;
+notchangeloc:
+ movemap(context);
+ return;
+}
+
+static inline void findsource(Context & context) {
+ context.ax = context.data.word(160);
+ context._cmp(context.ax, 160);
+ if (!context.flags.c()) goto over1000;
+ context.ds = context.data.word(430);
+ context.data.word(244) = 0;
+ return;
+over1000:
+ context._cmp(context.ax, 320);
+ if (!context.flags.c()) goto over1001;
+ context.ds = context.data.word(432);
+ context.data.word(244) = 160;
+ return;
+over1001:
+ context.ds = context.data.word(434);
+ context.data.word(244) = 320;
+ return;
+}
+
+static inline void showreelframe(Context & context) {
+ context.al = context.data.byte(context.si+2);
+ context.ah = 0;
+ context.di = context.ax;
+ context._add(context.di, context.data.word(117));
+ context.al = context.data.byte(context.si+3);
+ context.bx = context.ax;
+ context._add(context.bx, context.data.word(119));
+ context.ax = context.data.word(context.si);
+ context.data.word(160) = context.ax;
+ findsource(context);
+ context.ax = context.data.word(160);
+ context._sub(context.ax, context.data.word(244));
+ context.ah = 8;
+ showframe(context);
+ return;
+}
+
+static inline void soundonreels(Context & context) {
+ context.bl = context.data.byte(184);
+ context._add(context.bl, context.bl);
+ context._xor(context.bh, context.bh);
+ context._add(context.bx, 1254);
+ context.si = context.data.word(context.bx);
+reelsoundloop:
+ context.al = context.data.byte(context.si);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto endreelsound;
+ context.ax = context.data.word(context.si+1);
+ context._cmp(context.ax, context.data.word(239));
+ if (!context.flags.z()) goto skipreelsound;
+ context._cmp(context.ax, context.data.word(351));
+ if (context.flags.z()) goto skipreelsound;
+ context.data.word(351) = context.ax;
+ context.al = context.data.byte(context.si);
+ context._cmp(context.al, 64);
+ if (context.flags.c()) { playchannel1(context); return; };
+ context._cmp(context.al, 128);
+ if (context.flags.c()) goto channel0once;
+ context._and(context.al, 63);
+ context.ah = 255;
+ { playchannel0(context); return; };
+channel0once:
+ context._and(context.al, 63);
+ context.ah = 0;
+ { playchannel0(context); return; };
+skipreelsound:
+ context._add(context.si, 3);
+ goto reelsoundloop;
+endreelsound:
+ context.ax = context.data.word(351);
+ context._cmp(context.ax, context.data.word(239));
+ if (context.flags.z()) goto nochange2;
+ context.data.word(351) = -1;
+nochange2:
+ return;
+}
+
+static inline void plotreel(Context & context) {
+ getreelstart(context);
+retryreel:
+ context.push(context.es);
+ context.push(context.si);
+ context.ax = context.data.word(context.si+2);
+ context._cmp(context.al, 220);
+ if (context.flags.c()) goto normalreel;
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto normalreel;
+ dealwithspecial(context);
+ context._add(context.data.word(239), 1);
+ context.si = context.pop();
+ context.es = context.pop();
+ context._add(context.si, 40);
+ goto retryreel;
+normalreel:
+ context.cx = 8;
+plotloop:
+ context.push(context.cx);
+ context.push(context.es);
+ context.push(context.si);
+ context.ax = context.data.word(context.si);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto notplot;
+ showreelframe(context);
+notplot:
+ context.si = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 5);
+ if (--context.cx) goto plotloop;
+ soundonreels(context);
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void checkforshake(Context & context) {
+ context._cmp(context.data.byte(184), 26);
+ if (!context.flags.z()) goto notstartshake;
+ context._cmp(context.ax, 104);
+ if (!context.flags.z()) goto notstartshake;
+ context.data.byte(68) = -1;
+notstartshake:
+ return;
+}
+
+static inline void getroomspaths(Context & context) {
+ context.al = context.data.byte(185);
+ context.ah = 0;
+ context.cx = 144;
+ context._mul(context.cx);
+ context.es = context.data.word(450);
+ context.bx = 0;
+ context._add(context.bx, context.ax);
+ return;
+}
+
+static inline void checkdest(Context & context) {
+ context.push(context.bx);
+ context._add(context.bx, 12*8);
+ context.ah = context.data.byte(475);
+ context.cl = 4;
+ context._shl(context.ah, context.cl);
+ context.al = context.data.byte(478);
+ context.cl = 24;
+ context.ch = context.data.byte(478);
+checkdestloop:
+ context.dh = context.data.byte(context.bx);
+ context._and(context.dh, 0b11110000);
+ context.dl = context.data.byte(context.bx);
+ context._and(context.dl, 0b00001111);
+ context._cmp(context.ax, context.dx);
+ if (!context.flags.z()) goto nextcheck;
+ context.al = context.data.byte(context.bx+1);
+ context._and(context.al, 15);
+ context.data.byte(478) = context.al;
+ context.bx = context.pop();
+ return;
+nextcheck:
+ context.dl = context.data.byte(context.bx);
+ context._and(context.dl, 0b11110000);
+ context._shr(context.dl, 1);
+ context._shr(context.dl, 1);
+ context._shr(context.dl, 1);
+ context._shr(context.dl, 1);
+ context.dh = context.data.byte(context.bx);
+ context._and(context.dh, 0b00001111);
+ context._shl(context.dh, 1);
+ context._shl(context.dh, 1);
+ context._shl(context.dh, 1);
+ context._shl(context.dh, 1);
+ context._cmp(context.ax, context.dx);
+ if (!context.flags.z()) goto nextcheck2;
+ context.ch = context.data.byte(context.bx+1);
+ context._and(context.ch, 15);
+nextcheck2:
+ context._add(context.bx, 2);
+ context._sub(context.cl, 1);
+ if (!context.flags.z()) goto checkdestloop;
+ context.data.byte(478) = context.ch;
+ context.bx = context.pop();
+ return;
+}
+
+static inline void workoutframes(Context & context) {
+ context.bx = context.data.word(480);
+ context._add(context.bx, 32);
+ context.ax = context.data.word(484);
+ context._add(context.ax, 32);
+ context._sub(context.bx, context.ax);
+ if (!context.flags.c()) goto notneg1;
+ context._neg(context.bx);
+notneg1:
+ context.cx = context.data.word(482);
+ context._add(context.cx, 32);
+ context.ax = context.data.word(486);
+ context._add(context.ax, 32);
+ context._sub(context.cx, context.ax);
+ if (!context.flags.c()) goto notneg2;
+ context._neg(context.cx);
+notneg2:
+ context._cmp(context.bx, context.cx);
+ if (!context.flags.c()) goto tendstohoriz;
+ context.dl = 2;
+ context.ax = context.cx;
+ context._shr(context.ax, 1);
+ context._cmp(context.bx, context.ax);
+ if (context.flags.c()) goto gotquad;
+ context.dl = 1;
+ goto gotquad;
+tendstohoriz:
+ context.dl = 0;
+ context.ax = context.bx;
+ context._shr(context.ax, 1);
+ context._cmp(context.cx, context.ax);
+ if (context.flags.c()) goto gotquad;
+ context.dl = 1;
+ goto gotquad;
+gotquad:
+ context.bx = context.data.word(480);
+ context._add(context.bx, 32);
+ context.ax = context.data.word(484);
+ context._add(context.ax, 32);
+ context._sub(context.bx, context.ax);
+ if (context.flags.c()) goto isinright;
+isinleft:
+ context.cx = context.data.word(482);
+ context._add(context.cx, 32);
+ context.ax = context.data.word(486);
+ context._add(context.ax, 32);
+ context._sub(context.cx, context.ax);
+ if (!context.flags.c()) goto topleft;
+ context._cmp(context.dl, 1);
+ if (context.flags.z()) goto noswap1;
+ context._xor(context.dl, 2);
+noswap1:
+ context._add(context.dl, 4);
+ goto success;
+topleft:
+ context._add(context.dl, 6);
+ goto success;
+isinright:
+ context.cx = context.data.word(482);
+ context._add(context.cx, 32);
+ context.ax = context.data.word(486);
+ context._add(context.ax, 32);
+ context._sub(context.cx, context.ax);
+ if (!context.flags.c()) goto botright;
+ context._add(context.dl, 2);
+ goto success;
+botright:
+ context._cmp(context.dl, 1);
+ if (context.flags.z()) goto noswap2;
+ context._xor(context.dl, 2);
+noswap2:
+success:
+ context._and(context.dl, 7);
+ context.data.byte(135) = context.dl;
+ context.data.byte(136) = 0;
+ return;
+}
+
+static inline void bresenhams(Context & context) {
+ workoutframes(context);
+ context.dx = context.ds;
+ context.es = context.dx;
+ context.di = 8344;
+ context.si = 1;
+ context.data.byte(493) = 0;
+ context.cx = context.data.word(484);
+ context._sub(context.cx, context.data.word(480));
+ if (context.flags.z()) goto vertline;
+ if (!context.flags.s()) goto line1;
+ context._neg(context.cx);
+ context.bx = context.data.word(484);
+ context._xchg(context.bx, context.data.word(480));
+ context.data.word(484) = context.bx;
+ context.bx = context.data.word(486);
+ context._xchg(context.bx, context.data.word(482));
+ context.data.word(486) = context.bx;
+ context.data.byte(493) = 1;
+line1:
+ context.bx = context.data.word(486);
+ context._sub(context.bx, context.data.word(482));
+ if (context.flags.z()) goto horizline;
+ if (!context.flags.s()) goto line3;
+ context._neg(context.bx);
+ context._neg(context.si);
+line3:
+ context.push(context.si);
+ context.data.byte(491) = 0;
+ context._cmp(context.bx, context.cx);
+ if (context.flags.le()) goto line4;
+ context.data.byte(491) = 1;
+ context._xchg(context.bx, context.cx);
+line4:
+ context._shl(context.bx, 1);
+ context.data.word(488) = context.bx;
+ context._sub(context.bx, context.cx);
+ context.si = context.bx;
+ context._sub(context.bx, context.cx);
+ context.data.word(490) = context.bx;
+ context.ax = context.data.word(480);
+ context.bx = context.data.word(482);
+ context.ah = context.bl;
+ context._add(context.cx, 1);
+ context.bx = context.pop();
+ context._cmp(context.data.byte(491), 1);
+ if (context.flags.z()) goto hislope;
+ goto loslope;
+vertline:
+ context.ax = context.data.word(482);
+ context.bx = context.data.word(486);
+ context.cx = context.bx;
+ context._sub(context.cx, context.ax);
+ if (!context.flags.ge()) goto line31;
+ context._neg(context.cx);
+ context.ax = context.bx;
+ context.data.byte(493) = 1;
+line31:
+ context._add(context.cx, 1);
+ context.bx = context.data.word(480);
+ context._xchg(context.ax, context.bx);
+ context.ah = context.bl;
+ context.bx = context.si;
+line32:
+ context._stosw();
+ context._add(context.ah, context.bl);
+ if (--context.cx) goto line32;
+ goto lineexit;
+horizline:
+ context.ax = context.data.word(480);
+ context.bx = context.data.word(482);
+ context.ah = context.bl;
+ context._add(context.cx, 1);
+horizloop:
+ context._stosw();
+ context._add(context.al, 1);
+ if (--context.cx) goto horizloop;
+ goto lineexit;
+loslope:
+loloop:
+ context._stosw();
+ context._add(context.al, 1);
+ context._or(context.si, context.si);
+ if (!context.flags.s()) goto line12;
+ context._add(context.si, context.data.word(488));
+ if (--context.cx) goto loloop;
+ goto lineexit;
+line12:
+ context._add(context.si, context.data.word(490));
+ context._add(context.ah, context.bl);
+ if (--context.cx) goto loloop;
+ goto lineexit;
+hislope:
+hiloop:
+ context._stosw();
+ context._add(context.ah, context.bl);
+ context._or(context.si, context.si);
+ if (!context.flags.s()) goto line23;
+ context._add(context.si, context.data.word(488));
+ if (--context.cx) goto hiloop;
+ goto lineexit;
+line23:
+ context._add(context.si, context.data.word(490));
+ context._add(context.al, 1);
+ if (--context.cx) goto hiloop;
+lineexit:
+ context._sub(context.di, 8344);
+ context.ax = context.di;
+ context._shr(context.ax, 1);
+ context.data.byte(494) = context.al;
+ return;
+}
+
+static inline void autosetwalk(Context & context) {
+ context.al = context.data.byte(475);
+ context._cmp(context.data.byte(477), context.al);
+ if (!context.flags.z()) goto notsamealready;
+ return;
+notsamealready:
+ getroomspaths(context);
+ checkdest(context);
+ context.push(context.bx);
+ context.al = context.data.byte(475);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context.ah = 0;
+ context._sub(context.ax, 12);
+ context.data.word(480) = context.ax;
+ context.al = context.data.byte(context.bx+1);
+ context.ah = 0;
+ context._sub(context.ax, 12);
+ context.data.word(482) = context.ax;
+ context.bx = context.pop();
+ context.al = context.data.byte(478);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context.ah = 0;
+ context._sub(context.ax, 12);
+ context.data.word(484) = context.ax;
+ context.al = context.data.byte(context.bx+1);
+ context.ah = 0;
+ context._sub(context.ax, 12);
+ context.data.word(486) = context.ax;
+ bresenhams(context);
+ context._cmp(context.data.byte(493), 0);
+ if (context.flags.z()) goto normalline;
+ context.al = context.data.byte(494);
+ context._sub(context.al, 1);
+ context.data.byte(492) = context.al;
+ context.data.byte(493) = 1;
+ return;
+normalline:
+ context.data.byte(492) = 0;
+ return;
+}
+
+static inline void watchreel(Context & context) {
+ context._cmp(context.data.word(23), -1);
+ if (context.flags.z()) goto notplayingreel;
+ context.al = context.data.byte(475);
+ context._cmp(context.al, context.data.byte(477));
+ if (!context.flags.z()) goto waitstopwalk;
+ context.al = context.data.byte(135);
+ context._cmp(context.al, context.data.byte(133));
+ if (context.flags.z()) goto notwatchpath;
+waitstopwalk:
+ return;
+notwatchpath:
+ context._sub(context.data.byte(26), 1);
+ context._cmp(context.data.byte(26), -1);
+ if (!context.flags.z()) goto showwatchreel;
+ context.al = context.data.byte(27);
+ context.data.byte(26) = context.al;
+ context.ax = context.data.word(23);
+ context._cmp(context.ax, context.data.word(25));
+ if (!context.flags.z()) goto ismorereel;
+ context._cmp(context.data.word(21), 0);
+ if (!context.flags.z()) goto showwatchreel;
+ context.data.word(23) = -1;
+ context.data.byte(32) = -1;
+ context._cmp(context.data.word(29), -1);
+ if (context.flags.z()) goto nomorereel;
+ context.data.byte(32) = 1;
+ goto notplayingreel;
+ismorereel:
+ context._add(context.data.word(23), 1);
+showwatchreel:
+ context.ax = context.data.word(23);
+ context.data.word(239) = context.ax;
+ plotreel(context);
+ context.ax = context.data.word(239);
+ context.data.word(23) = context.ax;
+ checkforshake(context);
+nomorereel:
+ return;
+notplayingreel:
+ context._cmp(context.data.byte(32), 1);
+ if (!context.flags.z()) goto notholdingreel;
+ context.ax = context.data.word(29);
+ context.data.word(239) = context.ax;
+ plotreel(context);
+ return;
+notholdingreel:
+ context._cmp(context.data.byte(32), 2);
+ if (!context.flags.z()) goto notreleasehold;
+ context._sub(context.data.byte(26), 1);
+ context._cmp(context.data.byte(26), -1);
+ if (!context.flags.z()) goto notlastspeed2;
+ context.al = context.data.byte(27);
+ context.data.byte(26) = context.al;
+ context._add(context.data.word(29), 1);
+notlastspeed2:
+ context.ax = context.data.word(29);
+ context._cmp(context.ax, context.data.word(31));
+ if (!context.flags.z()) goto ismorereel2;
+ context.data.word(29) = -1;
+ context.data.byte(32) = -1;
+ context.al = context.data.byte(33);
+ context.data.byte(478) = context.al;
+ context.data.byte(477) = context.al;
+ autosetwalk(context);
+ return;
+ismorereel2:
+ context.ax = context.data.word(29);
+ context.data.word(239) = context.ax;
+ plotreel(context);
+ return;
+notreleasehold:
+ return;
+}
+
+static inline void randomnum1(Context & context) {
+ context.push(context.ds);
+ context.push(context.es);
+ context.push(context.di);
+ context.push(context.bx);
+ context.push(context.cx);
+ randomnumber(context);
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.di = context.pop();
+ context.es = context.pop();
+ context.ds = context.pop();
+ return;
+}
+
+static inline void playchannel1(Context & context) {
+ context._cmp(context.data.byte(378), 255);
+ if (context.flags.z()) goto dontbother5;
+ context._cmp(context.data.byte(515), 7);
+ if (context.flags.z()) goto dontbother5;
+ context.push(context.es);
+ context.push(context.ds);
+ context.push(context.bx);
+ context.push(context.cx);
+ context.push(context.di);
+ context.push(context.si);
+ context.data.byte(515) = context.al;
+ context.es = context.data.word(420);
+ context._cmp(context.al, 12);
+ if (context.flags.c()) goto notsecondbank1;
+ context.es = context.data.word(422);
+ context._sub(context.al, 12);
+notsecondbank1:
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.bx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.bx, context.ax);
+ context.al = context.data.byte(context.bx);
+ context.ah = 0;
+ context.data.word(517) = context.ax;
+ context.ax = context.data.word(context.bx+1);
+ context.data.word(519) = context.ax;
+ context.ax = context.data.word(context.bx+3);
+ context.data.word(521) = context.ax;
+ context.si = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context.bx = context.pop();
+ context.ds = context.pop();
+ context.es = context.pop();
+dontbother5:
+ return;
+}
+
+static inline void showrain(Context & context) {
+ context.ds = context.data.word(414);
+ context.si = 6*58;
+ context.ax = context.data.word(context.si+2);
+ context.si = context.ax;
+ context._add(context.si, 2080);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30);
+ context.es = context.data.word(412);
+ context._cmp(context.data.byte(context.bx), 255);
+ if (context.flags.z()) goto nothunder;
+morerain:
+ context.es = context.data.word(412);
+ context._cmp(context.data.byte(context.bx), 255);
+ if (context.flags.z()) goto finishrain;
+ context.al = context.data.byte(context.bx+1);
+ context.ah = 0;
+ context._add(context.ax, context.data.word(119));
+ context._add(context.ax, context.data.word(127));
+ context.cx = 320;
+ context._mul(context.cx);
+ context.cl = context.data.byte(context.bx);
+ context.ch = 0;
+ context._add(context.ax, context.cx);
+ context._add(context.ax, context.data.word(117));
+ context._add(context.ax, context.data.word(125));
+ context.di = context.ax;
+ context.cl = context.data.byte(context.bx+2);
+ context.ch = 0;
+ context.ax = context.data.word(context.bx+3);
+ context.dl = context.data.byte(context.bx+5);
+ context.dh = 0;
+ context._sub(context.ax, context.dx);
+ context._and(context.ax, 511);
+ context.data.word(context.bx+3) = context.ax;
+ context._add(context.bx, 6);
+ context.push(context.si);
+ context._add(context.si, context.ax);
+ context.es = context.data.word(400);
+ context.ah = 0;
+ context.dx = 320-2;
+rainloop:
+ context._lodsb();
+ context._cmp(context.al, context.ah);
+ if (context.flags.z()) goto noplot;
+ context._stosb();
+ context._add(context.di, context.dx);
+ if (--context.cx) goto rainloop;
+ context.si = context.pop();
+ goto morerain;
+noplot:
+ context._add(context.di, 320-1);
+ if (--context.cx) goto rainloop;
+ context.si = context.pop();
+ goto morerain;
+finishrain:
+ context._cmp(context.data.word(521), 0);
+ if (!context.flags.z()) goto nothunder;
+ context._cmp(context.data.byte(184), 2);
+ if (!context.flags.z()) goto notlouisthund;
+ context._cmp(context.data.byte(45), 1);
+ if (!context.flags.z()) goto nothunder;
+notlouisthund:
+ context._cmp(context.data.byte(184), 55);
+ if (context.flags.z()) goto nothunder;
+ randomnum1(context);
+ context._cmp(context.al, 1);
+ if (!context.flags.c()) goto nothunder;
+ context.al = 7;
+ context._cmp(context.data.byte(507), 6);
+ if (context.flags.z()) goto isthunder1;
+ context.al = 4;
+isthunder1:
+ playchannel1(context);
+nothunder:
+ return;
+}
+
+static inline void reelsonscreen(Context & context) {
+ reconstruct(context);
+ updatepeople(context);
+ watchreel(context);
+ showrain(context);
+ usetimedtext(context);
+ return;
+}
+
+static inline void clearwork(Context & context) {
+ context.ax = 0x0;
+ context.es = context.data.word(400);
+ context.di = 0;
+ context.cx = (200*320)/64;
+clearloop:
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ if (--context.cx) goto clearloop;
+ return;
+}
+
+static inline void findroominloc(Context & context) {
+ context.al = context.data.byte(149);
+ context.cx = -6;
+looky:
+ context._add(context.cx, 6);
+ context._sub(context.al, 10);
+ if (!context.flags.c()) goto looky;
+ context.al = context.data.byte(148);
+ context._sub(context.cx, 1);
+lookx:
+ context._add(context.cx, 1);
+ context._sub(context.al, 11);
+ if (!context.flags.c()) goto lookx;
+ context.data.byte(185) = context.cl;
+ return;
+}
+
+static inline void eraseoldobs(Context & context) {
+ context._cmp(context.data.byte(62), 0);
+ if (context.flags.z()) goto donterase;
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
+ context.cx = 16;
+oberase:
+ context.push(context.cx);
+ context.push(context.bx);
+ context.ax = context.data.word(context.bx+20);
+ context._cmp(context.ax, 0x0ffff);
+ if (context.flags.z()) goto notthisob;
+ context.di = context.bx;
+ context.al = 255;
+ context.cx = 32;
+ while(--context.cx) context._stosb();
+notthisob:
+ context.bx = context.pop();
+ context.cx = context.pop();
+ context._add(context.bx, 32);
+ if (--context.cx) goto oberase;
+donterase:
+ return;
+}
+
+static inline void drawflags(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32);
+ context.al = context.data.byte(149);
+ context.ah = 0;
+ context.cx = 66;
+ context._mul(context.cx);
+ context.bl = context.data.byte(148);
+ context.bh = 0;
+ context._add(context.ax, context.bx);
+ context.si = 0;
+ context._add(context.si, context.ax);
+ context.cx = 10;
+_tmp28:
+ context.push(context.cx);
+ context.cx = 11;
+_tmp28a:
+ context.ds = context.data.word(418);
+ context._lodsb();
+ context.ds = context.data.word(416);
+ context.push(context.si);
+ context.push(context.ax);
+ context.ah = 0;
+ context._add(context.ax, context.ax);
+ context.si = 0;
+ context._add(context.si, context.ax);
+ context._movsw();
+ context.ax = context.pop();
+ context._stosb();
+ context.si = context.pop();
+ if (--context.cx) goto _tmp28a;
+ context._add(context.si, 66-11);
+ context.cx = context.pop();
+ if (--context.cx) goto _tmp28;
+ return;
+}
+
+static inline void addalong(Context & context) {
+ context.ah = 11;
+addloop:
+ context._cmp(context.data.byte(context.bx), 0);
+ if (!context.flags.z()) goto gotalong;
+ context._add(context.bx, 3);
+ context._sub(context.ah, 1);
+ if (!context.flags.z()) goto addloop;
+ context.al = 0;
+ return;
+gotalong:
+ context.al = 1;
+ return;
+}
+
+static inline void addlength(Context & context) {
+ context.ah = 10;
+addloop2:
+ context._cmp(context.data.byte(context.bx), 0);
+ if (!context.flags.z()) goto gotlength;
+ context._add(context.bx, 3*11);
+ context._sub(context.ah, 1);
+ if (!context.flags.z()) goto addloop2;
+ context.al = 0;
+ return;
+gotlength:
+ context.al = 1;
+ return;
+}
+
+static inline void getdimension(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32);
+ context.ch = 0;
+dimloop1:
+ addalong(context);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto finishdim1;
+ context._add(context.ch, 1);
+ goto dimloop1;
+finishdim1:
+ context.bx = 0+(228*13)+32+60+(32*32);
+ context.cl = 0;
+dimloop2:
+ context.push(context.bx);
+ addlength(context);
+ context.bx = context.pop();
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto finishdim2;
+ context._add(context.cl, 1);
+ context._add(context.bx, 3);
+ goto dimloop2;
+finishdim2:
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*3*9);
+ context.dh = 10;
+dimloop3:
+ context.push(context.bx);
+ addalong(context);
+ context.bx = context.pop();
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto finishdim3;
+ context._sub(context.dh, 1);
+ context._sub(context.bx, 11*3);
+ goto dimloop3;
+finishdim3:
+ context.bx = 0+(228*13)+32+60+(32*32)+(3*10);
+ context.dl = 11;
+dimloop4:
+ context.push(context.bx);
+ addlength(context);
+ context.bx = context.pop();
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto finishdim4;
+ context._sub(context.dl, 1);
+ context._sub(context.bx, 3);
+ goto dimloop4;
+finishdim4:
+ context.al = context.cl;
+ context.ah = 0;
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context.data.word(125) = context.ax;
+ context.al = context.ch;
+ context.ah = 0;
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context.data.word(127) = context.ax;
+ context._sub(context.dl, context.cl);
+ context._sub(context.dh, context.ch);
+ context.al = context.dl;
+ context.ah = 0;
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context.data.byte(128) = context.al;
+ context.al = context.dh;
+ context.ah = 0;
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context._shl(context.ax, 1);
+ context.data.byte(129) = context.al;
+ return;
+}
+
+static inline void calcmapad(Context & context) {
+ getdimension(context);
+ context.push(context.cx);
+ context.push(context.dx);
+ context.al = 11;
+ context._sub(context.al, context.dl);
+ context._sub(context.al, context.cl);
+ context._sub(context.al, context.cl);
+ context.ax.cbw();
+ context.bx = 8;
+ context._mul(context.bx);
+ context._add(context.ax, context.data.word(121));
+ context.data.word(117) = context.ax;
+ context.dx = context.pop();
+ context.cx = context.pop();
+ context.al = 10;
+ context._sub(context.al, context.dh);
+ context._sub(context.al, context.ch);
+ context._sub(context.al, context.ch);
+ context.ax.cbw();
+ context.bx = 8;
+ context._mul(context.bx);
+ context._add(context.ax, context.data.word(123));
+ context.data.word(119) = context.ax;
+ return;
+}
+
+static inline void doblocks(Context & context) {
+ context.es = context.data.word(400);
+ context.ax = context.data.word(119);
+ context.cx = 320;
+ context._mul(context.cx);
+ context.di = context.data.word(117);
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(149);
+ context.ah = 0;
+ context.bx = 66;
+ context._mul(context.bx);
+ context.bl = context.data.byte(148);
+ context.bh = 0;
+ context._add(context.ax, context.bx);
+ context.si = 0;
+ context._add(context.si, context.ax);
+ context.cx = 10;
+loop120:
+ context.push(context.di);
+ context.push(context.cx);
+ context.cx = 11;
+loop124:
+ context.push(context.cx);
+ context.push(context.di);
+ context.ds = context.data.word(418);
+ context._lodsb();
+ context.ds = context.data.word(416);
+ context.push(context.si);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto zeroblock;
+ context.ah = context.al;
+ context.al = 0;
+ context.si = 0+192;
+ context._add(context.si, context.ax);
+ context.bh = 14;
+ context.bh = 4;
+firstbitofblock:
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._add(context.di, 320-16);
+ context._sub(context.bh, 1);
+ if (!context.flags.z()) goto firstbitofblock;
+ context.bh = 12;
+loop125:
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context.ax = 0x0dfdf;
+ context._stosw();
+ context._stosw();
+ context._add(context.di, 320-20);
+ context._sub(context.bh, 1);
+ if (!context.flags.z()) goto loop125;
+ context._add(context.di, 4);
+ context.ax = 0x0dfdf;
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._add(context.di, 320-16);
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._add(context.di, 320-16);
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._add(context.di, 320-16);
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+ context._stosw();
+zeroblock:
+ context.si = context.pop();
+ context.di = context.pop();
+ context.cx = context.pop();
+ context._add(context.di, 16);
+ if (--context.cx) goto loop124;
+ context._add(context.si, 66-11);
+ context.cx = context.pop();
+ context.di = context.pop();
+ context._add(context.di, 320*16);
+ if (--context.cx) goto loop120;
+ return;
+}
+
+static inline void makesprite(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
+_tmp17:
+ context._cmp(context.data.byte(context.bx+15), 255);
+ if (context.flags.z()) goto _tmp17a;
+ context._add(context.bx, 32);
+ goto _tmp17;
+_tmp17a:
+ context.data.word(context.bx) = context.cx;
+ context.data.word(context.bx+10) = context.si;
+ context.data.word(context.bx+6) = context.dx;
+ context.data.word(context.bx+8) = context.di;
+ context.data.word(context.bx+2) = 0x0ffff;
+ context.data.byte(context.bx+15) = 0;
+ context.data.byte(context.bx+18) = 0;
+ return;
+}
+
+static inline void makebackob(Context & context) {
+ context._cmp(context.data.byte(62), 0);
+ if (context.flags.z()) goto nomake;
+ context.al = context.data.byte(context.si+5);
+ context.ah = context.data.byte(context.si+8);
+ context.push(context.si);
+ context.push(context.ax);
+ context.push(context.si);
+ context.ax = context.data.word(168);
+ context.bx = context.data.word(170);
+ context.ah = context.bl;
+ context.si = context.ax;
+ context.cx = 49520;
+ context.dx = context.data.word(444);
+ context.di = 0;
+ makesprite(context);
+ context.ax = context.pop();
+ context.data.word(context.bx+20) = context.ax;
+ context.ax = context.pop();
+ context._cmp(context.al, 255);
+ if (!context.flags.z()) goto usedpriority;
+ context.al = 0;
+usedpriority:
+ context.data.byte(context.bx+23) = context.al;
+ context.data.byte(context.bx+30) = context.ah;
+ context.data.byte(context.bx+16) = 0;
+ context.data.byte(context.bx+18) = 0;
+ context.data.byte(context.bx+19) = 0;
+ context.si = context.pop();
+nomake:
+ return;
+}
+
+static inline void showallobs(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32);
+ context.data.word(18) = context.bx;
+ context.di = context.bx;
+ context.cx = 128*5;
+ context.al = 255;
+ while(--context.cx) context._stosb();
+ context.es = context.data.word(444);
+ context.data.word(166) = context.es;
+ context.ax = 0;
+ context.data.word(164) = context.ax;
+ context.ax = 0+2080;
+ context.data.word(162) = context.ax;
+ context.data.byte(181) = 0;
+ context.ds = context.data.word(428);
+ context.si = 0;
+ context.cx = 128;
+showobsloop:
+ context.push(context.cx);
+ context.push(context.si);
+ context.push(context.si);
+ context._add(context.si, 58);
+ context.es = context.data.word(428);
+ getmapad(context);
+ context.si = context.pop();
+ context._cmp(context.ch, 0);
+ if (context.flags.z()) goto blankframe;
+ context.al = context.data.byte(context.si+18);
+ context.ah = 0;
+ context.data.word(160) = context.ax;
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto blankframe;
+ context.push(context.es);
+ context.push(context.si);
+ calcfrframe(context);
+ finalframe(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context.al = context.data.byte(context.si+18);
+ context.data.byte(context.si+17) = context.al;
+ context._cmp(context.data.byte(context.si+8), 0);
+ if (!context.flags.z()) goto animating;
+ context._cmp(context.data.byte(context.si+5), 5);
+ if (context.flags.z()) goto animating;
+ context._cmp(context.data.byte(context.si+5), 6);
+ if (context.flags.z()) goto animating;
+ context.ax = context.data.word(160);
+ context.ah = 0;
+ context._add(context.di, context.data.word(117));
+ context._add(context.bx, context.data.word(119));
+ showframe(context);
+ goto drawnsetob;
+animating:
+ makebackob(context);
+drawnsetob:
+ context.si = context.data.word(18);
+ context.es = context.data.word(412);
+ context.al = context.data.byte(179);
+ context.ah = context.data.byte(180);
+ context.data.word(context.si) = context.ax;
+ context.cx = context.ax;
+ context.ax = context.data.word(176);
+ context._add(context.al, context.cl);
+ context._add(context.ah, context.ch);
+ context.data.word(context.si+2) = context.ax;
+ context.al = context.data.byte(181);
+ context.data.byte(context.si+4) = context.al;
+ context._add(context.si, 5);
+ context.data.word(18) = context.si;
+blankframe:
+ context._add(context.data.byte(181), 1);
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 64);
+ context._sub(context.cx, 1);
+ if (context.flags.z()) goto finishedsetobs;
+ goto showobsloop;
+finishedsetobs:
+ return;
+}
+
+static inline void showallfree(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5);
+ context.data.word(18) = context.bx;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5);
+ context.cx = 80*5;
+ context.al = 255;
+ while(--context.cx) context._stosb();
+ context.es = context.data.word(446);
+ context.data.word(166) = context.es;
+ context.ax = 0;
+ context.data.word(164) = context.ax;
+ context.ax = 0+2080;
+ context.data.word(162) = context.ax;
+ context.al = 0;
+ context.data.byte(158) = context.al;
+ context.ds = context.data.word(426);
+ context.si = 2;
+ context.cx = 0;
+loop127:
+ context.push(context.cx);
+ context.push(context.si);
+ context.push(context.si);
+ context.es = context.data.word(426);
+ getmapad(context);
+ context.si = context.pop();
+ context._cmp(context.ch, 0);
+ if (context.flags.z()) goto over138;
+ context.al = context.data.byte(158);
+ context.ah = 0;
+ context.dx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.dx);
+ context.data.word(160) = context.ax;
+ context.push(context.es);
+ context.push(context.si);
+ calcfrframe(context);
+ context.es = context.data.word(402);
+ context.ds = context.data.word(166);
+ finalframe(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context._cmp(context.cx, 0);
+ if (context.flags.z()) goto over138;
+ context.ax = context.data.word(160);
+ context.ah = 0;
+ context._add(context.di, context.data.word(117));
+ context._add(context.bx, context.data.word(119));
+ showframe(context);
+ context.si = context.data.word(18);
+ context.es = context.data.word(412);
+ context.al = context.data.byte(179);
+ context.ah = context.data.byte(180);
+ context.data.word(context.si) = context.ax;
+ context.cx = context.ax;
+ context.ax = context.data.word(176);
+ context._add(context.al, context.cl);
+ context._add(context.ah, context.ch);
+ context.data.word(context.si+2) = context.ax;
+ context.ax = context.pop();
+ context.cx = context.pop();
+ context.push(context.cx);
+ context.push(context.ax);
+ context.data.byte(context.si+4) = context.cl;
+ context._add(context.si, 5);
+ context.data.word(18) = context.si;
+over138:
+ context._add(context.data.byte(158), 1);
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 80);
+ if (context.flags.z()) goto finfree;
+ goto loop127;
+finfree:
+ return;
+}
+
+static inline void getxad(Context & context) {
+ context.cl = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context.ah = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.cl, 0);
+ if (!context.flags.z()) goto over148;
+ context._sub(context.al, context.data.byte(148));
+ if (context.flags.c()) goto over148;
+ context._cmp(context.al, 11);
+ if (!context.flags.c()) goto over148;
+ context.cl = 4;
+ context._shl(context.al, context.cl);
+ context._or(context.al, context.ah);
+ context.ah = 0;
+ context.ch = 1;
+ return;
+over148:
+ context.ch = 0;
+ return;
+}
+
+static inline void getyad(Context & context) {
+ context.al = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context.ah = context.data.byte(context.si);
+ context._add(context.si, 1);
+ context._sub(context.al, context.data.byte(149));
+ if (context.flags.c()) goto over147;
+ context._cmp(context.al, 10);
+ if (!context.flags.c()) goto over147;
+ context.cl = 4;
+ context._shl(context.al, context.cl);
+ context._or(context.al, context.ah);
+ context.ah = 0;
+ context.ch = 1;
+ return;
+over147:
+ context.ch = 0;
+ return;
+}
+
+static inline void getmapad(Context & context) {
+ getxad(context);
+ context._cmp(context.ch, 0);
+ if (context.flags.z()) goto over146;
+ context.data.word(168) = context.ax;
+ getyad(context);
+ context._cmp(context.ch, 0);
+ if (context.flags.z()) goto over146;
+ context.data.word(170) = context.ax;
+ context.ch = 1;
+over146:
+ return;
+}
+
+static inline void calcfrframe(Context & context) {
+ context.dx = context.data.word(166);
+ context.ax = context.data.word(162);
+ context.push(context.ax);
+ context.cx = context.data.word(164);
+ context.ax = context.data.word(160);
+ context.ds = context.dx;
+ context.bx = 6;
+ context._mul(context.bx);
+ context._add(context.ax, context.cx);
+ context.bx = context.ax;
+ context.cx = context.data.word(context.bx);
+ context.ax = context.data.word(context.bx+2);
+ context.dx = context.data.word(context.bx+4);
+ context.bx = context.pop();
+ context.push(context.dx);
+ context._add(context.ax, context.bx);
+ context.data.word(178) = context.ax;
+ context.data.word(176) = context.cx;
+ context.ax = context.pop();
+ context.push(context.ax);
+ context.ah = 0;
+ context.data.word(172) = context.ax;
+ context.ax = context.pop();
+ context.al = context.ah;
+ context.ah = 0;
+ context.data.word(174) = context.ax;
+ return;
+nullframe:
+ context.ax = context.pop();
+ context.cx = 0;
+ context.data.word(176) = context.cx;
+ return;
+}
+
+static inline void finalframe(Context & context) {
+ context.ax = context.data.word(170);
+ context._add(context.ax, context.data.word(174));
+ context.bx = context.data.word(168);
+ context._add(context.bx, context.data.word(172));
+ context.data.byte(179) = context.bl;
+ context.data.byte(180) = context.al;
+ context.di = context.data.word(168);
+ context.bx = context.data.word(170);
+ return;
+}
+
+static inline void showallex(Context & context) {
+ context.es = context.data.word(412);
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5);
+ context.data.word(18) = context.bx;
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5);
+ context.cx = 100*5;
+ context.al = 255;
+ while(--context.cx) context._stosb();
+ context.es = context.data.word(398);
+ context.data.word(166) = context.es;
+ context.ax = 0;
+ context.data.word(164) = context.ax;
+ context.ax = 0+2080;
+ context.data.word(162) = context.ax;
+ context.data.byte(157) = 0;
+ context.si = 0+2080+30000+2;
+ context.cx = 0;
+exloop:
+ context.push(context.cx);
+ context.push(context.si);
+ context.es = context.data.word(398);
+ context.push(context.si);
+ context.ch = 0;
+ context._cmp(context.data.byte(context.si), 255);
+ if (context.flags.z()) goto notinroom;
+ context.al = context.data.byte(context.si-2);
+ context._cmp(context.al, context.data.byte(184));
+ if (!context.flags.z()) goto notinroom;
+ getmapad(context);
+notinroom:
+ context.si = context.pop();
+ context._cmp(context.ch, 0);
+ if (context.flags.z()) goto blankex;
+ context.al = context.data.byte(157);
+ context.ah = 0;
+ context.dx = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.ax, context.dx);
+ context.data.word(160) = context.ax;
+ context.push(context.es);
+ context.push(context.si);
+ calcfrframe(context);
+ context.es = context.data.word(402);
+ context.ds = context.data.word(166);
+ finalframe(context);
+ context.si = context.pop();
+ context.es = context.pop();
+ context._cmp(context.cx, 0);
+ if (context.flags.z()) goto blankex;
+ context.ax = context.data.word(160);
+ context.ah = 0;
+ context._add(context.di, context.data.word(117));
+ context._add(context.bx, context.data.word(119));
+ showframe(context);
+ context.si = context.data.word(18);
+ context.es = context.data.word(412);
+ context.al = context.data.byte(179);
+ context.ah = context.data.byte(180);
+ context.data.word(context.si) = context.ax;
+ context.cx = context.ax;
+ context.ax = context.data.word(176);
+ context._add(context.al, context.cl);
+ context._add(context.ah, context.ch);
+ context.data.word(context.si+2) = context.ax;
+ context.ax = context.pop();
+ context.cx = context.pop();
+ context.push(context.cx);
+ context.push(context.ax);
+ context.data.byte(context.si+4) = context.cl;
+ context._add(context.si, 5);
+ context.data.word(18) = context.si;
+blankex:
+ context._add(context.data.byte(157), 1);
+ context.si = context.pop();
+ context.cx = context.pop();
+ context._add(context.si, 16);
+ context._add(context.cx, 1);
+ context._cmp(context.cx, 100);
+ if (context.flags.z()) goto finex;
+ goto exloop;
+finex:
+ return;
+}
+
+static inline void paneltomap(Context & context) {
+ context.di = context.data.word(125);
+ context._add(context.di, context.data.word(117));
+ context.bx = context.data.word(127);
+ context._add(context.bx, context.data.word(119));
+ context.ds = context.data.word(402);
+ context.si = 0;
+ context.cl = context.data.byte(128);
+ context.ch = context.data.byte(129);
+ multiget(context);
+ return;
+}
+
+static inline void checkone(Context & context) {
+ context.push(context.cx);
+ context.al = context.ch;
+ context.ah = 0;
+ context.cl = 4;
+ context._shr(context.ax, context.cl);
+ context.dl = context.al;
+ context.cx = context.pop();
+ context.al = context.cl;
+ context.ah = 0;
+ context.cl = 4;
+ context._shr(context.ax, context.cl);
+ context.ah = context.dl;
+ context.push(context.ax);
+ context.ch = 0;
+ context.cl = context.al;
+ context.push(context.cx);
+ context.al = context.ah;
+ context.ah = 0;
+ context.cx = 11;
+ context._mul(context.cx);
+ context.cx = context.pop();
+ context._add(context.ax, context.cx);
+ context.cx = 3;
+ context._mul(context.cx);
+ context.si = context.ax;
+ context.ds = context.data.word(412);
+ context._add(context.si, 0+(228*13)+32+60+(32*32));
+ context._lodsw();
+ context.cx = context.ax;
+ context._lodsb();
+ context.dx = context.pop();
+ return;
+}
+
+static inline void getblockofpixel(Context & context) {
+ context.push(context.cx);
+ context.push(context.es);
+ context.push(context.di);
+ context.ax = context.data.word(125);
+ context._add(context.cl, context.al);
+ context.ax = context.data.word(127);
+ context._add(context.ch, context.al);
+ checkone(context);
+ context._and(context.cl, 1);
+ if (!context.flags.z()) goto failrain;
+ context.di = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ return;
+failrain:
+ context.di = context.pop();
+ context.es = context.pop();
+ context.cx = context.pop();
+ context.al = 0;
+ return;
+}
+
+static inline void splitintolines(Context & context) {
+lookforlinestart:
+ getblockofpixel(context);
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto foundlinestart;
+ context._sub(context.cl, 1);
+ context._add(context.ch, 1);
+ context._cmp(context.cl, 0);
+ if (context.flags.z()) goto endofthisline;
+ context._cmp(context.ch, context.data.byte(129));
+ if (!context.flags.c()) goto endofthisline;
+ goto lookforlinestart;
+foundlinestart:
+ context.data.word(context.di) = context.cx;
+ context.bh = 1;
+lookforlineend:
+ getblockofpixel(context);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto foundlineend;
+ context._sub(context.cl, 1);
+ context._add(context.ch, 1);
+ context._cmp(context.cl, 0);
+ if (context.flags.z()) goto foundlineend;
+ context._cmp(context.ch, context.data.byte(129));
+ if (!context.flags.c()) goto foundlineend;
+ context._add(context.bh, 1);
+ goto lookforlineend;
+foundlineend:
+ context.push(context.cx);
+ context.data.byte(context.di+2) = context.bh;
+ randomnumber(context);
+ context.data.byte(context.di+3) = context.al;
+ randomnumber(context);
+ context.data.byte(context.di+4) = context.al;
+ randomnumber(context);
+ context._and(context.al, 3);
+ context._add(context.al, 4);
+ context.data.byte(context.di+5) = context.al;
+ context._add(context.di, 6);
+ context.cx = context.pop();
+ context._cmp(context.cl, 0);
+ if (context.flags.z()) goto endofthisline;
+ context._cmp(context.ch, context.data.byte(129));
+ if (!context.flags.c()) goto endofthisline;
+ goto lookforlinestart;
+endofthisline:
+ return;
+}
+
+static inline void initrain(Context & context) {
+ context.es = context.data.word(412);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30);
+ context.bx = 1113;
+checkmorerain:
+ context.al = context.data.byte(context.bx);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto finishinitrain;
+ context._cmp(context.al, context.data.byte(184));
+ if (!context.flags.z()) goto checkrain;
+ context.al = context.data.byte(context.bx+1);
+ context._cmp(context.al, context.data.byte(148));
+ if (!context.flags.z()) goto checkrain;
+ context.al = context.data.byte(context.bx+2);
+ context._cmp(context.al, context.data.byte(149));
+ if (!context.flags.z()) goto checkrain;
+ context.al = context.data.byte(context.bx+3);
+ context.data.byte(132) = context.al;
+ goto dorain;
+checkrain:
+ context._add(context.bx, 4);
+ goto checkmorerain;
+dorain:
+ context.cx = 4;
+initraintop:
+ randomnumber(context);
+ context._and(context.al, 31);
+ context._add(context.al, 3);
+ context._cmp(context.al, context.data.byte(132));
+ if (!context.flags.c()) goto initraintop;
+ context._add(context.cl, context.al);
+ context._cmp(context.cl, context.data.byte(128));
+ if (!context.flags.c()) goto initrainside;
+ context.push(context.cx);
+ splitintolines(context);
+ context.cx = context.pop();
+ goto initraintop;
+initrainside:
+ context.cl = context.data.byte(128);
+ context._sub(context.cl, 1);
+initrainside2:
+ randomnumber(context);
+ context._and(context.al, 31);
+ context._add(context.al, 3);
+ context._cmp(context.al, context.data.byte(132));
+ if (!context.flags.c()) goto initrainside2;
+ context._add(context.ch, context.al);
+ context._cmp(context.ch, context.data.byte(129));
+ if (!context.flags.c()) goto finishinitrain;
+ context.push(context.cx);
+ splitintolines(context);
+ context.cx = context.pop();
+ goto initrainside2;
+finishinitrain:
+ context.al = 255;
+ context._stosb();
+ return;
+}
+
+static inline void drawfloor(Context & context) {
+ context.push(context.es);
+ context.push(context.bx);
+ eraseoldobs(context);
+ drawflags(context);
+ calcmapad(context);
+ doblocks(context);
+ showallobs(context);
+ showallfree(context);
+ showallex(context);
+ paneltomap(context);
+ initrain(context);
+ context.data.byte(62) = 0;
+ context.bx = context.pop();
+ context.es = context.pop();
+ return;
+}
+
+static inline void width160(Context & context) {
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ width128:
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ width110:
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ width88:
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ width80:
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ context._movsw();
+ width63:
+ context._movsw();
+ width62:
+ context._movsw();
+ width61:
+ context._movsw();
+ width60:
+ context._movsw();
+ width59:
+ context._movsw();
+ width58:
+ context._movsw();
+ width57:
+ context._movsw();
+ width56:
+ context._movsw();
+ width55:
+ context._movsw();
+ width54:
+ context._movsw();
+ width53:
+ context._movsw();
+ width52:
+ context._movsw();
+ width51:
+ context._movsw();
+ width50:
+ context._movsw();
+ width49:
+ context._movsw();
+ width48:
+ context._movsw();
+ width47:
+ context._movsw();
+ width46:
+ context._movsw();
+ width45:
+ context._movsw();
+ width44:
+ context._movsw();
+ width43:
+ context._movsw();
+ width42:
+ context._movsw();
+ width41:
+ context._movsw();
+ width40:
+ context._movsw();
+ width39:
+ context._movsw();
+ width38:
+ context._movsw();
+ width37:
+ context._movsw();
+ width36:
+ context._movsw();
+ width35:
+ context._movsw();
+ width34:
+ context._movsw();
+ width33:
+ context._movsw();
+ width32:
+ context._movsw();
+ width31:
+ context._movsw();
+ width30:
+ context._movsw();
+ width29:
+ context._movsw();
+ width28:
+ context._movsw();
+ width27:
+ context._movsw();
+ width26:
+ context._movsw();
+ width25:
+ context._movsw();
+ width24:
+ context._movsw();
+ width23:
+ context._movsw();
+ width22:
+ context._movsw();
+ width21:
+ context._movsw();
+ width20:
+ context._movsw();
+ width19:
+ context._movsw();
+ width18:
+ context._movsw();
+ width17:
+ context._movsw();
+ width16:
+ context._movsw();
+ width15:
+ context._movsw();
+ width14:
+ context._movsw();
+ width13:
+ context._movsw();
+ width12:
+ context._movsw();
+ width11:
+ context._movsw();
+ width10:
+ context._movsw();
+ width9:
+ context._movsw();
+ width8:
+ context._movsw();
+ width7:
+ context._movsw();
+ width6:
+ context._movsw();
+ width5:
+ context._movsw();
+ width4:
+ context._movsw();
+ width3:
+ context._movsw();
+ width2:
+ context._movsw();
+ width1:
+ context._movsw();
+ width0:
+ return;
+}
+
+static inline void worktoscreen(Context & context) {
+ vsync(context);
+ context.si = 0;
+ context.di = 0;
+ context.cx = 25;
+ context.ds = context.data.word(400);
+ context.dx = 0x0a000;
+ context.es = context.dx;
+dumpallloop:
+ width160(context);
+ width160(context);
+ width160(context);
+ width160(context);
+ width160(context);
+ width160(context);
+ width160(context);
+ width160(context);
+ if (--context.cx) goto dumpallloop;
+ return;
+}
+
+static inline void afterintroroom(Context & context) {
+ context._cmp(context.data.byte(186), 0);
+ if (context.flags.z()) goto notnewintro;
+ clearwork(context);
+ findroominloc(context);
+ context.data.byte(62) = 1;
+ drawfloor(context);
+ reelsonscreen(context);
+ spriteupdate(context);
+ printsprites(context);
+ worktoscreen(context);
+ context.data.byte(186) = 0;
+notnewintro:
+ return;
+}
+
+static inline void multiget(Context & context) {
+ context.ax = context.bx;
+ context.bx = 320;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.es = context.data.word(400);
+ context.es = context.ds;
+ context.ds = context.es;
+ context._xchg(context.di, context.si);
+ context.al = context.cl;
+ context.ah = 0;
+ context.dx = 320;
+ context._sub(context.dx, context.ax);
+ context.al = context.cl;
+ context._and(context.al, 1);
+ if (!context.flags.z()) goto oddwidth2;
+ context.bl = context.cl;
+ context.bh = 0;
+ context.ax = 1819;
+ context._shr(context.bx, 1);
+ context._sub(context.ax, context.bx);
+ context.cl = context.ch;
+ context.ch = 0;
+multiloop3:
+ __dispatch_call(context, context.ax);
+ context._add(context.si, context.dx);
+ if (--context.cx) goto multiloop3;
+ return;
+oddwidth2:
+ context.bl = context.cl;
+ context.bh = 0;
+ context._shr(context.bx, 1);
+ context.ax = 1819;
+ context._sub(context.ax, context.bx);
+ context.cl = context.ch;
+ context.ch = 0;
+multiloop4:
+ __dispatch_call(context, context.ax);
+ context._movsb();
+ context._add(context.si, context.dx);
+ if (--context.cx) goto multiloop4;
+ return;
+}
+
+static inline void getundertimed(Context & context) {
+ context.al = context.data.byte(335);
+ context._sub(context.al, 3);
+ context.ah = 0;
+ context.bx = context.ax;
+ context.al = context.data.byte(336);
+ context.ah = 0;
+ context.di = context.ax;
+ context.ch = 30;
+ context.cl = 240;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4);
+ multiget(context);
+ return;
+}
+
+static inline void getnextword(Context & context) {
+ context.bx = 0;
+getloop:
+ context.ax = context.data.word(context.di);
+ context._add(context.di, 1);
+ context._add(context.bh, 1);
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto endall;
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto endall;
+ context._cmp(context.al, 32);
+ if (context.flags.z()) goto endword;
+ modifychar(context);
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto getloop;
+ context.push(context.ax);
+ context._sub(context.al, 32);
+ context.ah = 0;
+ context._add(context.ax, context.data.word(71));
+ context._add(context.ax, context.ax);
+ context.si = context.ax;
+ context._add(context.ax, context.ax);
+ context._add(context.si, context.ax);
+ context.cl = context.data.byte(context.si+0);
+ context.ax = context.pop();
+ kernchars(context);
+ context._add(context.bl, context.cl);
+ goto getloop;
+endword:
+ context._add(context.bl, 6);
+ context.al = 0;
+ return;
+endall:
+ context._add(context.bl, 6);
+ context.al = 1;
+ return;
+}
+
+static inline void getnumber(Context & context) {
+ context.cx = 0;
+ context.push(context.si);
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.ds);
+ context.push(context.es);
+ context.di = context.si;
+wordloop:
+ context.push(context.cx);
+ context.push(context.dx);
+ getnextword(context);
+ context.dx = context.pop();
+ context.cx = context.pop();
+ context._cmp(context.al, 1);
+ if (context.flags.z()) goto endoftext;
+ context.al = context.cl;
+ context.ah = 0;
+ context.push(context.bx);
+ context.bh = 0;
+ context._add(context.ax, context.bx);
+ context.bx = context.pop();
+ context._sub(context.ax, 10);
+ context.dh = 0;
+ context._cmp(context.ax, context.dx);
+ if (!context.flags.c()) goto gotoverend;
+ context._add(context.cl, context.bl);
+ context._add(context.ch, context.bh);
+ goto wordloop;
+gotoverend:
+ context.al = context.dl;
+ context._and(context.al, 1);
+ if (context.flags.z()) goto notcentre;
+ context.push(context.cx);
+ context.al = context.dl;
+ context._and(context.al, 0b11111110);
+ context.ah = 0;
+ context.ch = 0;
+ context._sub(context.ax, context.cx);
+ context._add(context.ax, 20);
+ context._shr(context.ax, 1);
+ context.cx = context.pop();
+ context.es = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.si = context.pop();
+ context._add(context.di, context.ax);
+ context.cl = context.ch;
+ return;
+notcentre:
+ context.es = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.si = context.pop();
+ context.cl = context.ch;
+ return;
+endoftext:
+ context.al = context.cl;
+ context.ah = 0;
+ context.push(context.bx);
+ context.bh = 0;
+ context._add(context.ax, context.bx);
+ context.bx = context.pop();
+ context._sub(context.ax, 10);
+ context.dh = 0;
+ context._cmp(context.ax, context.dx);
+ if (!context.flags.c()) goto gotoverend2;
+ context._add(context.cl, context.bl);
+ context._add(context.ch, context.bh);
+gotoverend2:
+ context.al = context.dl;
+ context._and(context.al, 1);
+ if (context.flags.z()) goto notcent2;
+ context.push(context.cx);
+ context.al = context.dl;
+ context._and(context.al, 0b11111110);
+ context._add(context.al, 2);
+ context.ah = 0;
+ context.ch = 0;
+ context._add(context.ax, 20);
+ context._sub(context.ax, context.cx);
+ context._shr(context.ax, 1);
+ context.cx = context.pop();
+ context.es = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.si = context.pop();
+ context._add(context.di, context.ax);
+ context.cl = context.ch;
+ return;
+notcent2:
+ context.es = context.pop();
+ context.ds = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.si = context.pop();
+ context.cl = context.ch;
+ return;
+}
+
+static inline void modifychar(Context & context) {
+ context._cmp(context.al, 128);
+ if (context.flags.c()) goto nomod;
+ context._cmp(context.al, 160);
+ if (!context.flags.z()) goto not160;
+ context.al = 'Z'+1;
+ return;
+not160:
+ context._cmp(context.al, 130);
+ if (!context.flags.z()) goto not130;
+ context.al = 'Z'+2;
+ return;
+not130:
+ context._cmp(context.al, 161);
+ if (!context.flags.z()) goto not161;
+ context.al = 'Z'+3;
+ return;
+not161:
+ context._cmp(context.al, 162);
+ if (!context.flags.z()) goto not162;
+ context.al = 'Z'+4;
+ return;
+not162:
+ context._cmp(context.al, 163);
+ if (!context.flags.z()) goto not163;
+ context.al = 'Z'+5;
+ return;
+not163:
+ context._cmp(context.al, 164);
+ if (!context.flags.z()) goto not164;
+ context.al = 'Z'+6;
+ return;
+not164:
+ context._cmp(context.al, 165);
+ if (!context.flags.z()) goto not165;
+ context.al = ','-1;
+ return;
+not165:
+ context._cmp(context.al, 168);
+ if (!context.flags.z()) goto not168;
+ context.al = 'A'-1;
+ return;
+not168:
+ context._cmp(context.al, 173);
+ if (!context.flags.z()) goto not173;
+ context.al = 'A'-4;
+ return;
+not173:
+ context._cmp(context.al, 129);
+ if (!context.flags.z()) goto not129;
+ context.al = 'A'-5;
+not129:
+ return;
+nomod:
+ return;
+}
+
+static inline void frameoutfx(Context & context) {
+ context.push(context.dx);
+ context.ax = context.bx;
+ context.bx = context.dx;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.dx = context.pop();
+ context.push(context.cx);
+ context.ch = 0;
+ context._add(context.dx, context.cx);
+ context.cx = context.pop();
+frameloopfx1:
+ context.push(context.cx);
+ context.ch = 0;
+frameloopfx2:
+ context._lodsb();
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto backtosolidfx;
+backtootherfx:
+ context._sub(context.di, 1);
+ if (--context.cx) goto frameloopfx2;
+ context.cx = context.pop();
+ context._add(context.di, context.dx);
+ context._sub(context.ch, 1);
+ if (!context.flags.z()) goto frameloopfx1;
+ return;
+frameloopfx3:
+ context._lodsb();
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto backtootherfx;
+backtosolidfx:
+ context.data.byte(context.di) = context.al;
+ context._sub(context.di, 1);
+ if (--context.cx) goto frameloopfx3;
+ context.cx = context.pop();
+ context._add(context.di, context.dx);
+ context._sub(context.ch, 1);
+ if (!context.flags.z()) goto frameloopfx1;
+ return;
+}
+
+static inline void frameoutnm(Context & context) {
+ context.push(context.dx);
+ context.ax = context.bx;
+ context.bx = context.dx;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.dx = context.pop();
+ context.push(context.cx);
+ context.ch = 0;
+ context._sub(context.dx, context.cx);
+ context.cx = context.pop();
+ context.al = context.cl;
+ context._and(context.al, 1);
+ if (!context.flags.z()) goto oddwidthframe;
+ context.bl = context.cl;
+ context.bh = 0;
+ context.ax = 1819;
+ context._shr(context.bx, 1);
+ context._sub(context.ax, context.bx);
+ context.cl = context.ch;
+ context.ch = 0;
+nmloop1:
+ __dispatch_call(context, context.ax);
+ context._add(context.di, context.dx);
+ if (--context.cx) goto nmloop1;
+ return;
+oddwidthframe:
+ context.bl = context.cl;
+ context.bh = 0;
+ context._shr(context.bx, 1);
+ context.ax = 1819;
+ context._sub(context.ax, context.bx);
+ context.cl = context.ch;
+ context.ch = 0;
+nmloop2:
+ __dispatch_call(context, context.ax);
+ context._movsb();
+ context._add(context.di, context.dx);
+ if (--context.cx) goto nmloop2;
+ return;
+}
+
+static inline void frameoutbh(Context & context) {
+ context.push(context.dx);
+ context.ax = context.bx;
+ context.bx = context.dx;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.dx = context.pop();
+ context.push(context.cx);
+ context.ch = 0;
+ context._sub(context.dx, context.cx);
+ context.cx = context.pop();
+bhloop2:
+ context.push(context.cx);
+ context.ch = 0;
+ context.ah = 255;
+bhloop1:
+ context._cmp(context.data.byte(context.di), context.ah);
+ if (!context.flags.z()) goto nofill;
+ context._movsb();
+ if (--context.cx) goto bhloop1;
+ goto nextline;
+nofill:
+ context._add(context.di, 1);
+ context._add(context.si, 1);
+ if (--context.cx) goto bhloop1;
+nextline:
+ context._add(context.di, context.dx);
+ context.cx = context.pop();
+ context._sub(context.ch, 1);
+ if (!context.flags.z()) goto bhloop2;
+ return;
+}
+
+static inline void frameoutv(Context & context) {
+ context.push(context.dx);
+ context.ax = context.bx;
+ context.bx = context.dx;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.dx = context.pop();
+ context.push(context.cx);
+ context.ch = 0;
+ context._sub(context.dx, context.cx);
+ context.cx = context.pop();
+frameloop1:
+ context.push(context.cx);
+ context.ch = 0;
+frameloop2:
+ context._lodsb();
+ context._cmp(context.al, 0);
+ if (!context.flags.z()) goto backtosolid;
+backtoother:
+ context._add(context.di, 1);
+ if (--context.cx) goto frameloop2;
+ context.cx = context.pop();
+ context._add(context.di, context.dx);
+ context._sub(context.ch, 1);
+ if (!context.flags.z()) goto frameloop1;
+ return;
+frameloop3:
+ context._lodsb();
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto backtoother;
+backtosolid:
+ context._stosb();
+ if (--context.cx) goto frameloop3;
+ context.cx = context.pop();
+ context._add(context.di, context.dx);
+ context._sub(context.ch, 1);
+ if (!context.flags.z()) goto frameloop1;
+ return;
+}
+
+static inline void showframe(Context & context) {
+ context.push(context.dx);
+ context.push(context.ax);
+ context.cx = context.ax;
+ context._and(context.cx, 511);
+ context._add(context.cx, context.cx);
+ context.si = context.cx;
+ context._add(context.cx, context.cx);
+ context._add(context.si, context.cx);
+ context._cmp(context.data.word(context.si), 0);
+ if (!context.flags.z()) goto notblankshow;
+ context.cx = 0;
+ return;
+notblankshow:
+ context._test(context.ah, 128);
+ if (!context.flags.z()) goto skipoffsets;
+ context.al = context.data.byte(context.si+4);
+ context.ah = 0;
+ context._add(context.di, context.ax);
+ context.al = context.data.byte(context.si+5);
+ context.ah = 0;
+ context._add(context.bx, context.ax);
+skipoffsets:
+ context.cx = context.data.word(context.si+0);
+ context.ax = context.data.word(context.si+2);
+ context._add(context.ax, 2080);
+ context.si = context.ax;
+ context.ax = context.pop();
+ context.dx = context.pop();
+ context._cmp(context.ah, 0);
+ if (context.flags.z()) goto noeffects;
+ context._test(context.ah, 128);
+ if (context.flags.z()) goto notcentred;
+ context.push(context.ax);
+ context.al = context.cl;
+ context.ah = 0;
+ context._shr(context.ax, 1);
+ context._sub(context.di, context.ax);
+ context.al = context.ch;
+ context.ah = 0;
+ context._shr(context.ax, 1);
+ context._sub(context.bx, context.ax);
+ context.ax = context.pop();
+notcentred:
+ context._test(context.ah, 64);
+ if (context.flags.z()) goto notdiffdest;
+ context.push(context.cx);
+ frameoutfx(context);
+ context.cx = context.pop();
+ return;
+notdiffdest:
+ context._test(context.ah, 8);
+ if (context.flags.z()) goto notprintlist;
+ context.push(context.ax);
+ context.ax = context.di;
+ context._sub(context.ax, context.data.word(117));
+ context.push(context.bx);
+ context._sub(context.bx, context.data.word(119));
+ context.ah = context.bl;
+ context.bx = context.pop();
+ context.ax = context.pop();
+notprintlist:
+ context._test(context.ah, 4);
+ if (context.flags.z()) goto notflippedx;
+ context.dx = 320;
+ context.es = context.data.word(400);
+ context.push(context.cx);
+ frameoutfx(context);
+ context.cx = context.pop();
+ return;
+notflippedx:
+ context._test(context.ah, 2);
+ if (context.flags.z()) goto notnomask;
+ context.dx = 320;
+ context.es = context.data.word(400);
+ context.push(context.cx);
+ frameoutnm(context);
+ context.cx = context.pop();
+ return;
+notnomask:
+ context._test(context.ah, 32);
+ if (context.flags.z()) goto noeffects;
+ context.dx = 320;
+ context.es = context.data.word(400);
+ context.push(context.cx);
+ frameoutbh(context);
+ context.cx = context.pop();
+ return;
+noeffects:
+ context.dx = 320;
+ context.es = context.data.word(400);
+ context.push(context.cx);
+ frameoutv(context);
+ context.cx = context.pop();
+ return;
+}
+
+static inline void kernchars(Context & context) {
+ context._cmp(context.al, 'a');
+ if (context.flags.z()) goto iskern;
+ context._cmp(context.al, 'u');
+ if (context.flags.z()) goto iskern;
+ return;
+iskern:
+ context._cmp(context.ah, 'n');
+ if (context.flags.z()) goto kernit;
+ context._cmp(context.ah, 't');
+ if (context.flags.z()) goto kernit;
+ context._cmp(context.ah, 'r');
+ if (context.flags.z()) goto kernit;
+ context._cmp(context.ah, 'i');
+ if (context.flags.z()) goto kernit;
+ context._cmp(context.ah, 'l');
+ if (context.flags.z()) goto kernit;
+ return;
+kernit:
+ context._sub(context.cl, 1);
+ return;
+}
+
+static inline void printchar(Context & context) {
+ context._cmp(context.al, 255);
+ if (context.flags.z()) goto ignoreit;
+ context.push(context.si);
+ context.push(context.bx);
+ context.push(context.di);
+ context._sub(context.bx, 3);
+ context.push(context.ax);
+ context._sub(context.al, 32);
+ context.ah = 0;
+ context._add(context.ax, context.data.word(71));
+ showframe(context);
+ context.ax = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context.si = context.pop();
+ context._cmp(context.data.byte(72), 0);
+ if (!context.flags.z()) goto nokern;
+ kernchars(context);
+nokern:
+ context.push(context.cx);
+ context.ch = 0;
+ context._add(context.di, context.cx);
+ context.cx = context.pop();
+ignoreit:
+ return;
+}
+
+static inline void printdirect(Context & context) {
+ context.data.word(84) = context.di;
+ context.ds = context.data.word(268);
+printloop6:
+ context.push(context.bx);
+ context.push(context.di);
+ context.push(context.dx);
+ getnumber(context);
+ context.ch = 0;
+printloop5:
+ context.ax = context.data.word(context.si);
+ context._add(context.si, 1);
+ context._cmp(context.al, 0);
+ if (context.flags.z()) goto finishdirct;
+ context._cmp(context.al, ':');
+ if (context.flags.z()) goto finishdirct;
+ context.push(context.cx);
+ context.push(context.es);
+ modifychar(context);
+ printchar(context);
+ context.data.word(84) = context.di;
+ context.es = context.pop();
+ context.cx = context.pop();
+ if (--context.cx) goto printloop5;
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ context._add(context.bx, context.data.word(77));
+ goto printloop6;
+finishdirct:
+ context.dx = context.pop();
+ context.di = context.pop();
+ context.bx = context.pop();
+ return;
+}
+
+static inline void multiput(Context & context) {
+ context.ax = context.bx;
+ context.bx = 320;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.es = context.data.word(400);
+ context.al = context.cl;
+ context.ah = 0;
+ context.dx = 320;
+ context._sub(context.dx, context.ax);
+ context.al = context.cl;
+ context._and(context.al, 1);
+ if (!context.flags.z()) goto oddwidth3;
+ context.bl = context.cl;
+ context.bh = 0;
+ context._shr(context.bx, 1);
+ context.ax = 1819;
+ context._sub(context.ax, context.bx);
+ context.cl = context.ch;
+ context.ch = 0;
+multiloop5:
+ __dispatch_call(context, context.ax);
+ context._add(context.di, context.dx);
+ if (--context.cx) goto multiloop5;
+ return;
+oddwidth3:
+ context.bl = context.cl;
+ context.bh = 0;
+ context._shr(context.bx, 1);
+ context.ax = 1819;
+ context._sub(context.ax, context.bx);
+ context.cl = context.ch;
+ context.ch = 0;
+multiloop6:
+ __dispatch_call(context, context.ax);
+ context._movsb();
+ context._add(context.di, context.dx);
+ if (--context.cx) goto multiloop6;
+ return;
+}
+
+static inline void putundertimed(Context & context) {
+ context.al = context.data.byte(335);
+ context._sub(context.al, 3);
+ context.ah = 0;
+ context.bx = context.ax;
+ context.al = context.data.byte(336);
+ context.ah = 0;
+ context.di = context.ax;
+ context.ch = 30;
+ context.cl = 240;
+ context.ds = context.data.word(412);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4);
+ multiput(context);
+ return;
+}
+
+static inline void usetimedtext(Context & context) {
+ context._cmp(context.data.word(328), 0);
+ if (context.flags.z()) goto notext;
+ context._sub(context.data.word(328), 1);
+ context._cmp(context.data.word(328), 0);
+ if (context.flags.z()) goto deltimedtext;
+ context.ax = context.data.word(328);
+ context._cmp(context.ax, context.data.word(330));
+ if (context.flags.z()) goto firsttimed;
+ if (!context.flags.c()) goto notext;
+ goto notfirsttimed;
+firsttimed:
+ getundertimed(context);
+notfirsttimed:
+ context.bl = context.data.byte(335);
+ context.bh = 0;
+ context.al = context.data.byte(336);
+ context.ah = 0;
+ context.di = context.ax;
+ context.es = context.data.word(332);
+ context.si = context.data.word(334);
+ context.dl = 237;
+ context.ah = 0;
+ printdirect(context);
+ context.data.byte(337) = 1;
+notext:
+ return;
+deltimedtext:
+ putundertimed(context);
+ context.data.byte(337) = 1;
+ return;
+}
+
+static inline void dumpmap(Context & context) {
+ context.di = context.data.word(125);
+ context._add(context.di, context.data.word(117));
+ context.bx = context.data.word(127);
+ context._add(context.bx, context.data.word(119));
+ context.cl = context.data.byte(128);
+ context.ch = context.data.byte(129);
+ multidump(context);
+ return;
+}
+
+static inline void multidump(Context & context) {
+ context.dx = 0x0a000;
+ context.es = context.dx;
+ context.ds = context.data.word(400);
+ context.ax = context.bx;
+ context.bx = 320;
+ context._mul(context.bx);
+ context._add(context.di, context.ax);
+ context.dx = 320;
+ context.si = context.di;
+ context.al = context.cl;
+ context._and(context.al, 1);
+ if (!context.flags.z()) goto oddwidth;
+ context.bl = context.cl;
+ context.bh = 0;
+ context._shr(context.bx, 1);
+ context.ax = 1819;
+ context._sub(context.ax, context.bx);
+ context.bl = context.cl;
+ context.bh = 0;
+ context._neg(context.bx);
+ context._add(context.bx, context.dx);
+ context.cl = context.ch;
+ context.ch = 0;
+multiloop1:
+ __dispatch_call(context, context.ax);
+ context._add(context.di, context.bx);
+ context._add(context.si, context.bx);
+ if (--context.cx) goto multiloop1;
+ return;
+oddwidth:
+ context.bl = context.cl;
+ context.bh = 0;
+ context._shr(context.bx, 1);
+ context.ax = 1819;
+ context._sub(context.ax, context.bx);
+ context.bl = context.cl;
+ context.bh = 0;
+ context._neg(context.bx);
+ context._add(context.bx, 320);
+ context.cl = context.ch;
+ context.ch = 0;
+multiloop2:
+ __dispatch_call(context, context.ax);
+ context._movsb();
+ context._add(context.di, context.bx);
+ context._add(context.si, context.bx);
+ if (--context.cx) goto multiloop2;
+ return;
+}
+
+static inline void dumptimedtext(Context & context) {
+ context._cmp(context.data.byte(337), 1);
+ if (!context.flags.z()) goto nodumptimed;
+ context.al = context.data.byte(335);
+ context._sub(context.al, 3);
+ context.ah = 0;
+ context.bx = context.ax;
+ context.al = context.data.byte(336);
+ context.ah = 0;
+ context.di = context.ax;
+ context.cl = 240;
+ context.ch = 30;
+ multidump(context);
+ context.data.byte(337) = 0;
+nodumptimed:
+ return;
+}
+
+static inline void runendseq(Context & context) {
+ atmospheres(context);
+ context.data.byte(103) = 0;
+moreendseq:
+ vsync(context);
+ spriteupdate(context);
+ vsync(context);
+ deleverything(context);
+ printsprites(context);
+ reelsonscreen(context);
+ afterintroroom(context);
+ usetimedtext(context);
+ vsync(context);
+ dumpmap(context);
+ dumptimedtext(context);
+ vsync(context);
+ context._cmp(context.data.byte(103), 1);
+ if (!context.flags.z()) goto moreendseq;
+ return;
+}
+
+static inline void gettingshot(Context & context) {
+ context.data.byte(188) = 55;
+ clearpalette(context);
+ loadintroroom(context);
+ fadescreenups(context);
+ context.data.byte(387) = 0;
+ context.data.byte(388) = -1;
+ runendseq(context);
+ clearbeforeload(context);
+ return;
+}
+
+static inline void getridoftemptext(Context & context) {
+ context.es = context.data.word(466);
+ deallocatemem(context);
+ return;
+}
+
+static inline void endgame(Context & context) {
+ context.dx = 2273;
+ loadtemptext(context);
+ monkspeaking(context);
+ gettingshot(context);
+ getridoftemptext(context);
+ context.data.byte(387) = 7;
+ context.data.byte(388) = 1;
+ context.cx = 200;
+ hangon(context);
+ return;
+}
+
+
+Data::Data() {
+ static const uint8 src[] = {
+ 0, 0, 0, 0, 0, 30, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 255, 0,
+ 255, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 10, 0, 13, 0, 182,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 104, 0, 38, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 255, 0, 0, 0, 0, 1, 44, 0, 20, 0, 2, 0, 1, 1, 55,
+ 0, 0, 0, 50, 20, 0, 24, 22, 0, 74, 0, 1, 0, 0, 24, 33,
+ 10, 75, 0, 1, 0, 1, 1, 44, 0, 27, 0, 2, 0, 2, 1, 44,
+ 0, 96, 0, 3, 0, 4, 1, 44, 0, 118, 0, 2, 0, 5, 1, 44,
+ 10, 0, 0, 2, 0, 0, 5, 22, 20, 53, 0, 3, 0, 0, 5, 22,
+ 20, 40, 0, 1, 0, 2, 5, 22, 20, 50, 0, 1, 0, 3, 2, 11,
+ 10, 192, 0, 1, 0, 0, 2, 11, 10, 182, 0, 2, 0, 1, 8, 11,
+ 10, 0, 0, 2, 0, 1, 23, 0, 50, 0, 0, 3, 0, 0, 28, 11,
+ 20, 250, 0, 4, 0, 0, 23, 0, 50, 43, 0, 2, 0, 8, 23, 11,
+ 40, 130, 0, 2, 0, 1, 23, 22, 40, 122, 0, 2, 0, 2, 23, 22,
+ 40, 105, 0, 2, 0, 3, 23, 22, 40, 81, 0, 2, 0, 4, 23, 11,
+ 40, 135, 0, 2, 0, 5, 23, 22, 40, 145, 0, 2, 0, 6, 4, 22,
+ 30, 0, 0, 2, 0, 0, 45, 22, 30, 200, 0, 0, 0, 20, 45, 22,
+ 30, 39, 0, 2, 0, 0, 45, 22, 30, 25, 0, 2, 0, 0, 8, 22,
+ 40, 32, 0, 2, 0, 0, 7, 11, 20, 64, 0, 2, 0, 0, 22, 22,
+ 20, 82, 0, 2, 0, 0, 27, 11, 30, 0, 0, 2, 0, 0, 20, 0,
+ 30, 0, 0, 2, 0, 0, 14, 33, 40, 21, 0, 1, 0, 0, 29, 11,
+ 10, 0, 0, 1, 0, 0, 2, 22, 0, 2, 0, 2, 0, 0, 25, 0,
+ 50, 4, 0, 2, 0, 0, 50, 22, 30, 121, 0, 2, 0, 0, 50, 22,
+ 30, 0, 0, 20, 0, 0, 52, 22, 30, 192, 0, 2, 0, 0, 52, 22,
+ 30, 233, 0, 2, 0, 0, 50, 22, 40, 104, 0, 55, 0, 0, 53, 33,
+ 0, 99, 0, 2, 0, 0, 50, 22, 40, 0, 0, 3, 0, 0, 50, 22,
+ 30, 162, 0, 2, 0, 0, 52, 22, 30, 57, 0, 2, 0, 0, 52, 22,
+ 30, 0, 0, 2, 0, 0, 54, 0, 0, 72, 0, 3, 0, 0, 55, 44,
+ 0, 0, 0, 2, 0, 0, 19, 0, 0, 0, 0, 28, 0, 0, 14, 22,
+ 0, 2, 0, 2, 0, 0, 14, 22, 0, 44, 1, 1, 0, 0, 10, 22,
+ 30, 174, 0, 0, 0, 0, 12, 22, 20, 0, 0, 1, 0, 0, 11, 11,
+ 20, 0, 0, 50, 20, 0, 11, 11, 30, 0, 0, 50, 20, 0, 11, 22,
+ 20, 0, 0, 50, 20, 0, 14, 33, 40, 0, 0, 50, 20, 0, 255, 124,
+ 192, 128, 192, 28, 192, 32, 192, 0, 193, 16, 192, 24, 192, 244, 192, 12,
+ 192, 36, 192, 40, 192, 44, 192, 48, 192, 84, 192, 120, 192, 80, 192, 116,
+ 192, 52, 192, 56, 192, 64, 192, 68, 192, 72, 192, 60, 192, 20, 192, 136,
+ 192, 140, 192, 144, 192, 112, 192, 252, 192, 108, 192, 88, 192, 104, 192, 4,
+ 193, 100, 192, 96, 192, 92, 192, 148, 192, 4, 192, 164, 192, 156, 192, 160,
+ 192, 168, 192, 172, 192, 152, 192, 176, 192, 180, 192, 200, 192, 204, 192, 212,
+ 192, 220, 192, 216, 192, 0, 192, 8, 192, 132, 192, 132, 192, 132, 192, 132,
+ 192, 0, 60, 33, 71, 11, 82, 22, 93, 1, 44, 10, 16, 4, 11, 30,
+ 14, 4, 22, 30, 14, 3, 33, 10, 14, 10, 33, 30, 14, 10, 22, 30,
+ 24, 9, 22, 10, 14, 2, 33, 0, 14, 2, 22, 0, 14, 6, 11, 30,
+ 14, 7, 11, 20, 18, 7, 0, 20, 18, 7, 0, 30, 18, 55, 44, 0,
+ 14, 5, 22, 30, 14, 8, 0, 10, 18, 8, 11, 10, 18, 8, 22, 10,
+ 18, 8, 33, 10, 18, 8, 33, 20, 18, 8, 33, 30, 18, 8, 33, 40,
+ 18, 8, 22, 40, 18, 8, 11, 40, 18, 21, 44, 20, 18, 255, 47, 5,
+ 48, 5, 52, 5, 47, 5, 47, 5, 47, 5, 71, 5, 47, 5, 78, 5,
+ 94, 5, 101, 5, 105, 5, 109, 5, 113, 5, 126, 5, 47, 5, 47, 5,
+ 47, 5, 47, 5, 47, 5, 160, 5, 47, 5, 182, 5, 213, 5, 47, 5,
+ 226, 5, 248, 5, 14, 6, 39, 6, 58, 6, 47, 5, 47, 5, 47, 5,
+ 47, 5, 47, 5, 47, 5, 47, 5, 47, 5, 47, 5, 47, 5, 47, 5,
+ 47, 5, 47, 5, 47, 5, 47, 5, 74, 6, 81, 6, 118, 6, 47, 5,
+ 47, 5, 47, 5, 47, 5, 131, 6, 135, 6, 47, 5, 142, 6, 255, 15,
+ 1, 1, 255, 12, 5, 0, 13, 21, 0, 15, 35, 0, 17, 50, 0, 18,
+ 103, 0, 19, 108, 0, 255, 18, 19, 0, 19, 23, 0, 255, 12, 51, 0,
+ 13, 53, 0, 14, 14, 0, 15, 20, 0, 0, 78, 0, 255, 12, 119, 0,
+ 12, 145, 0, 255, 13, 16, 0, 255, 13, 20, 0, 255, 14, 16, 0, 255,
+ 15, 4, 0, 16, 8, 0, 17, 134, 0, 18, 153, 0, 255, 13, 108, 0,
+ 15, 70, 1, 15, 75, 1, 15, 80, 1, 15, 86, 1, 15, 92, 1, 15,
+ 98, 1, 18, 159, 0, 18, 178, 0, 147, 217, 0, 84, 228, 0, 255, 13,
+ 20, 0, 13, 21, 0, 15, 34, 0, 13, 52, 0, 13, 55, 0, 25, 57,
+ 0, 21, 73, 0, 255, 13, 196, 0, 13, 234, 0, 13, 156, 0, 14, 129,
+ 0, 13, 124, 0, 15, 162, 0, 15, 200, 0, 15, 239, 0, 17, 99, 0,
+ 12, 52, 0, 255, 15, 56, 0, 16, 64, 0, 19, 22, 0, 20, 33, 0,
+ 255, 20, 11, 0, 20, 15, 0, 15, 28, 0, 13, 80, 0, 21, 82, 0,
+ 147, 87, 0, 87, 128, 0, 255, 12, 13, 0, 14, 39, 0, 12, 67, 0,
+ 12, 75, 0, 12, 83, 0, 12, 91, 0, 15, 102, 0, 255, 22, 36, 0,
+ 13, 125, 0, 18, 88, 0, 15, 107, 0, 14, 127, 0, 14, 154, 0, 147,
+ 170, 0, 87, 232, 0, 255, 21, 16, 0, 21, 72, 0, 21, 205, 0, 22,
+ 63, 0, 151, 99, 0, 88, 158, 0, 255, 13, 21, 0, 14, 24, 0, 147,
+ 50, 0, 87, 75, 0, 24, 128, 0, 255, 83, 46, 0, 16, 167, 0, 255,
+ 16, 19, 0, 14, 36, 0, 16, 50, 0, 14, 65, 0, 16, 81, 0, 14,
+ 96, 0, 16, 114, 0, 14, 129, 0, 16, 147, 0, 14, 162, 0, 16, 177,
+ 0, 14, 191, 0, 255, 13, 48, 0, 14, 41, 0, 15, 78, 0, 16, 92,
+ 0, 255, 16, 115, 0, 255, 21, 103, 0, 20, 199, 0, 255, 17, 53, 0,
+ 17, 54, 0, 17, 55, 0, 17, 56, 0, 17, 57, 0, 17, 58, 0, 17,
+ 59, 0, 17, 61, 0, 17, 63, 0, 17, 64, 0, 17, 65, 0, 255, 156,
+ 154, 159, 154, 156, 158, 160, 155, 157, 153, 159, 158, 156, 154, 159, 154, 156,
+ 158, 160, 155, 157, 153, 159, 158, 156, 154, 159, 154, 156, 158, 160, 155, 157,
+ 153, 159, 158, 156, 154, 159, 154, 156, 158, 160, 155, 157, 153, 159, 158, 156,
+ 154, 159, 154, 156, 158, 160, 155, 157, 153, 159, 158, 156, 154, 159, 154, 156,
+ 158, 160, 155, 157, 153, 159, 158, 156, 154, 159, 154, 156, 158, 160, 155, 157,
+ 153, 159, 158, 156, 154, 159, 154, 156, 158, 160, 155, 157, 153, 159, 158, 156,
+ 154, 159, 154, 156, 158, 160, 155, 157, 153, 159, 156, 68, 82, 69, 65, 77,
+ 87, 69, 66, 46, 83, 48, 48, 0, 68, 82, 69, 65, 77, 87, 69, 66,
+ 46, 83, 48, 50, 0, 73, 78, 83, 84, 65, 76, 76, 46, 68, 65, 84,
+ 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 67, 48, 48, 0, 68, 82,
+ 69, 65, 77, 87, 69, 66, 46, 67, 48, 49, 0, 68, 82, 69, 65, 77,
+ 87, 69, 66, 46, 67, 48, 50, 0, 68, 82, 69, 65, 77, 87, 69, 66,
+ 46, 86, 48, 48, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 86, 57,
+ 57, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 71, 48, 48, 0, 68,
+ 82, 69, 65, 77, 87, 69, 66, 46, 71, 48, 49, 0, 68, 82, 69, 65,
+ 77, 87, 69, 66, 46, 71, 48, 50, 0, 68, 82, 69, 65, 77, 87, 69,
+ 66, 46, 71, 48, 56, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 71,
+ 48, 51, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 71, 48, 55, 0,
+ 68, 82, 69, 65, 77, 87, 69, 66, 46, 71, 48, 52, 0, 68, 82, 69,
+ 65, 77, 87, 69, 66, 46, 71, 48, 53, 0, 68, 82, 69, 65, 77, 87,
+ 69, 66, 46, 71, 48, 54, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46,
+ 71, 49, 52, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 48, 49,
+ 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 48, 50, 0, 68, 82,
+ 69, 65, 77, 87, 69, 66, 46, 84, 49, 48, 0, 68, 82, 69, 65, 77,
+ 87, 69, 66, 46, 84, 49, 49, 0, 68, 82, 69, 65, 77, 87, 69, 66,
+ 46, 84, 49, 50, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 49,
+ 51, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 50, 48, 0, 68,
+ 82, 69, 65, 77, 87, 69, 66, 46, 84, 50, 49, 0, 68, 82, 69, 65,
+ 77, 87, 69, 66, 46, 84, 50, 50, 0, 68, 82, 69, 65, 77, 87, 69,
+ 66, 46, 84, 50, 51, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84,
+ 50, 52, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 53, 48, 0,
+ 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 53, 49, 0, 68, 82, 69,
+ 65, 77, 87, 69, 66, 46, 84, 56, 48, 0, 68, 82, 69, 65, 77, 87,
+ 69, 66, 46, 84, 56, 49, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46,
+ 84, 56, 50, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 56, 51,
+ 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 84, 56, 52, 0, 68, 82,
+ 69, 65, 77, 87, 69, 66, 46, 86, 79, 76, 0, 68, 82, 69, 65, 77,
+ 87, 69, 66, 46, 71, 48, 57, 0, 68, 82, 69, 65, 77, 87, 69, 66,
+ 46, 71, 49, 48, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 71, 49,
+ 49, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 71, 49, 50, 0, 68,
+ 82, 69, 65, 77, 87, 69, 66, 46, 71, 49, 51, 0, 68, 82, 69, 65,
+ 77, 87, 69, 66, 46, 71, 49, 53, 0, 68, 82, 69, 65, 77, 87, 69,
+ 66, 46, 73, 48, 48, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 73,
+ 48, 49, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 73, 48, 50, 0,
+ 68, 82, 69, 65, 77, 87, 69, 66, 46, 73, 48, 51, 0, 68, 82, 69,
+ 65, 77, 87, 69, 66, 46, 73, 48, 52, 0, 68, 82, 69, 65, 77, 87,
+ 69, 66, 46, 73, 48, 53, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46,
+ 73, 48, 54, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 73, 48, 55,
+ 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 80, 65, 76, 0, 17, 1,
+ 64, 1, 157, 0, 198, 0, 72, 195, 4, 1, 44, 1, 0, 0, 44, 0,
+ 132, 197, 210, 0, 254, 0, 0, 0, 44, 0, 224, 195, 144, 0, 176, 0,
+ 64, 0, 96, 0, 132, 195, 0, 0, 50, 0, 50, 0, 200, 0, 136, 195,
+ 0, 0, 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 17, 1, 64, 1,
+ 157, 0, 198, 0, 72, 195, 255, 0, 38, 1, 0, 0, 24, 0, 204, 195,
+ 247, 0, 45, 1, 40, 0, 56, 0, 76, 195, 80, 0, 0, 1, 158, 0,
+ 202, 0, 228, 195, 80, 0, 44, 1, 58, 0, 146, 0, 156, 195, 0, 0,
+ 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 17, 1, 64, 1, 157, 0,
+ 198, 0, 72, 195, 247, 0, 45, 1, 40, 0, 56, 0, 76, 195, 80, 0,
+ 44, 1, 58, 0, 146, 0, 192, 198, 0, 0, 64, 1, 0, 0, 200, 0,
+ 156, 202, 255, 255, 17, 1, 64, 1, 157, 0, 198, 0, 128, 196, 240, 0,
+ 34, 1, 2, 0, 44, 0, 152, 196, 0, 0, 64, 1, 0, 0, 200, 0,
+ 156, 202, 255, 255, 17, 1, 64, 1, 157, 0, 198, 0, 128, 196, 0, 0,
+ 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 238, 0, 2, 1, 4, 0,
+ 44, 0, 204, 196, 104, 0, 124, 0, 4, 0, 44, 0, 208, 196, 24, 1,
+ 52, 1, 4, 0, 44, 0, 180, 196, 104, 0, 216, 0, 138, 0, 192, 0,
+ 212, 196, 17, 1, 64, 1, 157, 0, 198, 0, 128, 196, 0, 0, 64, 1,
+ 0, 0, 200, 0, 156, 202, 255, 255, 69, 88, 73, 84, 32, 72, 69, 76,
+ 80, 32, 76, 73, 83, 84, 32, 82, 69, 65, 68, 32, 76, 79, 71, 79,
+ 78, 32, 75, 69, 89, 83, 32, 1, 0, 80, 85, 66, 76, 73, 67, 32,
+ 80, 85, 66, 76, 73, 67, 32, 0, 0, 0, 66, 76, 65, 67, 75, 68,
+ 82, 65, 71, 79, 78, 32, 82, 89, 65, 78, 32, 0, 0, 0, 72, 69,
+ 78, 68, 82, 73, 88, 32, 76, 79, 85, 73, 83, 32, 0, 0, 0, 83,
+ 69, 80, 84, 73, 77, 85, 83, 32, 66, 69, 67, 75, 69, 84, 84, 32,
+ 0, 255, 255, 32, 0, 34, 82, 79, 79, 84, 32, 0, 34, 32, 0, 78,
+ 69, 84, 87, 236, 196, 69, 76, 86, 65, 144, 198, 69, 76, 86, 66, 160,
+ 198, 69, 76, 86, 67, 152, 198, 69, 76, 86, 69, 156, 198, 69, 76, 86,
+ 70, 164, 198, 67, 71, 65, 84, 52, 199, 82, 69, 77, 79, 172, 198, 66,
+ 85, 84, 65, 64, 199, 67, 66, 79, 88, 72, 199, 76, 73, 84, 69, 96,
+ 198, 80, 76, 65, 84, 68, 199, 76, 73, 70, 84, 128, 198, 87, 73, 82,
+ 69, 136, 198, 72, 78, 68, 76, 140, 198, 72, 65, 67, 72, 132, 198, 68,
+ 79, 79, 82, 184, 198, 67, 83, 72, 82, 116, 198, 71, 85, 78, 65, 56,
+ 199, 67, 82, 65, 65, 104, 198, 67, 82, 66, 66, 108, 198, 67, 82, 67,
+ 67, 112, 198, 83, 69, 65, 84, 252, 197, 77, 69, 78, 85, 156, 199, 67,
+ 79, 79, 75, 176, 198, 69, 76, 67, 65, 80, 198, 69, 68, 67, 65, 84,
+ 198, 68, 68, 67, 65, 88, 198, 65, 76, 84, 82, 8, 198, 76, 79, 75,
+ 65, 64, 198, 76, 79, 75, 66, 68, 198, 69, 78, 84, 65, 20, 198, 69,
+ 78, 84, 66, 40, 198, 69, 78, 84, 69, 44, 198, 69, 78, 84, 67, 28,
+ 198, 69, 78, 84, 68, 48, 198, 69, 78, 84, 72, 52, 198, 87, 87, 65,
+ 84, 244, 197, 80, 79, 79, 76, 92, 198, 87, 83, 72, 68, 248, 197, 71,
+ 82, 65, 70, 72, 198, 84, 82, 65, 80, 76, 198, 67, 68, 80, 69, 44,
+ 199, 68, 76, 79, 75, 12, 198, 72, 79, 76, 69, 4, 198, 68, 82, 89,
+ 82, 16, 198, 72, 79, 76, 89, 0, 198, 87, 65, 76, 76, 48, 199, 66,
+ 79, 79, 75, 12, 200, 65, 88, 69, 68, 180, 198, 83, 72, 76, 68, 60,
+ 199, 66, 67, 78, 89, 236, 197, 76, 73, 68, 67, 232, 197, 76, 73, 68,
+ 85, 228, 197, 76, 73, 68, 79, 240, 197, 80, 73, 80, 69, 172, 197, 66,
+ 65, 76, 67, 36, 198, 87, 73, 78, 68, 32, 198, 80, 65, 80, 82, 184,
+ 199, 85, 87, 84, 65, 164, 197, 85, 87, 84, 66, 164, 197, 83, 84, 65,
+ 84, 220, 199, 84, 76, 73, 68, 160, 197, 83, 76, 65, 66, 220, 197, 67,
+ 65, 82, 84, 224, 197, 70, 67, 65, 82, 176, 197, 83, 76, 66, 65, 196,
+ 197, 83, 76, 66, 66, 200, 197, 83, 76, 66, 67, 208, 197, 83, 76, 66,
+ 68, 204, 197, 83, 76, 66, 69, 212, 197, 83, 76, 66, 70, 216, 197, 80,
+ 76, 73, 78, 180, 197, 76, 65, 68, 68, 188, 197, 76, 65, 68, 66, 192,
+ 197, 71, 85, 77, 65, 184, 197, 83, 81, 69, 69, 140, 197, 84, 65, 80,
+ 80, 144, 197, 71, 85, 73, 84, 148, 197, 67, 79, 78, 84, 152, 197, 66,
+ 69, 76, 76, 156, 197, 140, 140, 140, 140, 48, 48, 48, 48, 0, 48, 48,
+ 0, 157, 0, 178, 0, 81, 0, 94, 0, 92, 199, 179, 0, 200, 0, 81,
+ 0, 94, 0, 96, 199, 201, 0, 222, 0, 81, 0, 94, 0, 100, 199, 157,
+ 0, 178, 0, 95, 0, 112, 0, 104, 199, 179, 0, 200, 0, 95, 0, 112,
+ 0, 108, 199, 201, 0, 222, 0, 95, 0, 112, 0, 112, 199, 157, 0, 178,
+ 0, 113, 0, 130, 0, 116, 199, 179, 0, 200, 0, 113, 0, 130, 0, 120,
+ 199, 201, 0, 222, 0, 113, 0, 130, 0, 124, 199, 157, 0, 178, 0, 131,
+ 0, 145, 0, 128, 199, 179, 0, 222, 0, 131, 0, 145, 0, 132, 199, 220,
+ 0, 234, 0, 152, 0, 166, 0, 84, 199, 0, 0, 64, 1, 0, 0, 200,
+ 0, 156, 202, 255, 255, 174, 0, 188, 0, 132, 0, 148, 0, 84, 199, 0,
+ 0, 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 24, 1, 64, 1, 160,
+ 0, 200, 0, 84, 199, 143, 0, 44, 1, 6, 0, 194, 0, 188, 199, 0,
+ 0, 143, 0, 6, 0, 194, 0, 196, 199, 0, 0, 64, 1, 0, 0, 200,
+ 0, 156, 202, 255, 255, 104, 0, 128, 0, 58, 0, 72, 0, 224, 199, 64,
+ 0, 116, 0, 76, 0, 106, 0, 228, 199, 116, 0, 168, 0, 76, 0, 106,
+ 0, 232, 199, 64, 0, 116, 0, 106, 0, 136, 0, 236, 199, 116, 0, 168,
+ 0, 106, 0, 136, 0, 240, 199, 0, 0, 64, 1, 0, 0, 200, 0, 156,
+ 202, 255, 255, 186, 0, 202, 0, 157, 0, 173, 0, 32, 200, 243, 0, 3,
+ 1, 131, 0, 147, 0, 28, 200, 12, 1, 28, 1, 168, 0, 184, 0, 84,
+ 199, 0, 0, 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 119, 0, 174,
+ 0, 82, 0, 128, 0, 56, 200, 70, 0, 137, 0, 62, 0, 111, 0, 132,
+ 200, 188, 0, 250, 0, 68, 0, 152, 0, 80, 200, 0, 0, 64, 1, 0,
+ 0, 200, 0, 156, 202, 255, 255, 236, 0, 252, 0, 112, 0, 128, 0, 76,
+ 200, 188, 0, 250, 0, 64, 0, 152, 0, 92, 200, 62, 0, 152, 0, 56,
+ 0, 133, 0, 120, 200, 0, 0, 64, 1, 0, 0, 200, 0, 156, 202, 255,
+ 255, 119, 0, 174, 0, 82, 0, 128, 0, 72, 200, 70, 0, 139, 0, 62,
+ 0, 111, 0, 84, 200, 236, 0, 252, 0, 112, 0, 128, 0, 76, 200, 0,
+ 0, 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 236, 0, 252, 0, 112,
+ 0, 128, 0, 76, 200, 188, 0, 250, 0, 64, 0, 152, 0, 88, 200, 62,
+ 0, 152, 0, 56, 0, 133, 0, 120, 200, 0, 0, 64, 1, 0, 0, 200,
+ 0, 156, 202, 255, 255, 13, 10, 13, 10, 68, 114, 101, 97, 109, 119, 101,
+ 98, 32, 104, 97, 115, 32, 97, 110, 32, 69, 114, 114, 111, 114, 58, 13,
+ 10, 85, 110, 97, 98, 108, 101, 32, 116, 111, 32, 97, 108, 108, 111, 99,
+ 97, 116, 101, 32, 69, 120, 112, 97, 110, 100, 101, 100, 32, 77, 101, 109,
+ 111, 114, 121, 46, 13, 10, 13, 10, 36, 13, 10, 13, 10, 68, 114, 101,
+ 97, 109, 119, 101, 98, 32, 104, 97, 115, 32, 97, 110, 32, 69, 114, 114,
+ 111, 114, 58, 13, 10, 83, 111, 117, 110, 100, 32, 66, 108, 97, 115, 116,
+ 101, 114, 32, 99, 97, 114, 100, 32, 110, 111, 116, 32, 102, 111, 117, 110,
+ 100, 32, 97, 116, 32, 97, 100, 100, 114, 101, 115, 115, 32, 50, 50, 48,
+ 32, 72, 101, 120, 46, 13, 10, 13, 10, 36, 13, 10, 13, 10, 68, 114,
+ 101, 97, 109, 119, 101, 98, 32, 104, 97, 115, 32, 97, 110, 32, 69, 114,
+ 114, 111, 114, 58, 13, 10, 79, 117, 116, 32, 111, 102, 32, 66, 97, 115,
+ 101, 32, 77, 101, 109, 111, 114, 121, 46, 13, 10, 13, 10, 36, 13, 10,
+ 13, 10, 68, 114, 101, 97, 109, 119, 101, 98, 32, 104, 97, 115, 32, 97,
+ 110, 32, 69, 114, 114, 111, 114, 58, 13, 10, 77, 101, 109, 111, 114, 121,
+ 32, 68, 101, 97, 108, 108, 111, 99, 97, 116, 105, 111, 110, 32, 112, 114,
+ 111, 98, 108, 101, 109, 46, 13, 10, 13, 10, 36, 13, 10, 13, 10, 68,
+ 114, 101, 97, 109, 119, 101, 98, 32, 104, 97, 115, 32, 97, 110, 32, 69,
+ 114, 114, 111, 114, 58, 13, 10, 65, 116, 32, 108, 101, 97, 115, 116, 32,
+ 53, 57, 48, 75, 32, 111, 102, 32, 98, 97, 115, 101, 32, 109, 101, 109,
+ 111, 114, 121, 32, 105, 115, 32, 114, 101, 113, 117, 105, 114, 101, 100, 46,
+ 13, 10, 13, 10, 36, 13, 10, 13, 10, 68, 114, 101, 97, 109, 119, 101,
+ 98, 32, 104, 97, 115, 32, 97, 110, 32, 69, 114, 114, 111, 114, 58, 13,
+ 10, 83, 111, 117, 110, 100, 32, 66, 108, 97, 115, 116, 101, 114, 32, 110,
+ 111, 116, 32, 102, 111, 117, 110, 100, 32, 111, 110, 32, 105, 110, 116, 101,
+ 114, 117, 112, 116, 32, 48, 13, 10, 13, 10, 36, 13, 10, 13, 10, 68,
+ 114, 101, 97, 109, 119, 101, 98, 32, 104, 97, 115, 32, 97, 110, 32, 69,
+ 114, 114, 111, 114, 58, 13, 10, 85, 110, 97, 98, 108, 101, 32, 116, 111,
+ 32, 115, 101, 108, 101, 99, 116, 32, 69, 77, 77, 32, 112, 97, 103, 101,
+ 46, 13, 10, 13, 10, 36, 13, 10, 13, 10, 68, 114, 101, 97, 109, 119,
+ 101, 98, 32, 104, 97, 115, 32, 97, 110, 32, 69, 114, 114, 111, 114, 58,
+ 13, 10, 70, 105, 108, 101, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100,
+ 46, 99, 13, 10, 13, 10, 36, 68, 114, 101, 97, 109, 119, 101, 98, 32,
+ 108, 111, 111, 107, 115, 32, 102, 111, 114, 32, 83, 111, 117, 110, 100, 32,
+ 66, 108, 97, 115, 116, 101, 114, 32, 105, 110, 102, 111, 114, 109, 97, 116,
+ 105, 111, 110, 32, 105, 110, 13, 10, 116, 104, 101, 32, 66, 76, 65, 83,
+ 84, 69, 82, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, 32,
+ 118, 97, 114, 105, 97, 98, 108, 101, 32, 40, 105, 110, 32, 121, 111, 117,
+ 114, 32, 65, 85, 84, 79, 69, 88, 69, 67, 46, 66, 65, 84, 41, 13,
+ 10, 13, 10, 73, 102, 32, 116, 104, 105, 115, 32, 105, 115, 32, 110, 111,
+ 116, 32, 102, 111, 117, 110, 100, 32, 116, 104, 101, 110, 32, 73, 82, 81,
+ 32, 55, 44, 32, 68, 77, 65, 32, 99, 104, 97, 110, 110, 101, 108, 32,
+ 49, 32, 97, 110, 100, 32, 98, 97, 115, 101, 13, 10, 97, 100, 100, 114,
+ 101, 115, 115, 32, 50, 50, 48, 104, 32, 97, 114, 101, 32, 97, 115, 115,
+ 117, 109, 101, 100, 46, 13, 10, 13, 10, 84, 111, 32, 97, 108, 116, 101,
+ 114, 32, 97, 110, 121, 32, 111, 114, 32, 97, 108, 108, 32, 111, 102, 32,
+ 116, 104, 101, 115, 101, 32, 115, 101, 116, 116, 105, 110, 103, 115, 32, 121,
+ 111, 117, 32, 99, 97, 110, 32, 115, 112, 101, 99, 105, 102, 121, 32, 116,
+ 104, 101, 109, 13, 10, 111, 110, 32, 116, 104, 101, 32, 99, 111, 109, 109,
+ 97, 110, 100, 32, 108, 105, 110, 101, 46, 32, 70, 111, 114, 32, 101, 120,
+ 97, 109, 112, 108, 101, 58, 13, 10, 13, 10, 84, 121, 112, 101, 32, 68,
+ 82, 69, 65, 77, 87, 69, 66, 32, 73, 55, 32, 65, 50, 50, 48, 32,
+ 68, 49, 32, 116, 111, 32, 114, 117, 110, 32, 68, 114, 101, 97, 109, 119,
+ 101, 98, 32, 111, 110, 32, 73, 82, 81, 32, 55, 44, 32, 68, 77, 65,
+ 13, 10, 32, 99, 104, 97, 110, 110, 101, 108, 32, 49, 32, 97, 110, 100,
+ 32, 98, 97, 115, 101, 32, 97, 100, 100, 114, 101, 115, 115, 32, 50, 50,
+ 48, 104, 13, 10, 32, 68, 82, 69, 65, 77, 87, 69, 66, 32, 73, 53,
+ 32, 116, 111, 32, 114, 117, 110, 32, 68, 114, 101, 97, 109, 119, 101, 98,
+ 32, 111, 110, 32, 73, 82, 81, 32, 53, 32, 97, 110, 100, 13, 10, 32,
+ 100, 101, 102, 97, 117, 108, 116, 32, 97, 100, 100, 114, 101, 115, 115, 32,
+ 111, 102, 32, 50, 50, 48, 104, 44, 32, 68, 77, 65, 32, 49, 13, 10,
+ 13, 10, 36, 13, 10, 13, 10, 84, 114, 121, 32, 116, 104, 101, 32, 68,
+ 114, 101, 97, 109, 119, 101, 98, 32, 67, 68, 32, 105, 110, 32, 121, 111,
+ 117, 114, 32, 115, 116, 101, 114, 101, 111, 46, 46, 46, 46, 13, 10, 13,
+ 10, 13, 10, 36, 129, 0, 184, 0, 82, 0, 128, 0, 188, 200, 80, 0,
+ 147, 0, 62, 0, 111, 0, 132, 200, 183, 0, 250, 0, 62, 0, 111, 0,
+ 192, 200, 0, 0, 64, 1, 0, 0, 200, 0, 156, 202, 255, 255, 83, 80,
+ 69, 69, 67, 72, 82, 50, 52, 67, 48, 48, 48, 53, 46, 82, 65, 87,
+ 0, 135, 131, 129, 130, 44, 0, 70, 0, 32, 0, 46, 0, 116, 196, 0,
+ 0, 50, 0, 0, 0, 180, 0, 128, 195, 226, 0, 244, 0, 10, 0, 26,
+ 0, 44, 200, 226, 0, 244, 0, 26, 0, 40, 0, 48, 200, 240, 0, 4,
+ 1, 100, 0, 124, 0, 200, 201, 0, 0, 64, 1, 0, 0, 200, 0, 208,
+ 201, 255, 255, 44, 0, 70, 0, 32, 0, 46, 0, 116, 196, 0, 0, 50,
+ 0, 0, 0, 180, 0, 128, 195, 18, 1, 36, 1, 10, 0, 26, 0, 44,
+ 200, 18, 1, 36, 1, 26, 0, 40, 0, 48, 200, 240, 0, 4, 1, 100,
+ 0, 124, 0, 200, 201, 0, 0, 64, 1, 0, 0, 200, 0, 208, 201, 255,
+ 255, 0, 33, 10, 15, 255, 0, 22, 10, 15, 255, 0, 22, 0, 15, 255,
+ 0, 11, 0, 15, 255, 0, 11, 10, 15, 255, 0, 0, 10, 15, 255, 1,
+ 44, 10, 6, 255, 1, 44, 0, 13, 255, 2, 33, 0, 6, 255, 2, 22,
+ 0, 5, 255, 2, 22, 10, 16, 255, 2, 11, 10, 16, 255, 3, 44, 0,
+ 15, 255, 3, 33, 10, 6, 255, 3, 33, 0, 5, 255, 4, 11, 30, 6,
+ 255, 4, 22, 30, 5, 255, 4, 22, 20, 13, 255, 10, 33, 30, 6, 255,
+ 10, 22, 30, 6, 255, 9, 22, 10, 6, 255, 9, 22, 20, 16, 255, 9,
+ 22, 30, 16, 255, 9, 22, 40, 16, 255, 9, 22, 50, 16, 255, 6, 11,
+ 30, 6, 255, 6, 0, 10, 15, 255, 6, 0, 20, 15, 255, 6, 11, 20,
+ 15, 255, 6, 22, 20, 15, 255, 7, 11, 20, 6, 255, 7, 0, 20, 6,
+ 255, 7, 0, 30, 6, 255, 55, 44, 0, 5, 255, 55, 44, 10, 5, 255,
+ 5, 22, 30, 6, 255, 5, 22, 20, 15, 255, 5, 22, 10, 15, 255, 24,
+ 22, 0, 15, 255, 24, 33, 0, 15, 255, 24, 44, 0, 15, 255, 24, 33,
+ 10, 15, 255, 8, 0, 10, 6, 255, 8, 11, 10, 6, 255, 8, 22, 10,
+ 6, 255, 8, 33, 10, 6, 255, 8, 33, 20, 6, 255, 8, 33, 30, 6,
+ 255, 8, 33, 40, 6, 255, 8, 22, 40, 6, 255, 8, 11, 40, 6, 255,
+ 11, 11, 20, 12, 255, 11, 11, 30, 12, 255, 11, 22, 20, 12, 255, 11,
+ 22, 30, 12, 255, 12, 22, 20, 12, 255, 13, 22, 20, 12, 255, 13, 33,
+ 20, 12, 255, 14, 44, 20, 12, 255, 14, 33, 0, 12, 255, 14, 33, 10,
+ 12, 255, 14, 33, 20, 12, 255, 14, 33, 30, 12, 255, 14, 33, 40, 12,
+ 255, 14, 22, 0, 16, 255, 19, 0, 0, 12, 255, 20, 0, 20, 16, 255,
+ 20, 0, 30, 16, 255, 20, 11, 30, 16, 255, 20, 0, 40, 16, 255, 20,
+ 11, 40, 16, 255, 21, 11, 10, 15, 255, 21, 11, 20, 15, 255, 21, 0,
+ 20, 15, 255, 21, 22, 20, 15, 255, 21, 33, 20, 15, 255, 21, 44, 20,
+ 15, 255, 21, 44, 10, 15, 255, 22, 22, 10, 16, 255, 22, 22, 20, 16,
+ 255, 23, 22, 30, 13, 255, 23, 22, 40, 13, 255, 23, 33, 40, 13, 255,
+ 23, 11, 40, 13, 255, 23, 0, 40, 13, 255, 23, 0, 50, 13, 255, 25,
+ 11, 40, 16, 255, 25, 11, 50, 16, 255, 25, 0, 50, 16, 255, 27, 11,
+ 20, 16, 255, 27, 11, 30, 16, 255, 29, 11, 10, 16, 255, 45, 22, 30,
+ 12, 255, 45, 22, 40, 12, 255, 45, 22, 50, 12, 255, 46, 22, 40, 12,
+ 255, 46, 11, 50, 12, 255, 46, 22, 50, 12, 255, 46, 33, 50, 12, 255,
+ 47, 0, 0, 12, 255, 26, 22, 20, 16, 255, 26, 33, 10, 16, 255, 26,
+ 33, 20, 16, 255, 26, 33, 30, 16, 255, 26, 44, 30, 16, 255, 26, 22,
+ 30, 16, 255, 26, 11, 30, 16, 255, 26, 11, 20, 16, 255, 26, 0, 20,
+ 16, 255, 26, 11, 40, 16, 255, 26, 0, 40, 16, 255, 26, 22, 40, 16,
+ 255, 26, 11, 50, 16, 255, 28, 0, 30, 15, 255, 28, 0, 20, 15, 255,
+ 28, 0, 40, 15, 255, 28, 11, 30, 15, 255, 28, 11, 20, 15, 255, 28,
+ 22, 30, 15, 255, 28, 22, 20, 15, 255, 255, 79, 66, 74, 69, 67, 84,
+ 32, 78, 65, 77, 69, 32, 79, 78, 69, 32, 0, 16, 18, 18, 17, 16,
+ 16, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 45,
+ 0, 8, 0, 81, 87, 69, 82, 84, 89, 85, 73, 79, 80, 0, 0, 13,
+ 0, 65, 83, 68, 70, 71, 72, 74, 75, 76, 0, 0, 0, 0, 0, 90,
+ 88, 67, 86, 66, 78, 77, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 68, 82, 69, 65, 77, 87, 69, 66, 32, 68,
+ 65, 84, 65, 32, 70, 73, 76, 69, 32, 67, 79, 80, 89, 82, 73, 71,
+ 72, 84, 32, 49, 57, 57, 50, 32, 67, 82, 69, 65, 84, 73, 86, 69,
+ 32, 82, 69, 65, 76, 73, 84, 89, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 48, 0, 5, 255, 33, 10, 255, 255, 255, 0, 1, 6, 2, 255, 3,
+ 255, 255, 255, 255, 255, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 49, 0, 1, 255, 44, 10, 255, 255, 255, 0, 7, 2, 255, 255, 255,
+ 255, 6, 255, 255, 255, 1, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 50, 0, 2, 255, 33, 0, 255, 255, 255, 0, 1, 0, 255, 255, 1,
+ 255, 3, 255, 255, 255, 2, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 51, 0, 5, 255, 33, 10, 255, 255, 255, 0, 2, 2, 0, 2, 4,
+ 255, 0, 255, 255, 255, 3, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 52, 0, 23, 255, 11, 30, 255, 255, 255, 0, 1, 4, 0, 5, 255,
+ 255, 3, 255, 255, 255, 4, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 53, 0, 5, 255, 22, 30, 255, 255, 255, 0, 1, 2, 0, 4, 255,
+ 255, 3, 255, 255, 255, 5, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 54, 0, 5, 255, 11, 30, 255, 255, 255, 0, 1, 0, 0, 1, 2,
+ 255, 0, 255, 255, 255, 6, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 55, 0, 255, 255, 0, 20, 255, 255, 255, 0, 2, 2, 255, 255, 255,
+ 255, 0, 255, 255, 255, 7, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 56, 0, 8, 255, 0, 10, 255, 255, 255, 0, 1, 2, 255, 255, 255,
+ 255, 0, 11, 40, 0, 8, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 57, 0, 9, 255, 22, 10, 255, 255, 255, 0, 4, 6, 255, 255, 255,
+ 255, 0, 255, 255, 255, 9, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 48, 0, 10, 255, 33, 30, 255, 255, 255, 0, 2, 0, 255, 255, 2,
+ 2, 4, 22, 30, 255, 10, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 49, 0, 11, 255, 11, 20, 255, 255, 255, 0, 0, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 11, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 50, 0, 12, 255, 22, 20, 255, 255, 255, 0, 1, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 12, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 51, 0, 12, 255, 22, 20, 255, 255, 255, 0, 1, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 13, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 52, 0, 14, 255, 44, 20, 255, 255, 255, 0, 0, 6, 255, 255, 255,
+ 255, 255, 255, 255, 255, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 57, 0, 19, 255, 0, 0, 255, 255, 255, 0, 0, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 19, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 48, 0, 22, 255, 0, 20, 255, 255, 255, 0, 1, 4, 2, 15, 255,
+ 255, 255, 255, 255, 255, 20, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 49, 0, 5, 255, 11, 10, 255, 255, 255, 0, 1, 4, 2, 15, 1,
+ 255, 255, 255, 255, 255, 21, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 50, 0, 22, 255, 22, 10, 255, 255, 255, 0, 0, 4, 255, 255, 1,
+ 255, 255, 255, 255, 255, 22, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 51, 0, 23, 255, 22, 30, 255, 255, 255, 0, 1, 4, 2, 15, 3,
+ 255, 255, 255, 255, 255, 23, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 52, 0, 5, 255, 44, 0, 255, 255, 255, 0, 1, 6, 2, 15, 255,
+ 255, 255, 255, 255, 255, 24, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 53, 0, 22, 255, 11, 40, 255, 255, 255, 0, 1, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 25, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 54, 0, 9, 255, 22, 20, 255, 255, 255, 0, 4, 2, 255, 255, 255,
+ 255, 255, 255, 255, 255, 26, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 55, 0, 22, 255, 11, 20, 255, 255, 255, 0, 0, 6, 255, 255, 255,
+ 255, 255, 255, 255, 255, 27, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 56, 0, 5, 255, 11, 30, 255, 255, 255, 0, 0, 0, 255, 255, 2,
+ 255, 255, 255, 255, 255, 28, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 57, 0, 22, 255, 11, 10, 255, 255, 255, 0, 0, 2, 255, 255, 255,
+ 255, 255, 255, 255, 255, 29, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 53, 0, 5, 255, 22, 10, 255, 255, 255, 0, 1, 4, 1, 15, 255,
+ 255, 255, 255, 255, 255, 5, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 52, 0, 23, 255, 22, 20, 255, 255, 255, 0, 1, 4, 2, 15, 255,
+ 255, 255, 255, 255, 255, 4, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 48, 0, 10, 255, 22, 30, 255, 255, 255, 0, 3, 6, 255, 255, 255,
+ 255, 255, 255, 255, 255, 10, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 50, 0, 12, 255, 22, 20, 255, 255, 255, 0, 0, 2, 255, 255, 255,
+ 255, 255, 255, 255, 255, 12, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 51, 0, 5, 255, 44, 0, 255, 255, 255, 0, 1, 6, 2, 255, 4,
+ 255, 255, 255, 255, 255, 3, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 52, 0, 5, 255, 22, 0, 255, 255, 255, 0, 3, 6, 0, 255, 255,
+ 255, 255, 33, 0, 3, 24, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 50, 0, 22, 255, 22, 20, 255, 255, 255, 0, 1, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 22, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 50, 0, 22, 255, 22, 20, 255, 255, 255, 0, 0, 2, 255, 255, 255,
+ 255, 255, 255, 255, 255, 22, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 49, 0, 11, 255, 22, 30, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 11, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 56, 0, 5, 255, 11, 20, 255, 255, 255, 0, 0, 6, 255, 255, 2,
+ 255, 255, 255, 255, 255, 28, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 49, 0, 5, 255, 11, 10, 255, 255, 255, 0, 1, 4, 2, 15, 1,
+ 255, 255, 255, 255, 255, 21, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 50, 54, 0, 9, 255, 0, 40, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 26, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 49, 57, 0, 19, 255, 0, 0, 255, 255, 255, 0, 2, 2, 255, 255, 255,
+ 255, 255, 255, 255, 255, 19, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 56, 0, 8, 255, 11, 40, 255, 255, 255, 0, 0, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 8, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 48, 49, 0, 1, 255, 44, 10, 255, 255, 255, 0, 3, 6, 255, 255, 255,
+ 255, 255, 255, 255, 255, 1, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 52, 53, 0, 35, 255, 22, 30, 255, 255, 255, 0, 0, 6, 255, 255, 255,
+ 255, 255, 255, 255, 255, 45, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 52, 54, 0, 35, 255, 22, 40, 255, 255, 255, 0, 0, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 46, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 52, 55, 0, 35, 255, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 47, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 52, 53, 0, 35, 255, 22, 30, 255, 255, 255, 0, 4, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 45, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 52, 54, 0, 35, 255, 22, 50, 255, 255, 255, 0, 0, 4, 255, 255, 255,
+ 255, 255, 255, 255, 255, 46, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 53, 48, 0, 35, 255, 22, 30, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 50, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 53, 49, 0, 35, 255, 11, 30, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 51, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 53, 50, 0, 35, 255, 22, 30, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 52, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 53, 51, 0, 35, 255, 33, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 53, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 53, 52, 0, 35, 255, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 54, 68, 82, 69, 65, 77, 87, 69, 66, 46, 82,
+ 53, 53, 0, 14, 255, 44, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255,
+ 255, 255, 255, 255, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 3, 2, 4, 1, 10, 9, 8, 6,
+ 11, 4, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 68, 82, 69, 65, 77, 87, 69, 66, 46, 68, 48,
+ 48, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 68, 48, 49, 0, 68,
+ 82, 69, 65, 77, 87, 69, 66, 46, 68, 48, 50, 0, 68, 82, 69, 65,
+ 77, 87, 69, 66, 46, 68, 48, 51, 0, 68, 82, 69, 65, 77, 87, 69,
+ 66, 46, 68, 48, 52, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 68,
+ 48, 53, 0, 68, 82, 69, 65, 77, 87, 69, 66, 46, 68, 48, 54, 0,
+ 68, 82, 69, 65, 77, 87, 69, 66, 46, 68, 69, 77, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
+data.assign(src, src + sizeof(src));
+ };
+
+
+void __dispatch_call(Context &context, unsigned addr) {
+ switch(addr) {
+ case 0xc000: alleybarksound(context); break;
+ case 0xc004: intromusic(context); break;
+ case 0xc008: foghornsound(context); break;
+ case 0xc00c: receptionist(context); break;
+ case 0xc010: smokebloke(context); break;
+ case 0xc014: attendant(context); break;
+ case 0xc018: manasleep(context); break;
+ case 0xc01c: eden(context); break;
+ case 0xc020: edeninbath(context); break;
+ case 0xc024: malefan(context); break;
+ case 0xc028: femalefan(context); break;
+ case 0xc02c: louis(context); break;
+ case 0xc030: louischair(context); break;
+ case 0xc034: manasleep2(context); break;
+ case 0xc038: mansatstill(context); break;
+ case 0xc03c: tattooman(context); break;
+ case 0xc040: drinker(context); break;
+ case 0xc044: bartender(context); break;
+ case 0xc048: othersmoker(context); break;
+ case 0xc04c: barwoman(context); break;
+ case 0xc050: interviewer(context); break;
+ case 0xc054: soldier1(context); break;
+ case 0xc058: rockstar(context); break;
+ case 0xc05c: helicopter(context); break;
+ case 0xc060: mugger(context); break;
+ case 0xc064: aide(context); break;
+ case 0xc068: businessman(context); break;
+ case 0xc06c: poolguard(context); break;
+ case 0xc070: security(context); break;
+ case 0xc074: heavy(context); break;
+ case 0xc078: bossman(context); break;
+ case 0xc07c: gamer(context); break;
+ case 0xc080: sparkydrip(context); break;
+ case 0xc084: carparkdrip(context); break;
+ case 0xc088: keeper(context); break;
+ case 0xc08c: candles1(context); break;
+ case 0xc090: smallcandle(context); break;
+ case 0xc094: intromagic1(context); break;
+ case 0xc098: candles(context); break;
+ case 0xc09c: candles2(context); break;
+ case 0xc0a0: gates(context); break;
+ case 0xc0a4: intromagic2(context); break;
+ case 0xc0a8: intromagic3(context); break;
+ case 0xc0ac: intromonks1(context); break;
+ case 0xc0b0: intromonks2(context); break;
+ case 0xc0b4: handclap(context); break;
+ case 0xc0b8: monks2text(context); break;
+ case 0xc0bc: intro1text(context); break;
+ case 0xc0c0: intro2text(context); break;
+ case 0xc0c4: intro3text(context); break;
+ case 0xc0c8: monkandryan(context); break;
+ case 0xc0cc: endgameseq(context); break;
+ case 0xc0d0: rollendcredits(context); break;
+ case 0xc0d4: priest(context); break;
+ case 0xc0d8: madmanstelly(context); break;
+ case 0xc0dc: madman(context); break;
+ case 0xc0e0: madmantext(context); break;
+ case 0xc0e4: madmode(context); break;
+ case 0xc0e8: priesttext(context); break;
+ case 0xc0ec: textforend(context); break;
+ case 0xc0f0: textformonk(context); break;
+ case 0xc0f4: drunk(context); break;
+ case 0xc0f8: advisor(context); break;
+ case 0xc0fc: copper(context); break;
+ case 0xc100: sparky(context); break;
+ case 0xc104: train(context); break;
+ case 0xc108: addtopeoplelist(context); break;
+ case 0xc10c: showgamereel(context); break;
+ case 0xc110: checkspeed(context); break;
+ case 0xc114: clearsprites(context); break;
+ case 0xc118: makesprite(context); break;
+ case 0xc11c: delsprite(context); break;
+ case 0xc120: spriteupdate(context); break;
+ case 0xc124: printsprites(context); break;
+ case 0xc128: printasprite(context); break;
+ case 0xc12c: checkone(context); break;
+ case 0xc130: findsource(context); break;
+ case 0xc134: initman(context); break;
+ case 0xc138: mainman(context); break;
+ case 0xc13c: aboutturn(context); break;
+ case 0xc140: walking(context); break;
+ case 0xc144: facerightway(context); break;
+ case 0xc148: checkforexit(context); break;
+ case 0xc14c: adjustdown(context); break;
+ case 0xc150: adjustup(context); break;
+ case 0xc154: adjustleft(context); break;
+ case 0xc158: adjustright(context); break;
+ case 0xc15c: reminders(context); break;
+ case 0xc160: initrain(context); break;
+ case 0xc164: splitintolines(context); break;
+ case 0xc168: getblockofpixel(context); break;
+ case 0xc16c: showrain(context); break;
+ case 0xc170: backobject(context); break;
+ case 0xc174: liftsprite(context); break;
+ case 0xc178: liftnoise(context); break;
+ case 0xc17c: random(context); break;
+ case 0xc180: steady(context); break;
+ case 0xc184: constant(context); break;
+ case 0xc188: doorway(context); break;
+ case 0xc18c: widedoor(context); break;
+ case 0xc190: dodoor(context); break;
+ case 0xc194: lockeddoorway(context); break;
+ case 0xc198: updatepeople(context); break;
+ case 0xc19c: getreelframeax(context); break;
+ case 0xc1a0: reelsonscreen(context); break;
+ case 0xc1a4: plotreel(context); break;
+ case 0xc1a8: soundonreels(context); break;
+ case 0xc1ac: reconstruct(context); break;
+ case 0xc1b0: dealwithspecial(context); break;
+ case 0xc1b4: movemap(context); break;
+ case 0xc1b8: getreelstart(context); break;
+ case 0xc1bc: showreelframe(context); break;
+ case 0xc1c0: deleverything(context); break;
+ case 0xc1c4: dumpeverything(context); break;
+ case 0xc1c8: allocatework(context); break;
+ case 0xc1cc: showpcx(context); break;
+ case 0xc1d0: readabyte(context); break;
+ case 0xc1d4: readoneblock(context); break;
+ case 0xc1d8: loadpalfromiff(context); break;
+ case 0xc1dc: setmode(context); break;
+ case 0xc1e0: cls(context); break;
+ case 0xc1e4: printundermon(context); break;
+ case 0xc1e8: worktoscreen(context); break;
+ case 0xc1ec: paneltomap(context); break;
+ case 0xc1f0: maptopanel(context); break;
+ case 0xc1f4: dumpmap(context); break;
+ case 0xc1f8: pixelcheckset(context); break;
+ case 0xc1fc: createpanel(context); break;
+ case 0xc200: createpanel2(context); break;
+ case 0xc204: clearwork(context); break;
+ case 0xc208: vsync(context); break;
+ case 0xc20c: doshake(context); break;
+ case 0xc210: zoom(context); break;
+ case 0xc214: delthisone(context); break;
+ case 0xc218: multiget(context); break;
+ case 0xc21c: multiput(context); break;
+ case 0xc220: multidump(context); break;
+ case 0xc224: width160(context); break;
+ case 0xc228: doblocks(context); break;
+ case 0xc22c: showframe(context); break;
+ case 0xc230: frameoutv(context); break;
+ case 0xc234: frameoutnm(context); break;
+ case 0xc238: frameoutbh(context); break;
+ case 0xc23c: frameoutfx(context); break;
+ case 0xc240: transferinv(context); break;
+ case 0xc244: transfermap(context); break;
+ case 0xc248: fadedos(context); break;
+ case 0xc24c: dofade(context); break;
+ case 0xc250: clearendpal(context); break;
+ case 0xc254: clearpalette(context); break;
+ case 0xc258: fadescreenup(context); break;
+ case 0xc25c: fadetowhite(context); break;
+ case 0xc260: fadefromwhite(context); break;
+ case 0xc264: fadescreenups(context); break;
+ case 0xc268: fadescreendownhalf(context); break;
+ case 0xc26c: fadescreenuphalf(context); break;
+ case 0xc270: fadescreendown(context); break;
+ case 0xc274: fadescreendowns(context); break;
+ case 0xc278: clearstartpal(context); break;
+ case 0xc27c: showgun(context); break;
+ case 0xc280: rollendcredits2(context); break;
+ case 0xc284: rollem(context); break;
+ case 0xc288: fadecalculation(context); break;
+ case 0xc28c: greyscalesum(context); break;
+ case 0xc290: showgroup(context); break;
+ case 0xc294: paltostartpal(context); break;
+ case 0xc298: endpaltostart(context); break;
+ case 0xc29c: startpaltoend(context); break;
+ case 0xc2a0: paltoendpal(context); break;
+ case 0xc2a4: allpalette(context); break;
+ case 0xc2a8: dumpcurrent(context); break;
+ case 0xc2ac: fadedownmon(context); break;
+ case 0xc2b0: fadeupmon(context); break;
+ case 0xc2b4: fadeupmonfirst(context); break;
+ case 0xc2b8: fadeupyellows(context); break;
+ case 0xc2bc: initialmoncols(context); break;
+ case 0xc2c0: titles(context); break;
+ case 0xc2c4: endgame(context); break;
+ case 0xc2c8: monkspeaking(context); break;
+ case 0xc2cc: showmonk(context); break;
+ case 0xc2d0: gettingshot(context); break;
+ case 0xc2d4: credits(context); break;
+ case 0xc2d8: biblequote(context); break;
+ case 0xc2dc: hangone(context); break;
+ case 0xc2e0: intro(context); break;
+ case 0xc2e4: runintroseq(context); break;
+ case 0xc2e8: runendseq(context); break;
+ case 0xc2ec: loadintroroom(context); break;
+ case 0xc2f0: mode640x480(context); break;
+ case 0xc2f4: set16colpalette(context); break;
+ case 0xc2f8: realcredits(context); break;
+ case 0xc2fc: printchar(context); break;
+ case 0xc300: kernchars(context); break;
+ case 0xc304: printslow(context); break;
+ case 0xc308: waitframes(context); break;
+ case 0xc30c: printboth(context); break;
+ case 0xc310: printdirect(context); break;
+ case 0xc314: monprint(context); break;
+ case 0xc318: getnumber(context); break;
+ case 0xc31c: getnextword(context); break;
+ case 0xc320: modifychar(context); break;
+ case 0xc324: fillryan(context); break;
+ case 0xc328: fillopen(context); break;
+ case 0xc32c: findallryan(context); break;
+ case 0xc330: findallopen(context); break;
+ case 0xc334: obtoinv(context); break;
+ case 0xc338: isitworn(context); break;
+ case 0xc33c: makeworn(context); break;
+ case 0xc340: examineob(context); break;
+ case 0xc344: makemainscreen(context); break;
+ case 0xc348: getbackfromob(context); break;
+ case 0xc34c: incryanpage(context); break;
+ case 0xc350: openinv(context); break;
+ case 0xc354: showryanpage(context); break;
+ case 0xc358: openob(context); break;
+ case 0xc35c: obicons(context); break;
+ case 0xc360: examicon(context); break;
+ case 0xc364: obpicture(context); break;
+ case 0xc368: describeob(context); break;
+ case 0xc36c: additionaltext(context); break;
+ case 0xc370: obsthatdothings(context); break;
+ case 0xc374: getobtextstart(context); break;
+ case 0xc378: searchforsame(context); break;
+ case 0xc37c: findnextcolon(context); break;
+ case 0xc380: inventory(context); break;
+ case 0xc384: setpickup(context); break;
+ case 0xc388: examinventory(context); break;
+ case 0xc38c: reexfrominv(context); break;
+ case 0xc390: reexfromopen(context); break;
+ case 0xc394: swapwithinv(context); break;
+ case 0xc398: swapwithopen(context); break;
+ case 0xc39c: intoinv(context); break;
+ case 0xc3a0: deletetaken(context); break;
+ case 0xc3a4: outofinv(context); break;
+ case 0xc3a8: getfreead(context); break;
+ case 0xc3ac: getexad(context); break;
+ case 0xc3b0: geteitherad(context); break;
+ case 0xc3b4: getanyad(context); break;
+ case 0xc3b8: getanyaddir(context); break;
+ case 0xc3bc: getopenedsize(context); break;
+ case 0xc3c0: getsetad(context); break;
+ case 0xc3c4: findinvpos(context); break;
+ case 0xc3c8: findopenpos(context); break;
+ case 0xc3cc: dropobject(context); break;
+ case 0xc3d0: droperror(context); break;
+ case 0xc3d4: cantdrop(context); break;
+ case 0xc3d8: wornerror(context); break;
+ case 0xc3dc: removeobfrominv(context); break;
+ case 0xc3e0: selectopenob(context); break;
+ case 0xc3e4: useopened(context); break;
+ case 0xc3e8: errormessage1(context); break;
+ case 0xc3ec: errormessage2(context); break;
+ case 0xc3f0: errormessage3(context); break;
+ case 0xc3f4: checkobjectsize(context); break;
+ case 0xc3f8: outofopen(context); break;
+ case 0xc3fc: transfertoex(context); break;
+ case 0xc400: pickupconts(context); break;
+ case 0xc404: transfercontoex(context); break;
+ case 0xc408: transfertext(context); break;
+ case 0xc40c: getexpos(context); break;
+ case 0xc410: purgealocation(context); break;
+ case 0xc414: emergencypurge(context); break;
+ case 0xc418: purgeanitem(context); break;
+ case 0xc41c: deleteexobject(context); break;
+ case 0xc420: deleteexframe(context); break;
+ case 0xc424: deleteextext(context); break;
+ case 0xc428: blockget(context); break;
+ case 0xc42c: drawfloor(context); break;
+ case 0xc430: calcmapad(context); break;
+ case 0xc434: getdimension(context); break;
+ case 0xc438: addalong(context); break;
+ case 0xc43c: addlength(context); break;
+ case 0xc440: drawflags(context); break;
+ case 0xc444: eraseoldobs(context); break;
+ case 0xc448: showallobs(context); break;
+ case 0xc44c: makebackob(context); break;
+ case 0xc450: showallfree(context); break;
+ case 0xc454: showallex(context); break;
+ case 0xc458: calcfrframe(context); break;
+ case 0xc45c: finalframe(context); break;
+ case 0xc460: adjustlen(context); break;
+ case 0xc464: getmapad(context); break;
+ case 0xc468: getxad(context); break;
+ case 0xc46c: getyad(context); break;
+ case 0xc470: autolook(context); break;
+ case 0xc474: look(context); break;
+ case 0xc478: dolook(context); break;
+ case 0xc47c: redrawmainscrn(context); break;
+ case 0xc480: getback1(context); break;
+ case 0xc484: talk(context); break;
+ case 0xc488: convicons(context); break;
+ case 0xc48c: getpersframe(context); break;
+ case 0xc490: starttalk(context); break;
+ case 0xc494: getpersontext(context); break;
+ case 0xc498: moretalk(context); break;
+ case 0xc49c: dosometalk(context); break;
+ case 0xc4a0: hangonpq(context); break;
+ case 0xc4a4: redes(context); break;
+ case 0xc4a8: newplace(context); break;
+ case 0xc4ac: selectlocation(context); break;
+ case 0xc4b0: showcity(context); break;
+ case 0xc4b4: lookatplace(context); break;
+ case 0xc4b8: getundercentre(context); break;
+ case 0xc4bc: putundercentre(context); break;
+ case 0xc4c0: locationpic(context); break;
+ case 0xc4c4: getdestinfo(context); break;
+ case 0xc4c8: showarrows(context); break;
+ case 0xc4cc: nextdest(context); break;
+ case 0xc4d0: lastdest(context); break;
+ case 0xc4d4: destselect(context); break;
+ case 0xc4d8: getlocation(context); break;
+ case 0xc4dc: setlocation(context); break;
+ case 0xc4e0: resetlocation(context); break;
+ case 0xc4e4: readdesticon(context); break;
+ case 0xc4e8: readcitypic(context); break;
+ case 0xc4ec: usemon(context); break;
+ case 0xc4f0: printoutermon(context); break;
+ case 0xc4f4: loadpersonal(context); break;
+ case 0xc4f8: loadnews(context); break;
+ case 0xc4fc: loadcart(context); break;
+ case 0xc500: lookininterface(context); break;
+ case 0xc504: turnonpower(context); break;
+ case 0xc508: randomaccess(context); break;
+ case 0xc50c: powerlighton(context); break;
+ case 0xc510: powerlightoff(context); break;
+ case 0xc514: accesslighton(context); break;
+ case 0xc518: accesslightoff(context); break;
+ case 0xc51c: locklighton(context); break;
+ case 0xc520: locklightoff(context); break;
+ case 0xc524: input(context); break;
+ case 0xc528: makecaps(context); break;
+ case 0xc52c: delchar(context); break;
+ case 0xc530: execcommand(context); break;
+ case 0xc534: neterror(context); break;
+ case 0xc538: dircom(context); break;
+ case 0xc53c: searchforfiles(context); break;
+ case 0xc540: signon(context); break;
+ case 0xc544: showkeys(context); break;
+ case 0xc548: read(context); break;
+ case 0xc54c: dirfile(context); break;
+ case 0xc550: getkeyandlogo(context); break;
+ case 0xc554: searchforstring(context); break;
+ case 0xc558: parser(context); break;
+ case 0xc55c: scrollmonitor(context); break;
+ case 0xc560: lockmon(context); break;
+ case 0xc564: monitorlogo(context); break;
+ case 0xc568: printlogo(context); break;
+ case 0xc56c: showcurrentfile(context); break;
+ case 0xc570: monmessage(context); break;
+ case 0xc574: processtrigger(context); break;
+ case 0xc578: triggermessage(context); break;
+ case 0xc57c: printcurs(context); break;
+ case 0xc580: delcurs(context); break;
+ case 0xc584: useobject(context); break;
+ case 0xc588: useroutine(context); break;
+ case 0xc58c: wheelsound(context); break;
+ case 0xc590: runtap(context); break;
+ case 0xc594: playguitar(context); break;
+ case 0xc598: hotelcontrol(context); break;
+ case 0xc59c: hotelbell(context); break;
+ case 0xc5a0: opentomb(context); break;
+ case 0xc5a4: usetrainer(context); break;
+ case 0xc5a8: nothelderror(context); break;
+ case 0xc5ac: usepipe(context); break;
+ case 0xc5b0: usefullcart(context); break;
+ case 0xc5b4: useplinth(context); break;
+ case 0xc5b8: chewy(context); break;
+ case 0xc5bc: useladder(context); break;
+ case 0xc5c0: useladderb(context); break;
+ case 0xc5c4: slabdoora(context); break;
+ case 0xc5c8: slabdoorb(context); break;
+ case 0xc5cc: slabdoord(context); break;
+ case 0xc5d0: slabdoorc(context); break;
+ case 0xc5d4: slabdoore(context); break;
+ case 0xc5d8: slabdoorf(context); break;
+ case 0xc5dc: useslab(context); break;
+ case 0xc5e0: usecart(context); break;
+ case 0xc5e4: useclearbox(context); break;
+ case 0xc5e8: usecoveredbox(context); break;
+ case 0xc5ec: userailing(context); break;
+ case 0xc5f0: useopenbox(context); break;
+ case 0xc5f4: wearwatch(context); break;
+ case 0xc5f8: wearshades(context); break;
+ case 0xc5fc: sitdowninbar(context); break;
+ case 0xc600: usechurchhole(context); break;
+ case 0xc604: usehole(context); break;
+ case 0xc608: usealtar(context); break;
+ case 0xc60c: opentvdoor(context); break;
+ case 0xc610: usedryer(context); break;
+ case 0xc614: openlouis(context); break;
+ case 0xc618: nextcolon(context); break;
+ case 0xc61c: openyourneighbour(context); break;
+ case 0xc620: usewindow(context); break;
+ case 0xc624: usebalcony(context); break;
+ case 0xc628: openryan(context); break;
+ case 0xc62c: openpoolboss(context); break;
+ case 0xc630: openeden(context); break;
+ case 0xc634: opensarters(context); break;
+ case 0xc638: isitright(context); break;
+ case 0xc63c: drawitall(context); break;
+ case 0xc640: openhoteldoor(context); break;
+ case 0xc644: openhoteldoor2(context); break;
+ case 0xc648: grafittidoor(context); break;
+ case 0xc64c: trapdoor(context); break;
+ case 0xc650: callhotellift(context); break;
+ case 0xc654: calledenslift(context); break;
+ case 0xc658: calledensdlift(context); break;
+ case 0xc65c: usepoolreader(context); break;
+ case 0xc660: uselighter(context); break;
+ case 0xc664: showseconduse(context); break;
+ case 0xc668: usecardreader1(context); break;
+ case 0xc66c: usecardreader2(context); break;
+ case 0xc670: usecardreader3(context); break;
+ case 0xc674: usecashcard(context); break;
+ case 0xc678: lookatcard(context); break;
+ case 0xc67c: moneypoke(context); break;
+ case 0xc680: usecontrol(context); break;
+ case 0xc684: usehatch(context); break;
+ case 0xc688: usewire(context); break;
+ case 0xc68c: usehandle(context); break;
+ case 0xc690: useelevator1(context); break;
+ case 0xc694: showfirstuse(context); break;
+ case 0xc698: useelevator3(context); break;
+ case 0xc69c: useelevator4(context); break;
+ case 0xc6a0: useelevator2(context); break;
+ case 0xc6a4: useelevator5(context); break;
+ case 0xc6a8: usekey(context); break;
+ case 0xc6ac: usestereo(context); break;
+ case 0xc6b0: usecooker(context); break;
+ case 0xc6b4: useaxe(context); break;
+ case 0xc6b8: useelvdoor(context); break;
+ case 0xc6bc: withwhat(context); break;
+ case 0xc6c0: selectob(context); break;
+ case 0xc6c4: compare(context); break;
+ case 0xc6c8: findsetobject(context); break;
+ case 0xc6cc: findexobject(context); break;
+ case 0xc6d0: isryanholding(context); break;
+ case 0xc6d4: checkinside(context); break;
+ case 0xc6d8: usetext(context); break;
+ case 0xc6dc: putbackobstuff(context); break;
+ case 0xc6e0: showpuztext(context); break;
+ case 0xc6e4: findpuztext(context); break;
+ case 0xc6e8: placesetobject(context); break;
+ case 0xc6ec: removesetobject(context); break;
+ case 0xc6f0: issetobonmap(context); break;
+ case 0xc6f4: placefreeobject(context); break;
+ case 0xc6f8: removefreeobject(context); break;
+ case 0xc6fc: findormake(context); break;
+ case 0xc700: switchryanon(context); break;
+ case 0xc704: switchryanoff(context); break;
+ case 0xc708: setallchanges(context); break;
+ case 0xc70c: dochange(context); break;
+ case 0xc710: autoappear(context); break;
+ case 0xc714: getundertimed(context); break;
+ case 0xc718: putundertimed(context); break;
+ case 0xc71c: dumptimedtext(context); break;
+ case 0xc720: setuptimeduse(context); break;
+ case 0xc724: setuptimedtemp(context); break;
+ case 0xc728: usetimedtext(context); break;
+ case 0xc72c: edenscdplayer(context); break;
+ case 0xc730: usewall(context); break;
+ case 0xc734: usechurchgate(context); break;
+ case 0xc738: usegun(context); break;
+ case 0xc73c: useshield(context); break;
+ case 0xc740: usebuttona(context); break;
+ case 0xc744: useplate(context); break;
+ case 0xc748: usewinch(context); break;
+ case 0xc74c: entercode(context); break;
+ case 0xc750: loadkeypad(context); break;
+ case 0xc754: quitkey(context); break;
+ case 0xc758: addtopresslist(context); break;
+ case 0xc75c: buttonone(context); break;
+ case 0xc760: buttontwo(context); break;
+ case 0xc764: buttonthree(context); break;
+ case 0xc768: buttonfour(context); break;
+ case 0xc76c: buttonfive(context); break;
+ case 0xc770: buttonsix(context); break;
+ case 0xc774: buttonseven(context); break;
+ case 0xc778: buttoneight(context); break;
+ case 0xc77c: buttonnine(context); break;
+ case 0xc780: buttonnought(context); break;
+ case 0xc784: buttonenter(context); break;
+ case 0xc788: buttonpress(context); break;
+ case 0xc78c: showouterpad(context); break;
+ case 0xc790: showkeypad(context); break;
+ case 0xc794: singlekey(context); break;
+ case 0xc798: dumpkeypad(context); break;
+ case 0xc79c: usemenu(context); break;
+ case 0xc7a0: dumpmenu(context); break;
+ case 0xc7a4: getundermenu(context); break;
+ case 0xc7a8: putundermenu(context); break;
+ case 0xc7ac: showoutermenu(context); break;
+ case 0xc7b0: showmenu(context); break;
+ case 0xc7b4: loadmenu(context); break;
+ case 0xc7b8: viewfolder(context); break;
+ case 0xc7bc: nextfolder(context); break;
+ case 0xc7c0: folderhints(context); break;
+ case 0xc7c4: lastfolder(context); break;
+ case 0xc7c8: loadfolder(context); break;
+ case 0xc7cc: showfolder(context); break;
+ case 0xc7d0: folderexit(context); break;
+ case 0xc7d4: showleftpage(context); break;
+ case 0xc7d8: showrightpage(context); break;
+ case 0xc7dc: entersymbol(context); break;
+ case 0xc7e0: quitsymbol(context); break;
+ case 0xc7e4: settopleft(context); break;
+ case 0xc7e8: settopright(context); break;
+ case 0xc7ec: setbotleft(context); break;
+ case 0xc7f0: setbotright(context); break;
+ case 0xc7f4: dumpsymbol(context); break;
+ case 0xc7f8: showsymbol(context); break;
+ case 0xc7fc: nextsymbol(context); break;
+ case 0xc800: updatesymboltop(context); break;
+ case 0xc804: updatesymbolbot(context); break;
+ case 0xc808: dumpsymbox(context); break;
+ case 0xc80c: usediary(context); break;
+ case 0xc810: showdiary(context); break;
+ case 0xc814: showdiarykeys(context); break;
+ case 0xc818: dumpdiarykeys(context); break;
+ case 0xc81c: diarykeyp(context); break;
+ case 0xc820: diarykeyn(context); break;
+ case 0xc824: showdiarypage(context); break;
+ case 0xc828: findtext1(context); break;
+ case 0xc82c: zoomonoff(context); break;
+ case 0xc830: saveload(context); break;
+ case 0xc834: dosaveload(context); break;
+ case 0xc838: getbackfromops(context); break;
+ case 0xc83c: showmainops(context); break;
+ case 0xc840: showdiscops(context); break;
+ case 0xc844: loadsavebox(context); break;
+ case 0xc848: loadgame(context); break;
+ case 0xc84c: getbacktoops(context); break;
+ case 0xc850: discops(context); break;
+ case 0xc854: savegame(context); break;
+ case 0xc858: actualsave(context); break;
+ case 0xc85c: actualload(context); break;
+ case 0xc860: selectslot2(context); break;
+ case 0xc864: checkinput(context); break;
+ case 0xc868: getnamepos(context); break;
+ case 0xc86c: showopbox(context); break;
+ case 0xc870: showloadops(context); break;
+ case 0xc874: showsaveops(context); break;
+ case 0xc878: selectslot(context); break;
+ case 0xc87c: showslots(context); break;
+ case 0xc880: shownames(context); break;
+ case 0xc884: dosreturn(context); break;
+ case 0xc888: error(context); break;
+ case 0xc88c: namestoold(context); break;
+ case 0xc890: oldtonames(context); break;
+ case 0xc894: saveposition(context); break;
+ case 0xc898: loadposition(context); break;
+ case 0xc89c: loadseg(context); break;
+ case 0xc8a0: makeheader(context); break;
+ case 0xc8a4: storeit(context); break;
+ case 0xc8a8: saveseg(context); break;
+ case 0xc8ac: findlen(context); break;
+ case 0xc8b0: scanfornames(context); break;
+ case 0xc8b4: decide(context); break;
+ case 0xc8b8: showdecisions(context); break;
+ case 0xc8bc: newgame(context); break;
+ case 0xc8c0: loadold(context); break;
+ case 0xc8c4: loadspeech(context); break;
+ case 0xc8c8: createname(context); break;
+ case 0xc8cc: loadsample(context); break;
+ case 0xc8d0: loadsecondsample(context); break;
+ case 0xc8d4: soundstartup(context); break;
+ case 0xc8d8: trysoundalloc(context); break;
+ case 0xc8dc: setsoundoff(context); break;
+ case 0xc8e0: checksoundint(context); break;
+ case 0xc8e4: enablesoundint(context); break;
+ case 0xc8e8: disablesoundint(context); break;
+ case 0xc8ec: interupttest(context); break;
+ case 0xc8f0: soundend(context); break;
+ case 0xc8f4: out22c(context); break;
+ case 0xc8f8: playchannel0(context); break;
+ case 0xc8fc: playchannel1(context); break;
+ case 0xc900: makenextblock(context); break;
+ case 0xc904: volumeadjust(context); break;
+ case 0xc908: loopchannel0(context); break;
+ case 0xc90c: cancelch0(context); break;
+ case 0xc910: cancelch1(context); break;
+ case 0xc914: channel0only(context); break;
+ case 0xc918: channel1only(context); break;
+ case 0xc91c: channel0tran(context); break;
+ case 0xc920: bothchannels(context); break;
+ case 0xc924: saveems(context); break;
+ case 0xc928: restoreems(context); break;
+ case 0xc92c: domix(context); break;
+ case 0xc930: dmaend(context); break;
+ case 0xc934: startdmablock(context); break;
+ case 0xc938: setuppit(context); break;
+ case 0xc93c: getridofpit(context); break;
+ case 0xc940: pitinterupt(context); break;
+ case 0xc944: dreamweb(context); break;
+ case 0xc948: entrytexts(context); break;
+ case 0xc94c: entryanims(context); break;
+ case 0xc950: initialinv(context); break;
+ case 0xc954: pickupob(context); break;
+ case 0xc958: setupemm(context); break;
+ case 0xc95c: removeemm(context); break;
+ case 0xc960: checkforemm(context); break;
+ case 0xc964: checkbasemem(context); break;
+ case 0xc968: allocatebuffers(context); break;
+ case 0xc96c: clearbuffers(context); break;
+ case 0xc970: clearchanges(context); break;
+ case 0xc974: clearbeforeload(context); break;
+ case 0xc978: clearreels(context); break;
+ case 0xc97c: clearrest(context); break;
+ case 0xc980: deallocatemem(context); break;
+ case 0xc984: allocatemem(context); break;
+ case 0xc988: seecommandtail(context); break;
+ case 0xc98c: parseblaster(context); break;
+ case 0xc990: startup(context); break;
+ case 0xc994: startup1(context); break;
+ case 0xc998: screenupdate(context); break;
+ case 0xc99c: watchreel(context); break;
+ case 0xc9a0: checkforshake(context); break;
+ case 0xc9a4: watchcount(context); break;
+ case 0xc9a8: showtime(context); break;
+ case 0xc9ac: dumpwatch(context); break;
+ case 0xc9b0: showbyte(context); break;
+ case 0xc9b4: onedigit(context); break;
+ case 0xc9b8: twodigitnum(context); break;
+ case 0xc9bc: showword(context); break;
+ case 0xc9c0: convnum(context); break;
+ case 0xc9c4: mainscreen(context); break;
+ case 0xc9c8: madmanrun(context); break;
+ case 0xc9cc: checkcoords(context); break;
+ case 0xc9d0: identifyob(context); break;
+ case 0xc9d4: checkifperson(context); break;
+ case 0xc9d8: checkifset(context); break;
+ case 0xc9dc: checkifex(context); break;
+ case 0xc9e0: checkiffree(context); break;
+ case 0xc9e4: isitdescribed(context); break;
+ case 0xc9e8: findpathofpoint(context); break;
+ case 0xc9ec: findfirstpath(context); break;
+ case 0xc9f0: turnpathon(context); break;
+ case 0xc9f4: turnpathoff(context); break;
+ case 0xc9f8: turnanypathon(context); break;
+ case 0xc9fc: turnanypathoff(context); break;
+ case 0xca00: checkifpathison(context); break;
+ case 0xca04: afternewroom(context); break;
+ case 0xca08: atmospheres(context); break;
+ case 0xca0c: walkintoroom(context); break;
+ case 0xca10: afterintroroom(context); break;
+ case 0xca14: obname(context); break;
+ case 0xca18: finishedwalking(context); break;
+ case 0xca1c: examineobtext(context); break;
+ case 0xca20: commandwithob(context); break;
+ case 0xca24: commandonly(context); break;
+ case 0xca28: printmessage(context); break;
+ case 0xca2c: printmessage2(context); break;
+ case 0xca30: blocknametext(context); break;
+ case 0xca34: personnametext(context); break;
+ case 0xca38: walktotext(context); break;
+ case 0xca3c: getflagunderp(context); break;
+ case 0xca40: setwalk(context); break;
+ case 0xca44: autosetwalk(context); break;
+ case 0xca48: checkdest(context); break;
+ case 0xca4c: bresenhams(context); break;
+ case 0xca50: workoutframes(context); break;
+ case 0xca54: getroomspaths(context); break;
+ case 0xca58: copyname(context); break;
+ case 0xca5c: findobname(context); break;
+ case 0xca60: showicon(context); break;
+ case 0xca64: middlepanel(context); break;
+ case 0xca68: showman(context); break;
+ case 0xca6c: showpanel(context); break;
+ case 0xca70: roomname(context); break;
+ case 0xca74: usecharset1(context); break;
+ case 0xca78: usetempcharset(context); break;
+ case 0xca7c: showexit(context); break;
+ case 0xca80: panelicons1(context); break;
+ case 0xca84: showwatch(context); break;
+ case 0xca88: gettime(context); break;
+ case 0xca8c: zoomicon(context); break;
+ case 0xca90: showblink(context); break;
+ case 0xca94: dumpblink(context); break;
+ case 0xca98: worktoscreenm(context); break;
+ case 0xca9c: blank(context); break;
+ case 0xcaa0: allpointer(context); break;
+ case 0xcaa4: hangonp(context); break;
+ case 0xcaa8: hangonw(context); break;
+ case 0xcaac: hangoncurs(context); break;
+ case 0xcab0: getunderzoom(context); break;
+ case 0xcab4: dumpzoom(context); break;
+ case 0xcab8: putunderzoom(context); break;
+ case 0xcabc: crosshair(context); break;
+ case 0xcac0: showpointer(context); break;
+ case 0xcac4: delpointer(context); break;
+ case 0xcac8: dumppointer(context); break;
+ case 0xcacc: undertextline(context); break;
+ case 0xcad0: deltextline(context); break;
+ case 0xcad4: dumptextline(context); break;
+ case 0xcad8: animpointer(context); break;
+ case 0xcadc: setmouse(context); break;
+ case 0xcae0: readmouse(context); break;
+ case 0xcae4: mousecall(context); break;
+ case 0xcae8: readmouse1(context); break;
+ case 0xcaec: readmouse2(context); break;
+ case 0xcaf0: readmouse3(context); break;
+ case 0xcaf4: readmouse4(context); break;
+ case 0xcaf8: readkey(context); break;
+ case 0xcafc: convertkey(context); break;
+ case 0xcb00: randomnum1(context); break;
+ case 0xcb04: randomnum2(context); break;
+ case 0xcb0c: hangon(context); break;
+ case 0xcb10: loadtraveltext(context); break;
+ case 0xcb14: loadintotemp(context); break;
+ case 0xcb18: loadintotemp2(context); break;
+ case 0xcb1c: loadintotemp3(context); break;
+ case 0xcb20: loadtempcharset(context); break;
+ case 0xcb24: standardload(context); break;
+ case 0xcb28: loadtemptext(context); break;
+ case 0xcb2c: loadroom(context); break;
+ case 0xcb30: loadroomssample(context); break;
+ case 0xcb34: getridofreels(context); break;
+ case 0xcb38: getridofall(context); break;
+ case 0xcb3c: restorereels(context); break;
+ case 0xcb40: restoreall(context); break;
+ case 0xcb44: sortoutmap(context); break;
+ case 0xcb48: startloading(context); break;
+ case 0xcb4c: disablepath(context); break;
+ case 0xcb50: findxyfrompath(context); break;
+ case 0xcb54: findroominloc(context); break;
+ case 0xcb58: getroomdata(context); break;
+ case 0xcb5c: readheader(context); break;
+ case 0xcb60: dontloadseg(context); break;
+ case 0xcb64: allocateload(context); break;
+ case 0xcb68: fillspace(context); break;
+ case 0xcb6c: getridoftemp(context); break;
+ case 0xcb70: getridoftemptext(context); break;
+ case 0xcb74: getridoftemp2(context); break;
+ case 0xcb78: getridoftemp3(context); break;
+ case 0xcb7c: getridoftempcharset(context); break;
+ case 0xcb80: getridoftempsp(context); break;
+ case 0xcb84: readsetdata(context); break;
+ case 0xcb88: createfile(context); break;
+ case 0xcb8c: openfile(context); break;
+ case 0xcb90: openfilenocheck(context); break;
+ case 0xcb94: openforsave(context); break;
+ case 0xcb98: closefile(context); break;
+ case 0xcb9c: readfromfile(context); break;
+ case 0xcba0: setkeyboardint(context); break;
+ case 0xcba4: resetkeyboard(context); break;
+ case 0xcba8: keyboardread(context); break;
+ case 0xcbac: walkandexamine(context); break;
+ case 0xcbb0: doload(context); break;
+ case 0xcbb4: generalerror(context); break;
+
+ }
+}
+
+} /*namespace*/
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
new file mode 100644
index 0000000000..6f20136252
--- /dev/null
+++ b/engines/dreamweb/dreamgen.h
@@ -0,0 +1,78 @@
+#ifndef TASMRECOVER_DREAMGEN_STUBS_H__
+#define TASMRECOVER_DREAMGEN_STUBS_H__
+
+# include "runtime.h"
+
+namespace dreamgen {
+
+ struct Data : public Segment {
+ Data();
+ };
+
+
+ typedef RegisterContext<Data> Context;
+
+ void __dispatch_call(Context &context, unsigned addr);
+
+ void randomnumber(Context &context);
+ void dreamweb(Context &context);
+ void resetkeyboard(Context &context);
+ void removeemm(Context &context);
+ void soundend(Context &context);
+ void disablesoundint(Context &context);
+ void out22c(Context &context);
+ void getridofpit(Context &context);
+ void deallocatemem(Context &context);
+ void vsync(Context &context);
+ void closefile(Context &context);
+ void readfromfile(Context &context);
+ void allocatemem(Context &context);
+ void openfile(Context &context);
+ void loadsecondsample(Context &context);
+ void mousecall(Context &context);
+ void loadseg(Context &context);
+ void dontloadseg(Context &context);
+ void showgroup(Context &context);
+ void showpcx(Context &context);
+ void mode640x480(Context &context);
+ void setmode(Context &context);
+ void scanfornames(Context &context);
+ void openfilenocheck(Context &context);
+ void setsoundoff(Context &context);
+ void loadsample(Context &context);
+ void set16colpalette(Context &context);
+ void gettime(Context &context);
+ void fadedos(Context &context);
+ void setmouse(Context &context);
+ void setupemm(Context &context);
+ void setkeyboardint(Context &context);
+ void soundstartup(Context &context);
+ void checkbasemem(Context &context);
+ void keyboardread(Context &context);
+ void openforsave(Context &context);
+ void createfile(Context &context);
+ void pitinterupt(Context &context);
+ void setuppit(Context &context);
+ void startdmablock(Context &context);
+ void dmaend(Context &context);
+ void restoreems(Context &context);
+ void saveems(Context &context);
+ void bothchannels(Context &context);
+ void channel1only(Context &context);
+ void channel0only(Context &context);
+ void interupttest(Context &context);
+ void enablesoundint(Context &context);
+ void checksoundint(Context &context);
+ void loadspeech(Context &context);
+ void saveseg(Context &context);
+ void loadposition(Context &context);
+ void saveposition(Context &context);
+ void error(Context &context);
+ void generalerror(Context &context);
+ void dosreturn(Context &context);
+ void doshake(Context &context);
+ void readoneblock(Context &context);
+
+}
+
+#endif
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
new file mode 100644
index 0000000000..ec3c9992a3
--- /dev/null
+++ b/engines/dreamweb/dreamweb.cpp
@@ -0,0 +1,131 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://svn.scummvm.org:4444/svn/dreamweb/dreamweb.cpp $
+ * $Id: dreamweb.cpp 79 2011-06-05 08:26:54Z eriktorbjorn $
+ *
+ */
+
+#include "common/config-manager.h"
+#include "common/debug-channels.h"
+#include "common/events.h"
+#include "common/EventRecorder.h"
+#include "common/file.h"
+#include "common/func.h"
+#include "common/iff_container.h"
+#include "common/system.h"
+#include "common/timer.h"
+
+#include "engines/util.h"
+
+#include "audio/mixer.h"
+
+#include "graphics/palette.h"
+
+#include "dreamweb/dreamweb.h"
+
+namespace DreamWeb {
+
+DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
+ // Setup mixer
+ _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume"));
+ _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
+ _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume"));
+
+ _rnd = new Common::RandomSource("dreamweb");
+
+ _vSyncInterrupt = false;
+
+ _console = 0;
+ DebugMan.addDebugChannel(kDebugAnimation, "Animation", "Animation Debug Flag");
+ DebugMan.addDebugChannel(kDebugSaveLoad, "SaveLoad", "Track Save/Load Function");
+}
+
+DreamWebEngine::~DreamWebEngine() {
+ DebugMan.clearAllDebugChannels();
+ delete _console;
+ delete _rnd;
+}
+
+// Let's see if it's a good idea to emulate VSYNC interrupts with a timer like
+// this. There's a chance we'll miss interrupts, which could be countered by
+// counting them instead of just flagging them, but we'll see...
+
+static void vSyncInterrupt(void *refCon) {
+ DreamWebEngine *vm = (DreamWebEngine *)refCon;
+
+ if (!vm->isPaused()) {
+ vm->setVSyncInterrupt(true);
+ }
+}
+
+void DreamWebEngine::setVSyncInterrupt(bool flag) {
+ _vSyncInterrupt = flag;
+}
+
+void DreamWebEngine::waitForVSync() {
+ while (!_vSyncInterrupt) {
+ _system->delayMillis(10);
+ }
+ setVSyncInterrupt(false);
+ // doshake
+ // dofade
+}
+
+Common::Error DreamWebEngine::run() {
+ _console = new DreamWebConsole(this);
+
+ Common::EventManager *event_manager = _system->getEventManager();
+ getTimerManager()->installTimerProc(vSyncInterrupt, 1000000 / 60, this);
+
+ do {
+ uint32 frame_time = _system->getMillis();
+ Common::Event event;
+ while (event_manager->pollEvent(event)) {
+ switch(event.type) {
+ case Common::EVENT_RTL:
+ return Common::kNoError;
+ case Common::EVENT_MOUSEMOVE:
+ _mouse = event.mouse;
+ break;
+ case Common::EVENT_KEYDOWN:
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_d:
+ if (event.kbd.flags & Common::KBD_CTRL) {
+ _console->attach();
+ _console->onFrame();
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ debug(0, "skipped event type %d", event.type);
+ }
+ }
+ } while (!shouldQuit());
+
+ getTimerManager()->removeTimerProc(vSyncInterrupt);
+
+ return Common::kNoError;
+}
+
+} // End of namespace DreamWeb
diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h
new file mode 100644
index 0000000000..2bff384f18
--- /dev/null
+++ b/engines/dreamweb/dreamweb.h
@@ -0,0 +1,83 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://svn.scummvm.org:4444/svn/dreamweb/dreamweb.h $
+ * $Id: dreamweb.h 77 2011-05-18 14:26:43Z digitall $
+ *
+ */
+
+#ifndef DREAMWEB_H
+#define DREAMWEB_H
+
+#include "common/scummsys.h"
+#include "common/random.h"
+#include "common/rect.h"
+#include "common/error.h"
+
+#include "engines/engine.h"
+#include "dreamweb/console.h"
+
+namespace Graphics {
+ class Surface;
+}
+
+namespace DreamWeb {
+
+// Engine Debug Flags
+enum {
+ kDebugAnimation = (1 << 0),
+ kDebugSaveLoad = (1 << 1)
+};
+
+struct DreamWebGameDescription;
+
+class DreamWebEngine : public Engine {
+private:
+ DreamWebConsole *_console;
+ bool _vSyncInterrupt;
+
+protected:
+ // Engine APIs
+ virtual Common::Error run();
+ virtual bool hasFeature(EngineFeature f) const;
+
+public:
+ DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gameDesc);
+ virtual ~DreamWebEngine();
+
+ void setVSyncInterrupt(bool flag);
+ void waitForVSync();
+
+ Common::Error loadGameState(int slot);
+ Common::Error saveGameState(int slot, const char *desc);
+
+ bool canLoadGameStateCurrently();
+ bool canSaveGameStateCurrently();
+
+ const DreamWebGameDescription *_gameDescription;
+
+ Common::RandomSource *_rnd;
+
+ Common::Point _mouse;
+};
+
+} // End of namespace DreamWeb
+
+#endif
diff --git a/engines/dreamweb/module.mk b/engines/dreamweb/module.mk
new file mode 100644
index 0000000000..d39270bde6
--- /dev/null
+++ b/engines/dreamweb/module.mk
@@ -0,0 +1,15 @@
+MODULE := engines/dreamweb
+
+MODULE_OBJS := \
+ console.o \
+ detection.o \
+ dreamweb.o \
+ dreamgen.o
+
+# This module can be built as a plugin
+ifeq ($(ENABLE_DREAMWEB), DYNAMIC_PLUGIN)
+PLUGIN := 1
+endif
+
+# Include common rules
+include $(srcdir)/rules.mk
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
new file mode 100644
index 0000000000..5824728283
--- /dev/null
+++ b/engines/dreamweb/runtime.h
@@ -0,0 +1,330 @@
+#ifndef TASM_RECOVER_H__
+#define TASM_RECOVER_H__
+
+#include <stdint.h>
+#include <assert.h>
+#include <vector>
+
+typedef uint16_t uint16;
+typedef uint8_t uint8;
+typedef int16_t int16;
+typedef int8_t int8;
+
+//little endian
+#define REG_LOW 0
+#define REG_HIGH 1
+
+struct Register {
+ union {
+ uint16 _value;
+ uint8 _part[2];
+ };
+ inline Register(): _value() {}
+ inline Register& operator=(uint16_t v) { _value = v; return *this; }
+ inline operator uint16&() { return _value; }
+ inline void cbw() {
+ if (_value & 0x80)
+ _value |= 0xff00;
+ else
+ _value &= 0xff;
+ }
+};
+
+template<unsigned PART>
+struct RegisterPart {
+ uint8_t &_part;
+
+ inline RegisterPart(Register &reg) : _part(reg._part[PART]) {}
+
+ inline operator uint8&() {
+ return _part;
+ }
+ inline RegisterPart& operator=(const RegisterPart& o) {
+ _part = o._part;
+ return *this;
+ }
+ inline RegisterPart& operator=(uint8_t v) {
+ _part = v;
+ return *this;
+ }
+};
+
+struct WordRef {
+ std::vector<uint8> &data;
+ unsigned index;
+ bool changed;
+ uint16_t value;
+
+ inline WordRef(std::vector<uint8> &data, unsigned index) : data(data), index(index), changed(false) {
+ assert(index + 1 < data.size());
+ value = data[index] | (data[index + 1] << 8);
+ }
+ inline WordRef& operator=(const WordRef &ref) {
+ changed = true;
+ value = ref.value;
+ return *this;
+ }
+ inline WordRef& operator=(uint16_t v) {
+ changed = true;
+ value = v;
+ return *this;
+ }
+ inline operator uint16_t() const {
+ return value;
+ }
+ inline operator uint16_t&() {
+ return value;
+ }
+ inline ~WordRef() {
+ if (changed) {
+ data[index] = value & 0xff;
+ data[index + 1] = value >> 8;
+ }
+ }
+};
+
+struct Segment {
+ std::vector<uint8> data;
+ inline uint8_t &byte(unsigned index) {
+ assert(index < data.size());
+ return data[index];
+ }
+ inline uint16_t word(unsigned index) const {
+ assert(index + 1 < data.size());
+ return data[index] | (data[index + 1] << 8);
+ }
+
+ inline WordRef word(unsigned index) {
+ return WordRef(data, index);
+ }
+};
+
+
+struct SegmentRef {
+ public:
+ uint16_t value;
+ std::vector<uint8> *data;
+ inline SegmentRef& operator=(const SegmentRef &o) {
+ data = o.data;
+ return *this;
+ }
+ inline SegmentRef& operator=(const uint16_t id) {
+ return *this;
+ }
+ inline uint8_t &byte(unsigned index) {
+ assert(index < data->size());
+ return (*data)[index];
+ }
+ inline uint16_t word(unsigned index) const {
+ assert(index + 1 < data->size());
+ return (*data)[index] | ((*data)[index + 1] << 8);
+ }
+
+ inline operator uint16_t() const {
+ return value;
+ }
+
+ inline WordRef word(unsigned index) {
+ return WordRef(*data, index);
+ }
+};
+
+struct Flags {
+ bool _z, _c, _s, _o;
+ inline Flags(): _z(true), _c(false), _s(false), _o(false) {}
+
+ inline bool z() const { return _z; }
+ inline bool c() const { return _c; }
+ inline bool s() const { return _s; }
+ //complex flags:
+ inline bool g() const { return !_z && _s == _o; }
+ inline bool ge() const { return _z || _s == _o; }
+ inline bool l() const { return !_z && _s != _o; }
+ inline bool le() const { return _z || _s != _o; }
+
+ inline void update_sign(uint8 v) {
+ bool s = v & 0x80;
+ _o = s != _s;
+ _s = s;
+ _z = v == 0;
+ }
+
+ inline void update(uint16 v) {
+ bool s = v & 0x8000;
+ _o = s != _s;
+ _s = s;
+ _z = v == 0;
+ }
+};
+
+template<typename Data>
+struct RegisterContext {
+ Register ax, dx, bx, cx, si, di;
+ RegisterPart<REG_LOW> al;
+ RegisterPart<REG_HIGH> ah;
+ RegisterPart<REG_LOW> bl;
+ RegisterPart<REG_HIGH> bh;
+ RegisterPart<REG_LOW> cl;
+ RegisterPart<REG_HIGH> ch;
+ RegisterPart<REG_LOW> dl;
+ RegisterPart<REG_HIGH> dh;
+
+ SegmentRef cs, ds, es;
+ Flags flags;
+
+ inline RegisterContext(): al(ax), ah(ax), bl(bx), bh(bx), cl(cx), ch(cx), dl(dx), dh(dx) {}
+
+ inline void _cmp(uint8 a, uint8 b) {
+ uint8 x = a;
+ _sub(x, b);
+ }
+ inline void _cmp(uint16 a, uint16 b) {
+ uint16 x = a;
+ _sub(x, b);
+ }
+ inline void _test(uint8 a, uint8 b) {
+ uint8 x = a;
+ _and(x, b);
+ }
+ inline void _test(uint16 a, uint16 b) {
+ uint16 x = a;
+ _and(x, b);
+ }
+
+ inline void _add(uint8 &dst, uint8 src) {
+ flags._c = dst + src < dst;
+ dst += src;
+ flags.update(dst);
+ }
+ inline void _add(uint16 &dst, uint16 src) {
+ flags._c = dst + src < dst;
+ dst += src;
+ flags.update(dst);
+ }
+ inline void _sub(uint8 &dst, uint8 src) {
+ flags._c = dst < src;
+ dst -= src;
+ flags.update(dst);
+ }
+ inline void _sub(uint16 &dst, uint16 src) {
+ flags._c = dst < src;
+ dst -= src;
+ flags.update(dst);
+ }
+
+ inline void _and(uint8 &dst, uint8 src) {
+ dst &= src;
+ flags._c = false;
+ flags.update(dst);
+ }
+ inline void _and(uint16 &dst, uint16 src) {
+ dst &= src;
+ flags._c = false;
+ flags.update(dst);
+ }
+ inline void _or(uint8 &dst, uint8 src) {
+ dst |= src;
+ flags._c = false;
+ flags.update(dst);
+ }
+ inline void _or(uint16 &dst, uint16 src) {
+ dst |= src;
+ flags._c = false;
+ flags.update(dst);
+ }
+
+ inline void _xor(uint8 &dst, uint8 src) {
+ dst ^= src;
+ flags._c = false;
+ flags.update(dst);
+ }
+ inline void _xor(uint16 &dst, uint16 src) {
+ dst ^= src;
+ flags._c = false;
+ flags.update(dst);
+ }
+
+ inline void _shr(uint8 &dst, uint8 src) {}
+ inline void _shr(uint16 &dst, uint8 src) {}
+ inline void _shl(uint8 &dst, uint8 src) {}
+ inline void _shl(uint16 &dst, uint8 src) {}
+ inline void _mul(uint8 src) {
+ unsigned r = unsigned(al) * src;
+ ax = (uint16)r;
+ flags._c = r >= 0x10000;
+ flags._z = r == 0;
+ bool s = r & 0x8000;
+ flags._o = s != flags._s;
+ flags._s = s;
+ }
+ inline void _mul(uint16 src) {
+ unsigned r = unsigned(ax) * src; //assuming here that we have at least 32 bits
+ dx = (r >> 16) & 0xffff;
+ ax = r & 0xffff;
+ flags._c = false;//fixme
+ flags._z = r == 0;
+ bool s = r & 0x80000000;
+ flags._o = s != flags._s;
+ flags._s = s;
+ }
+ inline void _neg(uint8 &src) {
+ src = ~src;
+ flags._c = false;
+ flags.update(src);
+ }
+ inline void _neg(uint16 &src) {
+ src = ~src;
+ flags._c = false;
+ flags.update(src);
+ }
+
+ inline void _movsb() {
+ es.byte(di++) = ds.byte(si++);
+ }
+ inline void _movsw() {
+ es.word(di) = ds.word(si);
+ di += 2;
+ si += 2;
+ }
+ inline void _lodsb() {
+ al = ds.byte(si++);
+ }
+ inline void _lodsw() {
+ ax = ds.word(si);
+ si += 2;
+ }
+ inline void _stosb() {
+ es.byte(di++) = al;
+ }
+ inline void _stosw() {
+ es.word(di) = al;
+ di += 2;
+ }
+
+ inline void _xchg(uint16 &a, uint16 &b) {
+ uint16 x = a;
+ a = b;
+ b = x;
+ }
+
+ inline void _xchg(uint8 &a, uint8 &b) {
+ uint8 t = a;
+ a = b;
+ b = t;
+ }
+
+ std::vector<uint16> stack;
+ inline void push(uint16 v) {
+ stack.push_back(v);
+ }
+ inline uint16 pop() {
+ uint16 v = stack.back();
+ stack.pop_back();
+ return v;
+ }
+
+ Data data;
+};
+
+#endif
+
diff --git a/engines/engines.mk b/engines/engines.mk
index f8ff823c13..dc09fbd54e 100644
--- a/engines/engines.mk
+++ b/engines/engines.mk
@@ -46,6 +46,11 @@ DEFINES += -DENABLE_DRASCULA=$(ENABLE_DRASCULA)
MODULES += engines/drascula
endif
+ifdef ENABLE_DREAMWEB
+DEFINES += -DENABLE_DREAMWEB=$(ENABLE_DREAMWEB)
+MODULES += engines/dreamweb
+endif
+
ifdef ENABLE_GOB
DEFINES += -DENABLE_GOB=$(ENABLE_GOB)
MODULES += engines/gob