[Scummvm-cvs-logs] scummvm master -> 624042eedd0f2e86308173c995e9760b4cd8de3f

sev- sev at scummvm.org
Wed Jun 15 18:07:55 CEST 2011


This automated email contains information about 180 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
52a89174ab DREAMWEB: added autogenerated source
51f44779ca DREAMWEB: regenerate sources
181428e65e DREAMWEB: started integration of stubs
1f063c947b DREAMWEB: added stubs
9cf2a7ba0e DREAMWEB: added tasm-recover tool
10c84a81fe DREAMWEB: removed ugly macroses
e3178397ce COMMON: added assign(T*, T*)
d725199ac0 DREAMWEB: 'scummvm'ing types. :)
1f991fa1e4 DREAMWEB: fixed almost all runtime warnings
cc784e9a0c DREAMWEB: removed context template, cleaned up initialization
0b0b22ccc2 DREAMWEB: removed data declaration
4e6483e700 DREAMWEB: removed python generated bytecode
781d06709f DREAMWEB: updated git ignore
1ee6b0af69 DREAMWEB: get rid of data, added simple segment management
61fe610c73 DREAMWEB: fixed default segment addr
a0e56d9cad DREAMWEB: minor cleanup
e4c9ae7a54 COMMON: fixed resize
5b9a40584e DREAMWEB: added stubs for sound startup/exit
59b0c4b4b5 DREAMWEB: added all offsets
b76035db66 DREAMWEB: put data offsets, not labels into public
d9e4fb5d0e DREAMWEB: regenerated code
9d53cefa53 DREAMWEB: added allocateSegment, added some stubs
e94a8299aa DREAMWEB: fixed invalid operator=
40c02f2f7f DREAMWEB: replaced seecommandtail with stub
d4d5c0527e DREAMWEB: implemented some of the stubs
f0b54cec13 DREAMWEB: fixed typo
9e10e8e893 DREAMWEB: minor cleanup
a5e76d6911 DREAMWEB: cleaned up register part mess
222d9b2376 DREAMWEB: fixed stosw instruction
f7de3e8c38 DREAMWEB: simplified register part definition
78cc82a18c DREAMWEB: fixed typo
27210a70b4 DREAMWEB: removed useless const methods, fixed mask
326d5025cc DREAMWEB: removed const method
694c00bd10 DREAMWEB: cleanups
bba7724aec DREAMWEB: added fake data register pointing to variables
1494cdb295 DREAMWEB: added openfile stub
9a1575b9d5 DREAMWEB: implemented openfile
858a898aa7 DREAMWEB: added readfile
ab41fb783d DREAMWEB: fixed equ expanding
6a33ce30f2 DREAMWEB: added close file
08e2316d87 DREAMWEB: more stubs
7e56cc2d91 DREAMWEB: added video segment
59f8d31132 DREAMWEB: fixed offsets shifting for db/dw
5d6be069e9 DREAMWEB: restored open file check in read
6a2ac8728c DREAMWEB: fixed invalid file read length
221a3575a3 DREAMWEB: added mousecall stub
2fa141335d DREAMWEB: fixed release warnings
3595e9b675 DREAMWEB: added shr/shl instructions
35d5ffa85d DREAMWEB: zero cx after showgroup
a07ec818c7 DREAMWEB: added processEvents, added mouse support
af4f0e6b1e DREAMWEB: added graphics mode initialization
28cc856572 DREAMWEB: Unstub gettime().
a1b1d78e69 DREAMWEB: Unstub mode640x480()
a6fb92d230 DREAMWEB: added o flag handling for shr/shl instructions
797127cb65 DREAMWEB: cleared overflow flag on logic instructions
e0eac547cb DREAMWEB: fixed g/l/ge/le flags
978d17454b DREAMWEB: fixed OF flag handling
3bd7cb1902 DREAMWEB: fixed loadfromfile
fe40748d1a DREAMWEB: implemented loadseg
83d7320712 DREAMWEB: fixed bogus logs
a5bd71858b DREAMWEB: Adjusted mode640x480 slightly
bea919c9b4 DREAMWEB: fixed hardcoded offsets
fce91bd196 DREAMWEB: fixed of flag handling
66ee7b20f5 DREAMWEB: removed noisy palette log
4cea3245fe DREAMWEB: First attempt at unstubbing showpcx()
d2688a520b DREAMWEB: removed static from functions for now (allowing external usage)
e654b50632 DREAMWEB: removed generated code
90440a2b68 DREAMWEB: added assertion in pop()
2f9e63579d DREAMWEB: fixed missing explicit segment specification. added verbose data dump to the generator
834816db60 DREAMWEB: fixed loadseg
9717b220f1 DREAMWEB: added names instead of offsets for variables
07ad2efd80 DREAMWEB: fixed invalid register parts update
33bb7c3f72 DREAMWEB: fixed memory deallocation
23736a0240 DREAMWEB: output equ values in log
25a937e156 DREAMWEB: added fadedos
9193f33aad DREAMWEB: replaced movsw with 2*movsb
f7a3a552f3 DREAMWEB: fixed CF for neg instruction
4518719345 DREAMWEB: added 'equ' const to public header
2cb4eac5e0 DREAMWEB: removed hardcoded constant
9b76173573 DREAMWEB: regenerating source
97310ab904 DREAMWEB: asserted invalid calls
8cc8e73d1f DREAMWEB: blacklisted vga blitting functions
4c54bf9799 DREAMWEB: implemented multiXXX vga functions
8a72645c16 DREAMWEB: added setPalette instead of showgroup + framenm
b04f590898 DREAMWEB: added forgotten updateScreen()
e535e6e295 DREAMWEB: added keyboard handling
5c629e3849 DREAMWEB: fixed invalid memcpys
9109f36c04 DREAMWEB: fixed typo in multidump
47ed2ce385 DREAMWEB: Fix typo
038f19dfe9 DREAMWEB: The PCX decode works now.
3f592047bb DREAMWEB: fixed rep prefix
9034191796 DREAMWEB: removed dummy video segment, blacklisted video-related functions.
c8be54bbd8 DREAMWEB: Cleaned up the PCX decoder slightly
d70bc05b8e DREAMWEB: added assertion
fd1360096b DREAMWEB: replace pitch with kScreenwidth
938c14ddac DREAMWEB: increased vga frequency to 70Hz, fixed data segments
d0404f4b61 DREAMWEB: moved palette fixes into set/getPalette
b01af82d09 DREAMWEB: Make it easier to quit (albeit not yet very gracefully)
9b7b93e8ea DREAMWEB: fixed fades and palette setting
3ecd3f9ca1 DREAMWEB: commented out noisy debug
985d2facf2 DREAMWEB: Notice when the user presses ESC.
92e2dc8899 DREAMWEB: cut rendering box to the screen size
3e605f3cc4 DREAMWEB: regenerated sources
53e49d1a50 DREAMWEB: removed unused file
f7b56a0d94 DREAMWEB: fixed OF register handling once again
4ccd7fd791 DREAMWEB: fixed l/le/g/ge condition checks
2bcc06f9ea DREAMWEB: cleanup frameoutnm
99a4bb86dd DREAMWEB: fixed invalid generated jump instructions
8ea7a7a3d1 DREAMWEB: fixed seg XXX construction in generator
7eb8e0bbe7 DREAMWEB: unstubbed dontloadseg
a3e9cef4d0 DREAMWEB: fixed a typo
fdcb21ffee DREAMWEB: Unstub dosreturn().
8ddbbc0c50 DREAMWEB: moved out file write/read from sources
c5ab591b79 DREAMWEB: unstabbed save
f592fe1881 DREAMWEB: unstubbed scanfornames
b673130bf4 DREAMWEB: implemented somewhat hackish read from currently open file
5fda321a80 DREAMWEB: added the same magic for opening files
bd28564594 DREAMWEB: removed ugly static engine
04ee3aefae DREAMWEB: implemented doshake
4ba74f73e1 DREAMWEB: moved quit() into engine's method
1ac23aa858 DREAMWEB: added middle mouse key handling
3f53cb9244 DREAMWEB: removed warning about 16 colors palette, initialize mouseState
562f1ed8b8 DREAMWEB: Rewrite the PCX decoder i C++
f8422b56a9 DREAMWEB: renamed update to update_zs
bf80a8a3ac DREAMWEB: added inc/dec instructions.
c330f5d0b8 DREAMWEB: modify register after raster operations
70bbb1a2ae DREAMWEB: switched off foreign/spanish flags for recompilation
0f8eacf0bd DREAMWEB: Fix the maingamepal offset. (It changed recently.)
d65083ecae DREAMWEB: fixed neg instruction
de65cf35c1 DREAMWEB: Simplify the tracking of the mouse position and buttons
39d8f43bf3 DREAMWEB: hopefully fixed OF value
6deff84749 DREAMWEB: fixed crash on room changing
edf7d9b42b DREAMWEB: unstubbed printundermon
6fb25cdde4 DREAMWEB: added stack depth check to code generator
4547e7314c DREAMWEB: Make it possible to type the letter D
c808844ad6 DREAMWEB: regenerated the source
92a11ea59d DREAMWEB: Make new function for getting name of file to open.
308fcf0953 DREAMWEB: added setSpeed, CTRL-F shortcut and removed erik's comment because it's good idea :)
77624071bc DREAMWEB: removed detection params
55c366b988 DREAMWEB: fixed monitor scrolling
d69e437d42 DREAMWEB: do not return invalid register from the deallocate memory
93cf9993ea DREAMWEB: report click only once, this fixes phantom clicks after loading or between screens.
167d401ad7 DREAMWEB: fix registers on exit from stubs
cf6b88b174 DREAMWEB: report uppercased letters to the code
f46a889e6d DREAMWEB: fixed invalid buffer len
49e7c7a735 DREAMWEB: fixed occasional stripping of the strings in data segment
ff128eae14 DREAMWEB: fixed crash after exit of the monitor
e7b6859274 DREAMWEB: fixed memory corruption in multiput/multiget
09346f01d7 DREAMWEB: added sound handling stub
5a8b1dbfff DREAMWEB: catch the sample changing, more stubs
74dfc34937 DREAMWEB: added sounds loading
1955df129f DREAMWEB: added sound support
7e7152df28 DREAMWEB: removed looping on channel1
daab18a7be DREAMWEB: stop previous sound if it's still active
8ede458e77 DREAMWEB: fixed invalid channel, removed junk
0946aa81bd DREAMWEB: added operator= for segmentref
5cccea42e5 DREAMWEB: regenerated the source
8c9d00966f DREAMWEB: removed hacks, regenerated source
78b1a60611 DREAMWEB: patch sprite table after deallocating segment with sprites.
bf28698bca DREAMWEB: fixed shakeTable to do not pass negative values into backend, added CTRL-c statue puzzle solver shortcut
932abf8c3b DREAMWEB: regenerated sources with CD option on
074436985f DREAMWEB: renamed playSpeech to loadSpeech
25824b20ed DREAMWEB: added sound status check
84745add6e DREAMWEB: added volume support (stubs for now)
dca78aa964 DREAMWEB: fixed cd-version without savefiles
9008f2c442 DREAMWEB: added volume setting (maybe wrong)
8a87835638 DREAMWEB: added comment about volumes
5826ae88ae DREAMWEB: cut upper volume limit
cf942d9308 DREAMWEB: cleanup keys handling, added turbo shortcut
7d93f81aba DREAMWEB: added detection of the cd version
f4936e6b42 DREAMWEB: implemented stc/clc, fixed preliminary exit from the dialogue
cd4b0a8b6a DREAMWEB: cleaned up keys handling
cde28452f7 DREAMWEB: The readabyte() function is no longer needed.
dfaa1e32b7 DREAMWEB: Filter out "illegal" characters
9c7c46bfde DREAMWEB: fixed final scene, better sound channel handling
1cafd2de98 DREAMWEB: Reinstate some "hardware key" handling that got lost
c760405a4e DREAMWEB: ported engine to the new metaengine api
ae8edebd65 DREAMWEB: fixed title skipping
9599894a4b DREAMWEB: Added original sources. Released with permission from Neil Dodwell.
624042eedd Merge pull request #45 from fuzzie/dreamweb


Commit: 52a89174abc27a8f6256d401e5dde6ea904a4afd
    https://github.com/scummvm/scummvm/commit/52a89174abc27a8f6256d401e5dde6ea904a4afd
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:05-07:00

Commit Message:
DREAMWEB: added autogenerated source

Changed paths:
  A engines/dreamweb/console.cpp
  A engines/dreamweb/console.h
  A engines/dreamweb/detection.cpp
  A engines/dreamweb/detection_tables.h
  A engines/dreamweb/dreamgen.cpp
  A engines/dreamweb/dreamgen.h
  A engines/dreamweb/dreamweb.cpp
  A engines/dreamweb/dreamweb.h
  A engines/dreamweb/module.mk
  A engines/dreamweb/runtime.h
    base/plugins.cpp
    configure
    engines/engines.mk



diff --git a/base/plugins.cpp b/base/plugins.cpp
index 4a3b201..8ce7b53 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 b012ccc..e7a4335 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 0000000..e004746
--- /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 0000000..58c8467
--- /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 0000000..f0d0f9e
--- /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 0000000..394236a
--- /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 0000000..ec243cc
--- /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;


Commit: 51f44779ca432809a21ac867b87d20e85fcc807f
    https://github.com/scummvm/scummvm/commit/51f44779ca432809a21ac867b87d20e85fcc807f
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:11-07:00

Commit Message:
DREAMWEB: regenerate sources

Changed paths:
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/dreamgen.h



diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index ec243cc..06aed60 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2,6 +2,8 @@
 
 namespace dreamgen {
 
+static inline void seecommandtail(Context &context);
+static inline void checkbasemem(Context &context);
 static inline void allocatebuffers(Context &context);
 static inline void clearbuffers(Context &context);
 static inline void clearpalette(Context &context);
@@ -278,6 +280,7 @@ 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 parseblaster(Context &context);
 static inline void printcurs(Context &context);
 static inline void delcurs(Context &context);
 static inline void commandonly(Context &context);
@@ -295,7 +298,6 @@ 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);
@@ -11771,52 +11773,114 @@ 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 dreamweb(Context & context) {
+	seecommandtail(context);
+	checkbasemem(context);
+	soundstartup(context);
+	setkeyboardint(context);
+	setupemm(context);
+	allocatebuffers(context);
+	setmouse(context);
+	fadedos(context);
+	gettime(context);
+	clearbuffers(context);
+	clearpalette(context);
+	set16colpalette(context);
+	readsetdata(context);
+	context.data.byte(391) = 0;
+	context.dx = 1922;
+	loadsample(context);
+	setsoundoff(context);
+	scanfornames(context);
+	context._cmp(context.al, 0);
+	if (!context.flags.z()) goto dodecisions;
+	setmode(context);
+	loadpalfromiff(context);
+	titles(context);
+	credits(context);
+	goto playgame;
+dodecisions:
+	cls(context);
+	setmode(context);
+	decide(context);
+	context._cmp(context.data.byte(103), 4);
+	if (context.flags.z()) goto mainloop;
+	titles(context);
+	credits(context);
+playgame:
+	clearchanges(context);
+	setmode(context);
+	loadpalfromiff(context);
+	context.data.byte(9) = 255;
+	context.data.byte(67) = 1;
+	context.data.byte(188) = 35;
+	context.data.byte(386) = 7;
+	loadroom(context);
+	clearsprites(context);
+	initman(context);
+	entrytexts(context);
+	entryanims(context);
+	context.data.byte(183) = 3;
+	initialinv(context);
+	context.data.byte(153) = 32;
+	startup1(context);
+	context.data.byte(387) = 0;
+	context.data.byte(388) = -1;
+	context.data.byte(100) = 255;
+	goto mainloop;
+loadnew:
+	clearbeforeload(context);
+	loadroom(context);
+	clearsprites(context);
+	initman(context);
+	entrytexts(context);
+	entryanims(context);
+	context.data.byte(188) = 255;
+	startup(context);
+	context.data.byte(100) = 255;
+	worktoscreenm(context);
+	goto mainloop;
+alreadyloaded:
+	context.data.byte(188) = 255;
+	clearsprites(context);
+	initman(context);
+	startup(context);
+	context.data.byte(100) = 255;
+mainloop:
+	screenupdate(context);
+	context._cmp(context.data.byte(391), 0);
+	if (!context.flags.z()) goto endofgame;
+	context._cmp(context.data.byte(56), 1);
+	if (context.flags.z()) goto gameover;
+	context._cmp(context.data.byte(56), 2);
+	if (context.flags.z()) goto gameover;
+	context._cmp(context.data.word(21), 0);
+	if (context.flags.z()) goto notwatching;
+	context.al = context.data.byte(477);
+	context._cmp(context.al, context.data.byte(475));
+	if (!context.flags.z()) goto mainloop;
+	context._sub(context.data.word(21), 1);
+	if (!context.flags.z()) goto mainloop;
+notwatching:
+	context._cmp(context.data.byte(56), 4);
+	if (context.flags.z()) goto gameover;
+	context._cmp(context.data.byte(188), 255);
+	if (!context.flags.z()) goto loadnew;
+	goto mainloop;
+gameover:
+	clearbeforeload(context);
+	showgun(context);
+	fadescreendown(context);
+	context.cx = 100;
+	hangon(context);
+	goto dodecisions;
+endofgame:
+	clearbeforeload(context);
+	fadescreendowns(context);
+	context.cx = 200;
+	hangon(context);
+	endgame(context);
+	{ quickquit2(context); return; };
 }
 
 static inline void parseblaster(Context & context) {
@@ -12713,6 +12777,64 @@ static inline void getridoftempsp(Context & context) {
 	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 checkbasemem(Context & context) {
+	context.bx = context.data.word(534);
+	context._cmp(context.bx, 0x9360);
+	if (!context.flags.c()) goto enoughmem;
+	context.data.byte(532) = 5;
+	{ quickquit(context); return; };
+enoughmem:
+	return;
+}
+
 static inline void checkforemm(Context & context) {
 	return;
 }
@@ -20745,6 +20867,116 @@ static inline void endgame(Context & context) {
 	return;
 }
 
+static inline void dreamweb(Context & context) {
+	seecommandtail(context);
+	checkbasemem(context);
+	soundstartup(context);
+	setkeyboardint(context);
+	setupemm(context);
+	allocatebuffers(context);
+	setmouse(context);
+	fadedos(context);
+	gettime(context);
+	clearbuffers(context);
+	clearpalette(context);
+	set16colpalette(context);
+	readsetdata(context);
+	context.data.byte(391) = 0;
+	context.dx = 1922;
+	loadsample(context);
+	setsoundoff(context);
+	scanfornames(context);
+	context._cmp(context.al, 0);
+	if (!context.flags.z()) goto dodecisions;
+	setmode(context);
+	loadpalfromiff(context);
+	titles(context);
+	credits(context);
+	goto playgame;
+dodecisions:
+	cls(context);
+	setmode(context);
+	decide(context);
+	context._cmp(context.data.byte(103), 4);
+	if (context.flags.z()) goto mainloop;
+	titles(context);
+	credits(context);
+playgame:
+	clearchanges(context);
+	setmode(context);
+	loadpalfromiff(context);
+	context.data.byte(9) = 255;
+	context.data.byte(67) = 1;
+	context.data.byte(188) = 35;
+	context.data.byte(386) = 7;
+	loadroom(context);
+	clearsprites(context);
+	initman(context);
+	entrytexts(context);
+	entryanims(context);
+	context.data.byte(183) = 3;
+	initialinv(context);
+	context.data.byte(153) = 32;
+	startup1(context);
+	context.data.byte(387) = 0;
+	context.data.byte(388) = -1;
+	context.data.byte(100) = 255;
+	goto mainloop;
+loadnew:
+	clearbeforeload(context);
+	loadroom(context);
+	clearsprites(context);
+	initman(context);
+	entrytexts(context);
+	entryanims(context);
+	context.data.byte(188) = 255;
+	startup(context);
+	context.data.byte(100) = 255;
+	worktoscreenm(context);
+	goto mainloop;
+alreadyloaded:
+	context.data.byte(188) = 255;
+	clearsprites(context);
+	initman(context);
+	startup(context);
+	context.data.byte(100) = 255;
+mainloop:
+	screenupdate(context);
+	context._cmp(context.data.byte(391), 0);
+	if (!context.flags.z()) goto endofgame;
+	context._cmp(context.data.byte(56), 1);
+	if (context.flags.z()) goto gameover;
+	context._cmp(context.data.byte(56), 2);
+	if (context.flags.z()) goto gameover;
+	context._cmp(context.data.word(21), 0);
+	if (context.flags.z()) goto notwatching;
+	context.al = context.data.byte(477);
+	context._cmp(context.al, context.data.byte(475));
+	if (!context.flags.z()) goto mainloop;
+	context._sub(context.data.word(21), 1);
+	if (!context.flags.z()) goto mainloop;
+notwatching:
+	context._cmp(context.data.byte(56), 4);
+	if (context.flags.z()) goto gameover;
+	context._cmp(context.data.byte(188), 255);
+	if (!context.flags.z()) goto loadnew;
+	goto mainloop;
+gameover:
+	clearbeforeload(context);
+	showgun(context);
+	fadescreendown(context);
+	context.cx = 100;
+	hangon(context);
+	goto dodecisions;
+endofgame:
+	clearbeforeload(context);
+	fadescreendowns(context);
+	context.cx = 200;
+	hangon(context);
+	endgame(context);
+	{ quickquit2(context); return; };
+}
+
 
 Data::Data() {
 	static const uint8 src[] = {
@@ -21900,6 +22132,7 @@ void __dispatch_call(Context &context, unsigned addr) {
 		case 0xc93c: getridofpit(context); break;
 		case 0xc940: pitinterupt(context); break;
 		case 0xc944: dreamweb(context); break;
+		case 0xc944: dreamweb(context); break;
 		case 0xc948: entrytexts(context); break;
 		case 0xc94c: entryanims(context); break;
 		case 0xc950: initialinv(context); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 6f20136..7cad64e 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -15,13 +15,8 @@ namespace dreamgen {
 	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 quickquit(Context &context);
+	void quickquit2(Context &context);
 	void deallocatemem(Context &context);
 	void vsync(Context &context);
 	void closefile(Context &context);
@@ -47,11 +42,13 @@ namespace dreamgen {
 	void setupemm(Context &context);
 	void setkeyboardint(Context &context);
 	void soundstartup(Context &context);
-	void checkbasemem(Context &context);
 	void keyboardread(Context &context);
+	void resetkeyboard(Context &context);
 	void openforsave(Context &context);
 	void createfile(Context &context);
+	void removeemm(Context &context);
 	void pitinterupt(Context &context);
+	void getridofpit(Context &context);
 	void setuppit(Context &context);
 	void startdmablock(Context &context);
 	void dmaend(Context &context);
@@ -60,7 +57,10 @@ namespace dreamgen {
 	void bothchannels(Context &context);
 	void channel1only(Context &context);
 	void channel0only(Context &context);
+	void out22c(Context &context);
+	void soundend(Context &context);
 	void interupttest(Context &context);
+	void disablesoundint(Context &context);
 	void enablesoundint(Context &context);
 	void checksoundint(Context &context);
 	void loadspeech(Context &context);


Commit: 181428e65e0039179b08986c4026ab6ba54cd01c
    https://github.com/scummvm/scummvm/commit/181428e65e0039179b08986c4026ab6ba54cd01c
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:30-07:00

Commit Message:
DREAMWEB: started integration of stubs

Changed paths:
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/dreamgen.h
    engines/dreamweb/dreamweb.cpp



diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 06aed60..5b075a1 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2,487 +2,487 @@
 
 namespace dreamgen {
 
-static inline void seecommandtail(Context &context);
-static inline void checkbasemem(Context &context);
-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 parseblaster(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 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) {
+static void seecommandtail(Context &context);
+static void checkbasemem(Context &context);
+static void allocatebuffers(Context &context);
+static void clearbuffers(Context &context);
+static void clearpalette(Context &context);
+static void readsetdata(Context &context);
+static void loadpalfromiff(Context &context);
+static void titles(Context &context);
+static void credits(Context &context);
+static void cls(Context &context);
+static void decide(Context &context);
+static void clearchanges(Context &context);
+static void loadroom(Context &context);
+static void clearsprites(Context &context);
+static void initman(Context &context);
+static void entrytexts(Context &context);
+static void entryanims(Context &context);
+static void initialinv(Context &context);
+static void startup1(Context &context);
+static void clearbeforeload(Context &context);
+static void startup(Context &context);
+static void worktoscreenm(Context &context);
+static void screenupdate(Context &context);
+static void showgun(Context &context);
+static void fadescreendown(Context &context);
+static void hangon(Context &context);
+static void fadescreendowns(Context &context);
+static void endgame(Context &context);
+static void standardload(Context &context);
+static void getroomspaths(Context &context);
+static void readheader(Context &context);
+static void allocateload(Context &context);
+static void fillspace(Context &context);
+static void sortoutmap(Context &context);
+static void findroominloc(Context &context);
+static void deletetaken(Context &context);
+static void setallchanges(Context &context);
+static void autoappear(Context &context);
+static void getroomdata(Context &context);
+static void autosetwalk(Context &context);
+static void findxyfrompath(Context &context);
+static void twodigitnum(Context &context);
+static void startloading(Context &context);
+static void loadroomssample(Context &context);
+static void switchryanon(Context &context);
+static void drawflags(Context &context);
+static void getdimension(Context &context);
+static void getflagunderp(Context &context);
+static void multidump(Context &context);
+static void multiput(Context &context);
+static void multiget(Context &context);
+static void dumpblink(Context &context);
+static void showblink(Context &context);
+static void showframe(Context &context);
+static void printcurs(Context &context);
+static void delcurs(Context &context);
+static void delpointer(Context &context);
+static void readmouse(Context &context);
+static void animpointer(Context &context);
+static void showpointer(Context &context);
+static void dumppointer(Context &context);
+static void commandonly(Context &context);
+static void worktoscreen(Context &context);
+static void showtime(Context &context);
+static void showwatch(Context &context);
+static void printmessage(Context &context);
+static void printdirect(Context &context);
+static void usecharset1(Context &context);
+static void showpanel(Context &context);
+static void showman(Context &context);
+static void roomname(Context &context);
+static void panelicons1(Context &context);
+static void zoomicon(Context &context);
+static void middlepanel(Context &context);
+static void findobname(Context &context);
+static void workoutframes(Context &context);
+static void checkdest(Context &context);
+static void bresenhams(Context &context);
+static void facerightway(Context &context);
+static void checkone(Context &context);
+static void commandwithob(Context &context);
+static void findnextcolon(Context &context);
+static void deltextline(Context &context);
+static void copyname(Context &context);
+static void finishedwalking(Context &context);
+static void examineob(Context &context);
+static void talk(Context &context);
+static void setwalk(Context &context);
+static void examineobtext(Context &context);
+static void blocknametext(Context &context);
+static void personnametext(Context &context);
+static void walktotext(Context &context);
+static void clearwork(Context &context);
+static void drawfloor(Context &context);
+static void reelsonscreen(Context &context);
+static void spriteupdate(Context &context);
+static void printsprites(Context &context);
+static void playchannel0(Context &context);
+static void cancelch0(Context &context);
+static void createpanel(Context &context);
+static void findpathofpoint(Context &context);
+static void showicon(Context &context);
+static void undertextline(Context &context);
+static void mainscreen(Context &context);
+static void getunderzoom(Context &context);
+static void zoom(Context &context);
+static void walkintoroom(Context &context);
+static void reminders(Context &context);
+static void atmospheres(Context &context);
+static void findormake(Context &context);
+static void obname(Context &context);
+static void pixelcheckset(Context &context);
+static void isitdescribed(Context &context);
+static void getreelstart(Context &context);
+static void getreelframeax(Context &context);
+static void blank(Context &context);
+static void findfirstpath(Context &context);
+static void checkifex(Context &context);
+static void checkiffree(Context &context);
+static void checkifperson(Context &context);
+static void checkifset(Context &context);
+static void identifyob(Context &context);
+static void checkcoords(Context &context);
+static void walkandexamine(Context &context);
+static void convnum(Context &context);
+static void onedigit(Context &context);
+static void plotreel(Context &context);
+static void checkforshake(Context &context);
+static void newplace(Context &context);
+static void readmouse1(Context &context);
+static void dumptextline(Context &context);
+static void autolook(Context &context);
+static void watchcount(Context &context);
+static void readmouse2(Context &context);
+static void dumpzoom(Context &context);
+static void deleverything(Context &context);
+static void afternewroom(Context &context);
+static void readmouse3(Context &context);
+static void dumpmap(Context &context);
+static void dumptimedtext(Context &context);
+static void readmouse4(Context &context);
+static void dumpwatch(Context &context);
+static void fadescreenup(Context &context);
+static void parseblaster(Context &context);
+static void clearreels(Context &context);
+static void clearrest(Context &context);
+static void trysoundalloc(Context &context);
+static void allocatework(Context &context);
+static void checkforemm(Context &context);
+static void getanyad(Context &context);
+static void transfertoex(Context &context);
+static void pickupob(Context &context);
+static void switchryanoff(Context &context);
+static void resetlocation(Context &context);
+static void removefreeobject(Context &context);
+static void checkifpathison(Context &context);
+static void turnpathon(Context &context);
+static void removesetobject(Context &context);
+static void placesetobject(Context &context);
+static void turnanypathon(Context &context);
+static void setuptimeduse(Context &context);
+static void volumeadjust(Context &context);
+static void loopchannel0(Context &context);
+static void cancelch1(Context &context);
+static void createname(Context &context);
+static void doload(Context &context);
+static void showdecisions(Context &context);
+static void showopbox(Context &context);
+static void showloadops(Context &context);
+static void showslots(Context &context);
+static void shownames(Context &context);
+static void namestoold(Context &context);
+static void getridoftemp(Context &context);
+static void initrain(Context &context);
+static void createpanel2(Context &context);
+static void loadsavebox(Context &context);
+static void storeit(Context &context);
+static void makeheader(Context &context);
+static void oldtonames(Context &context);
+static void showsaveops(Context &context);
+static void readkey(Context &context);
+static void getnamepos(Context &context);
+static void selectslot(Context &context);
+static void restoreall(Context &context);
+static void redrawmainscrn(Context &context);
+static void checkinput(Context &context);
+static void showdiscops(Context &context);
+static void loadintotemp(Context &context);
+static void getback1(Context &context);
+static void getridofall(Context &context);
+static void showmainops(Context &context);
+static void dosaveload(Context &context);
+static void findtext1(Context &context);
+static void usetempcharset(Context &context);
+static void playchannel1(Context &context);
+static void getlocation(Context &context);
+static void setlocation(Context &context);
+static void hangonp(Context &context);
+static void showdiary(Context &context);
+static void showdiarypage(Context &context);
+static void getridofreels(Context &context);
+static void loadtemptext(Context &context);
+static void loadtempcharset(Context &context);
+static void showdiarykeys(Context &context);
+static void dumpdiarykeys(Context &context);
+static void getridoftemptext(Context &context);
+static void getridoftempcharset(Context &context);
+static void restorereels(Context &context);
+static void nextsymbol(Context &context);
+static void showsymbol(Context &context);
+static void updatesymboltop(Context &context);
+static void updatesymbolbot(Context &context);
+static void dumpsymbol(Context &context);
+static void turnanypathoff(Context &context);
+static void folderexit(Context &context);
+static void showleftpage(Context &context);
+static void showrightpage(Context &context);
+static void loadintotemp2(Context &context);
+static void loadintotemp3(Context &context);
+static void showfolder(Context &context);
+static void folderhints(Context &context);
+static void loadfolder(Context &context);
+static void getridoftemp2(Context &context);
+static void getridoftemp3(Context &context);
+static void loadmenu(Context &context);
+static void getundermenu(Context &context);
+static void putundermenu(Context &context);
+static void showmenu(Context &context);
+static void dumpmenu(Context &context);
+static void singlekey(Context &context);
+static void buttonpress(Context &context);
+static void loadkeypad(Context &context);
+static void showouterpad(Context &context);
+static void showkeypad(Context &context);
+static void dumpkeypad(Context &context);
+static void addtopresslist(Context &context);
+static void isitright(Context &context);
+static void checkinside(Context &context);
+static void compare(Context &context);
+static void showfirstuse(Context &context);
+static void putbackobstuff(Context &context);
+static void withwhat(Context &context);
+static void showpuztext(Context &context);
+static void placefreeobject(Context &context);
+static void issetobonmap(Context &context);
+static void showseconduse(Context &context);
+static void removeobfrominv(Context &context);
+static void turnpathoff(Context &context);
+static void getundertimed(Context &context);
+static void putundertimed(Context &context);
+static void getsetad(Context &context);
+static void getfreead(Context &context);
+static void dochange(Context &context);
+static void findpuztext(Context &context);
+static void showexit(Context &context);
+static void obicons(Context &context);
+static void obpicture(Context &context);
+static void describeob(Context &context);
+static void getanyaddir(Context &context);
+static void findinvpos(Context &context);
+static void useroutine(Context &context);
+static void printmessage2(Context &context);
+static void fillryan(Context &context);
+static void findsetobject(Context &context);
+static void getobtextstart(Context &context);
+static void usetext(Context &context);
+static void selectlocation(Context &context);
+static void hangonw(Context &context);
+static void moneypoke(Context &context);
+static void nextcolon(Context &context);
+static void getexad(Context &context);
+static void entercode(Context &context);
+static void findexobject(Context &context);
+static void makeworn(Context &context);
+static void isryanholding(Context &context);
+static void nothelderror(Context &context);
+static void triggermessage(Context &context);
+static void monprint(Context &context);
+static void modifychar(Context &context);
+static void printchar(Context &context);
+static void showcurrentfile(Context &context);
+static void printlogo(Context &context);
+static void printundermon(Context &context);
+static void randomaccess(Context &context);
+static void locklighton(Context &context);
+static void locklightoff(Context &context);
+static void makecaps(Context &context);
+static void monmessage(Context &context);
+static void scrollmonitor(Context &context);
+static void searchforstring(Context &context);
+static void getkeyandlogo(Context &context);
+static void monitorlogo(Context &context);
+static void parser(Context &context);
+static void neterror(Context &context);
+static void processtrigger(Context &context);
+static void input(Context &context);
+static void dirfile(Context &context);
+static void searchforfiles(Context &context);
+static void dircom(Context &context);
+static void signon(Context &context);
+static void read(Context &context);
+static void showkeys(Context &context);
+static void delchar(Context &context);
+static void randomnum1(Context &context);
+static void accesslighton(Context &context);
+static void accesslightoff(Context &context);
+static void powerlighton(Context &context);
+static void powerlightoff(Context &context);
+static void lookininterface(Context &context);
+static void loadpersonal(Context &context);
+static void loadnews(Context &context);
+static void loadcart(Context &context);
+static void printoutermon(Context &context);
+static void initialmoncols(Context &context);
+static void turnonpower(Context &context);
+static void fadeupyellows(Context &context);
+static void fadeupmonfirst(Context &context);
+static void hangoncurs(Context &context);
+static void execcommand(Context &context);
+static void purgealocation(Context &context);
+static void getdestinfo(Context &context);
+static void showarrows(Context &context);
+static void locationpic(Context &context);
+static void getundercentre(Context &context);
+static void putundercentre(Context &context);
+static void readcitypic(Context &context);
+static void showcity(Context &context);
+static void readdesticon(Context &context);
+static void loadtraveltext(Context &context);
+static void convicons(Context &context);
+static void starttalk(Context &context);
+static void hangonpq(Context &context);
+static void redes(Context &context);
+static void dosometalk(Context &context);
+static void getpersontext(Context &context);
+static void getpersframe(Context &context);
+static void findsource(Context &context);
+static void printslow(Context &context);
+static void dolook(Context &context);
+static void getxad(Context &context);
+static void getyad(Context &context);
+static void getmapad(Context &context);
+static void calcfrframe(Context &context);
+static void finalframe(Context &context);
+static void makesprite(Context &context);
+static void makebackob(Context &context);
+static void addalong(Context &context);
+static void addlength(Context &context);
+static void eraseoldobs(Context &context);
+static void calcmapad(Context &context);
+static void doblocks(Context &context);
+static void showallobs(Context &context);
+static void showallfree(Context &context);
+static void showallex(Context &context);
+static void paneltomap(Context &context);
+static void deleteexframe(Context &context);
+static void deleteextext(Context &context);
+static void deleteexobject(Context &context);
+static void purgeanitem(Context &context);
+static void getexpos(Context &context);
+static void transfermap(Context &context);
+static void transferinv(Context &context);
+static void transfertext(Context &context);
+static void transfercontoex(Context &context);
+static void emergencypurge(Context &context);
+static void pickupconts(Context &context);
+static void findopenpos(Context &context);
+static void reexfromopen(Context &context);
+static void geteitherad(Context &context);
+static void fillopen(Context &context);
+static void useopened(Context &context);
+static void getopenedsize(Context &context);
+static void errormessage3(Context &context);
+static void errormessage2(Context &context);
+static void examicon(Context &context);
+static void outofopen(Context &context);
+static void swapwithopen(Context &context);
+static void isitworn(Context &context);
+static void wornerror(Context &context);
+static void errormessage1(Context &context);
+static void checkobjectsize(Context &context);
+static void openinv(Context &context);
+static void openob(Context &context);
+static void droperror(Context &context);
+static void cantdrop(Context &context);
+static void reexfrominv(Context &context);
+static void intoinv(Context &context);
+static void outofinv(Context &context);
+static void swapwithinv(Context &context);
+static void makemainscreen(Context &context);
+static void searchforsame(Context &context);
+static void lookatcard(Context &context);
+static void obsthatdothings(Context &context);
+static void additionaltext(Context &context);
+static void findallopen(Context &context);
+static void obtoinv(Context &context);
+static void findallryan(Context &context);
+static void showryanpage(Context &context);
+static void kernchars(Context &context);
+static void getnextword(Context &context);
+static void getnumber(Context &context);
+static void lockmon(Context &context);
+static void printboth(Context &context);
+static void waitframes(Context &context);
+static void hangone(Context &context);
+static void allpalette(Context &context);
+static void fadescreenups(Context &context);
+static void afterintroroom(Context &context);
+static void usetimedtext(Context &context);
+static void loadintroroom(Context &context);
+static void runintroseq(Context &context);
+static void realcredits(Context &context);
+static void runendseq(Context &context);
+static void showmonk(Context &context);
+static void monkspeaking(Context &context);
+static void gettingshot(Context &context);
+static void biblequote(Context &context);
+static void intro(Context &context);
+static void paltostartpal(Context &context);
+static void paltoendpal(Context &context);
+static void dumpcurrent(Context &context);
+static void rollem(Context &context);
+static void greyscalesum(Context &context);
+static void endpaltostart(Context &context);
+static void clearendpal(Context &context);
+static void rollendcredits2(Context &context);
+static void clearstartpal(Context &context);
+static void fadecalculation(Context &context);
+static void frameoutfx(Context &context);
+static void frameoutnm(Context &context);
+static void frameoutbh(Context &context);
+static void frameoutv(Context &context);
+static void putunderzoom(Context &context);
+static void crosshair(Context &context);
+static void width160(Context &context);
+static void maptopanel(Context &context);
+static void movemap(Context &context);
+static void dealwithspecial(Context &context);
+static void showreelframe(Context &context);
+static void soundonreels(Context &context);
+static void reconstruct(Context &context);
+static void updatepeople(Context &context);
+static void watchreel(Context &context);
+static void showrain(Context &context);
+static void dodoor(Context &context);
+static void liftnoise(Context &context);
+static void widedoor(Context &context);
+static void random(Context &context);
+static void lockeddoorway(Context &context);
+static void liftsprite(Context &context);
+static void doorway(Context &context);
+static void constant(Context &context);
+static void steady(Context &context);
+static void getblockofpixel(Context &context);
+static void splitintolines(Context &context);
+static void adjustleft(Context &context);
+static void adjustright(Context &context);
+static void adjustdown(Context &context);
+static void adjustup(Context &context);
+static void aboutturn(Context &context);
+static void checkforexit(Context &context);
+static void walking(Context &context);
+static void printasprite(Context &context);
+static void showgamereel(Context &context);
+static void checkspeed(Context &context);
+static void addtopeoplelist(Context &context);
+static void setuptimedtemp(Context &context);
+static void madmantext(Context &context);
+static void madmode(Context &context);
+static void priesttext(Context &context);
+static void fadescreenuphalf(Context &context);
+static void textforend(Context &context);
+static void fadescreendownhalf(Context &context);
+static void rollendcredits(Context &context);
+static void textformonk(Context &context);
+static void monks2text(Context &context);
+static void intro2text(Context &context);
+static void intro3text(Context &context);
+static void intro1text(Context &context);
+
+static void alleybarksound(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._sub(context.ax, 1);
 	context._cmp(context.ax, 0);
@@ -499,11 +499,11 @@ nobark:
 	return;
 }
 
-static inline void intromusic(Context & context) {
+static void intromusic(Context & context) {
 	return;
 }
 
-static inline void foghornsound(Context & context) {
+static void foghornsound(Context & context) {
 	randomnumber(context);
 	context._cmp(context.al, 198);
 	if (!context.flags.z()) goto nofog;
@@ -513,7 +513,7 @@ nofog:
 	return;
 }
 
-static inline void receptionist(Context & context) {
+static void receptionist(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gotrecep;
 	context._cmp(context.data.byte(52), 1);
@@ -555,7 +555,7 @@ nottalkedrecep:
 	return;
 }
 
-static inline void smokebloke(Context & context) {
+static 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);
@@ -590,7 +590,7 @@ gotsmokeb:
 	return;
 }
 
-static inline void attendant(Context & context) {
+static void attendant(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	context.al = context.data.byte(context.bx+7);
@@ -601,7 +601,7 @@ nottalked:
 	return;
 }
 
-static inline void manasleep(Context & context) {
+static 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;
@@ -610,7 +610,7 @@ static inline void manasleep(Context & context) {
 	return;
 }
 
-static inline void eden(Context & context) {
+static void eden(Context & context) {
 	context._cmp(context.data.byte(42), 0);
 	if (!context.flags.z()) goto notinbed;
 	showgamereel(context);
@@ -619,7 +619,7 @@ notinbed:
 	return;
 }
 
-static inline void edeninbath(Context & context) {
+static void edeninbath(Context & context) {
 	context._cmp(context.data.byte(42), 0);
 	if (context.flags.z()) goto notinbed;
 	context._cmp(context.data.byte(43), 0);
@@ -634,19 +634,19 @@ notinbed:
 	return;
 }
 
-static inline void malefan(Context & context) {
+static void malefan(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void femalefan(Context & context) {
+static void femalefan(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void louis(Context & context) {
+static void louis(Context & context) {
 	context._cmp(context.data.byte(41), 0);
 	if (!context.flags.z()) goto notlouis1;
 	showgamereel(context);
@@ -655,7 +655,7 @@ notlouis1:
 	return;
 }
 
-static inline void louischair(Context & context) {
+static void louischair(Context & context) {
 	context._cmp(context.data.byte(41), 0);
 	if (context.flags.z()) goto notlouis2;
 	checkspeed(context);
@@ -683,7 +683,7 @@ notlouis2:
 	return;
 }
 
-static inline void manasleep2(Context & context) {
+static 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;
@@ -692,19 +692,19 @@ static inline void manasleep2(Context & context) {
 	return;
 }
 
-static inline void mansatstill(Context & context) {
+static void mansatstill(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void tattooman(Context & context) {
+static void tattooman(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void drinker(Context & context) {
+static void drinker(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gotdrinker;
 	context._add(context.data.word(context.bx+3), 1);
@@ -725,7 +725,7 @@ gotdrinker:
 	return;
 }
 
-static inline void bartender(Context & context) {
+static void bartender(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gotsmoket;
 	context._cmp(context.data.word(context.bx+3), 86);
@@ -752,19 +752,19 @@ notgotgun:
 	return;
 }
 
-static inline void othersmoker(Context & context) {
+static void othersmoker(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void barwoman(Context & context) {
+static void barwoman(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void interviewer(Context & context) {
+static 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);
@@ -781,7 +781,7 @@ talking:
 	return;
 }
 
-static inline void soldier1(Context & context) {
+static void soldier1(Context & context) {
 	context._cmp(context.data.word(context.bx+3), 0);
 	if (context.flags.z()) goto soldierwait;
 	context.data.word(21) = 10;
@@ -814,7 +814,7 @@ gotsoldframe:
 	return;
 }
 
-static inline void rockstar(Context & context) {
+static void rockstar(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._cmp(context.ax, 303);
 	if (context.flags.z()) goto rockcombatend;
@@ -865,7 +865,7 @@ rockcombatend:
 	return;
 }
 
-static inline void helicopter(Context & context) {
+static void helicopter(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._cmp(context.ax, 203);
 	if (context.flags.z()) goto heliwon;
@@ -922,7 +922,7 @@ heliwon:
 	return;
 }
 
-static inline void mugger(Context & context) {
+static void mugger(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._cmp(context.ax, 138);
 	if (context.flags.z()) goto endmugger1;
@@ -995,13 +995,13 @@ endmugger2:
 	return;
 }
 
-static inline void aide(Context & context) {
+static void aide(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
-static inline void businessman(Context & context) {
+static void businessman(Context & context) {
 	context.data.byte(234) = 0;
 	context.data.word(21) = 2;
 	context.ax = context.data.word(context.bx+3);
@@ -1090,7 +1090,7 @@ buscombatwonend:
 	return;
 }
 
-static inline void poolguard(Context & context) {
+static void poolguard(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._cmp(context.ax, 214);
 	if (context.flags.z()) goto combatover2;
@@ -1174,7 +1174,7 @@ doneover2:
 	return;
 }
 
-static inline void security(Context & context) {
+static 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);
@@ -1202,7 +1202,7 @@ gotsecurframe:
 	return;
 }
 
-static inline void heavy(Context & context) {
+static 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;
@@ -1237,7 +1237,7 @@ gotheavyframe:
 	return;
 }
 
-static inline void bossman(Context & context) {
+static void bossman(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto notboss;
 	context.ax = context.data.word(context.bx+3);
@@ -1280,7 +1280,7 @@ nottalkedboss:
 	return;
 }
 
-static inline void gamer(Context & context) {
+static void gamer(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gamerfin;
 gameragain:
@@ -1299,7 +1299,7 @@ gamerfin:
 	return;
 }
 
-static inline void sparkydrip(Context & context) {
+static void sparkydrip(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto cantdrip;
 	context.al = 14;
@@ -1309,7 +1309,7 @@ cantdrip:
 	return;
 }
 
-static inline void carparkdrip(Context & context) {
+static void carparkdrip(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto cantdrip2;
 	context.al = 14;
@@ -1318,7 +1318,7 @@ cantdrip2:
 	return;
 }
 
-static inline void keeper(Context & context) {
+static void keeper(Context & context) {
 	context._cmp(context.data.byte(54), 0);
 	if (!context.flags.z()) goto notwaiting;
 	context._cmp(context.data.word(23), 190);
@@ -1339,7 +1339,7 @@ waiting:
 	return;
 }
 
-static inline void candles1(Context & context) {
+static void candles1(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto candle1;
 	context.ax = context.data.word(context.bx+3);
@@ -1354,7 +1354,7 @@ candle1:
 	return;
 }
 
-static inline void smallcandle(Context & context) {
+static void smallcandle(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto smallcandlef;
 	context.ax = context.data.word(context.bx+3);
@@ -1369,7 +1369,7 @@ smallcandlef:
 	return;
 }
 
-static inline void intromagic1(Context & context) {
+static void intromagic1(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto introm1fin;
 	context.ax = context.data.word(context.bx+3);
@@ -1396,7 +1396,7 @@ introm1fin:
 	return;
 }
 
-static inline void candles(Context & context) {
+static void candles(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto candlesfin;
 	context.ax = context.data.word(context.bx+3);
@@ -1411,7 +1411,7 @@ candlesfin:
 	return;
 }
 
-static inline void candles2(Context & context) {
+static void candles2(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto candles2fin;
 	context.ax = context.data.word(context.bx+3);
@@ -1426,7 +1426,7 @@ candles2fin:
 	return;
 }
 
-static inline void gates(Context & context) {
+static void gates(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gatesfin;
 	context.ax = context.data.word(context.bx+3);
@@ -1462,7 +1462,7 @@ gatesfin:
 	return;
 }
 
-static inline void intromagic2(Context & context) {
+static void intromagic2(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto introm2fin;
 	context.ax = context.data.word(context.bx+3);
@@ -1477,7 +1477,7 @@ introm2fin:
 	return;
 }
 
-static inline void intromagic3(Context & context) {
+static void intromagic3(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto introm3fin;
 	context.ax = context.data.word(context.bx+3);
@@ -1494,7 +1494,7 @@ introm3fin:
 	return;
 }
 
-static inline void intromonks1(Context & context) {
+static void intromonks1(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto intromonk1fin;
 	context.ax = context.data.word(context.bx+3);
@@ -1538,7 +1538,7 @@ intromonk1fin:
 	return;
 }
 
-static inline void intromonks2(Context & context) {
+static void intromonks2(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto intromonk2fin;
 	context.ax = context.data.word(context.bx+3);
@@ -1590,11 +1590,11 @@ intromonk2fin:
 	return;
 }
 
-static inline void handclap(Context & context) {
+static void handclap(Context & context) {
 	return;
 }
 
-static inline void monks2text(Context & context) {
+static void monks2text(Context & context) {
 	context._cmp(context.data.byte(139), 1);
 	if (!context.flags.z()) goto notmonk2text1;
 	context.al = 8;
@@ -1694,7 +1694,7 @@ gotmonks2text:
 	return;
 }
 
-static inline void intro1text(Context & context) {
+static void intro1text(Context & context) {
 	context._cmp(context.data.byte(139), 2);
 	if (!context.flags.z()) goto notintro1text1;
 	context.al = 40;
@@ -1728,7 +1728,7 @@ oktalk2:
 	return;
 }
 
-static inline void intro2text(Context & context) {
+static void intro2text(Context & context) {
 	context._cmp(context.ax, 5);
 	if (!context.flags.z()) goto notintro2text1;
 	context.al = 43;
@@ -1753,7 +1753,7 @@ gotintro2text:
 	return;
 }
 
-static inline void intro3text(Context & context) {
+static void intro3text(Context & context) {
 	context._cmp(context.ax, 107);
 	if (!context.flags.z()) goto notintro3text1;
 	context.al = 45;
@@ -1778,7 +1778,7 @@ gotintro3text:
 	return;
 }
 
-static inline void monkandryan(Context & context) {
+static void monkandryan(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto notmonkryan;
 	context.ax = context.data.word(context.bx+3);
@@ -1803,7 +1803,7 @@ notmonkryan:
 	return;
 }
 
-static inline void endgameseq(Context & context) {
+static void endgameseq(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto notendseq;
 	context.ax = context.data.word(context.bx+3);
@@ -1860,7 +1860,7 @@ notendcreds:
 	return;
 }
 
-static inline void rollendcredits(Context & context) {
+static void rollendcredits(Context & context) {
 	context.al = 16;
 	context.ah = 255;
 	playchannel0(context);
@@ -1948,7 +1948,7 @@ gotnext:
 	return;
 }
 
-static inline void priest(Context & context) {
+static void priest(Context & context) {
 	context._cmp(context.data.word(context.bx+3), 8);
 	if (context.flags.z()) goto priestspoken;
 	context.data.byte(234) = 0;
@@ -1967,7 +1967,7 @@ priestspoken:
 	return;
 }
 
-static inline void madmanstelly(Context & context) {
+static void madmanstelly(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._add(context.ax, 1);
 	context._cmp(context.ax, 307);
@@ -1979,7 +1979,7 @@ notendtelly:
 	return;
 }
 
-static inline void madman(Context & context) {
+static void madman(Context & context) {
 	context.data.word(21) = 2;
 	checkspeed(context);
 	if (!context.flags.z()) goto nomadspeed;
@@ -2049,7 +2049,7 @@ ryansded:
 	return;
 }
 
-static inline void madmantext(Context & context) {
+static void madmantext(Context & context) {
 	context._cmp(context.data.byte(64), 61);
 	if (!context.flags.c()) goto nomadtext;
 	context.al = context.data.byte(64);
@@ -2069,7 +2069,7 @@ nomadtext:
 	return;
 }
 
-static inline void madmode(Context & context) {
+static void madmode(Context & context) {
 	context.data.word(21) = 2;
 	context.data.byte(234) = 0;
 	context._cmp(context.data.byte(64), 63);
@@ -2081,7 +2081,7 @@ iswatchmad:
 	return;
 }
 
-static inline void priesttext(Context & context) {
+static 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);
@@ -2101,7 +2101,7 @@ nopriesttext:
 	return;
 }
 
-static inline void textforend(Context & context) {
+static void textforend(Context & context) {
 	context._cmp(context.data.byte(139), 20);
 	if (!context.flags.z()) goto notendtext1;
 	context.al = 0;
@@ -2134,7 +2134,7 @@ gotendtext:
 	return;
 }
 
-static inline void textformonk(Context & context) {
+static void textformonk(Context & context) {
 	context._cmp(context.data.byte(139), 1);
 	if (!context.flags.z()) goto notmonktext1;
 	context.al = 19;
@@ -2252,7 +2252,7 @@ oktalk:
 	return;
 }
 
-static inline void drunk(Context & context) {
+static 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);
@@ -2264,7 +2264,7 @@ trampgone:
 	return;
 }
 
-static inline void advisor(Context & context) {
+static void advisor(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto noadvisor;
 	goto noadvisor;
@@ -2292,7 +2292,7 @@ noadvisor:
 	return;
 }
 
-static inline void copper(Context & context) {
+static void copper(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto nocopper;
 	context.ax = context.data.word(context.bx+3);
@@ -2322,7 +2322,7 @@ nocopper:
 	return;
 }
 
-static inline void sparky(Context & context) {
+static void sparky(Context & context) {
 	context._cmp(context.data.word(16), 0);
 	if (context.flags.z()) goto animsparky;
 	context.data.byte(context.bx+7) = 3;
@@ -2355,7 +2355,7 @@ nottalkedsparky:
 	return;
 }
 
-static inline void train(Context & context) {
+static void train(Context & context) {
 	return;
 	context.ax = context.data.word(context.bx+3);
 	context._cmp(context.ax, 21);
@@ -2378,7 +2378,7 @@ notrainatall:
 	return;
 }
 
-static inline void addtopeoplelist(Context & context) {
+static void addtopeoplelist(Context & context) {
 	context.push(context.es);
 	context.push(context.bx);
 	context.push(context.bx);
@@ -2396,7 +2396,7 @@ static inline void addtopeoplelist(Context & context) {
 	return;
 }
 
-static inline void showgamereel(Context & context) {
+static void showgamereel(Context & context) {
 	context.ax = context.data.word(context.bx+3);
 	context._cmp(context.ax, 512);
 	if (!context.flags.c()) goto noshow;
@@ -2412,7 +2412,7 @@ noshow:
 	return;
 }
 
-static inline void checkspeed(Context & context) {
+static 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);
@@ -2429,7 +2429,35 @@ forcenext:
 	return;
 }
 
-static inline void delsprite(Context & context) {
+static 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 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 void delsprite(Context & context) {
 	context.di = context.bx;
 	context.cx = 32;
 	context.al = 255;
@@ -2437,7 +2465,175 @@ static inline void delsprite(Context & context) {
 	return;
 }
 
-static inline void mainman(Context & context) {
+static 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 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 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 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 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 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 void mainman(Context & context) {
 	context._cmp(context.data.byte(187), 1);
 	if (!context.flags.z()) goto notinnewroom;
 	context.data.byte(187) = 0;
@@ -2520,7 +2716,7 @@ notwalk:
 	return;
 }
 
-static inline void aboutturn(Context & context) {
+static void aboutturn(Context & context) {
 	context._cmp(context.data.byte(136), 1);
 	if (context.flags.z()) goto incdir;
 	context._cmp(context.data.byte(136), -1);
@@ -2554,7 +2750,7 @@ decdir:
 	return;
 }
 
-static inline void walking(Context & context) {
+static void walking(Context & context) {
 	context._cmp(context.data.byte(493), 0);
 	if (context.flags.z()) goto normalwalk;
 	context.al = context.data.byte(492);
@@ -2603,7 +2799,25 @@ finishedwalk:
 	return;
 }
 
-static inline void checkforexit(Context & context) {
+static 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 void checkforexit(Context & context) {
 	context.cl = context.data.byte(151);
 	context._add(context.cl, 12);
 	context.ch = context.data.byte(152);
@@ -2695,7 +2909,7 @@ notanup:
 	return;
 }
 
-static inline void adjustdown(Context & context) {
+static void adjustdown(Context & context) {
 	context.push(context.es);
 	context.push(context.bx);
 	context._add(context.data.byte(149), 10);
@@ -2709,7 +2923,7 @@ static inline void adjustdown(Context & context) {
 	return;
 }
 
-static inline void adjustup(Context & context) {
+static void adjustup(Context & context) {
 	context.push(context.es);
 	context.push(context.bx);
 	context._sub(context.data.byte(149), 10);
@@ -2723,7 +2937,7 @@ static inline void adjustup(Context & context) {
 	return;
 }
 
-static inline void adjustleft(Context & context) {
+static void adjustleft(Context & context) {
 	context.push(context.es);
 	context.push(context.bx);
 	context.data.byte(153) = 0;
@@ -2738,7 +2952,7 @@ static inline void adjustleft(Context & context) {
 	return;
 }
 
-static inline void adjustright(Context & context) {
+static void adjustright(Context & context) {
 	context.push(context.es);
 	context.push(context.bx);
 	context._add(context.data.byte(148), 11);
@@ -2753,176 +2967,432 @@ static inline void adjustright(Context & context) {
 	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:
+static 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 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;
+	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;
-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;
+forgotone:
+	context.al = 50;
+	context.bl = 54;
+	context.bh = 70;
+	context.cx = 48;
+	context.dx = 8;
+	setuptimeduse(context);
 	return;
-endoflist:
-	context.data.byte(35) = 1;
+notinedenslift:
 	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);
+static 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;
-hissnoise:
-	context.al = 13;
-	playchannel1(context);
+}
+
+static 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 random(Context & context) {
-	randomnum1(context);
+static void getblockofpixel(Context & context) {
+	context.push(context.cx);
+	context.push(context.es);
 	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.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.data.byte(context.bx+15) = context.al;
+	context.es = context.pop();
+	context.cx = context.pop();
 	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;
+failrain:
+	context.di = context.pop();
+	context.es = context.pop();
+	context.cx = context.pop();
+	context.al = 0;
 	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;
+static 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 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 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 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 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 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 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);
@@ -2931,7 +3401,7 @@ gotconst:
 	return;
 }
 
-static inline void doorway(Context & context) {
+static void doorway(Context & context) {
 	context.data.byte(193) = -24;
 	context.data.byte(194) = 10;
 	context.data.byte(195) = -30;
@@ -2940,7 +3410,7 @@ static inline void doorway(Context & context) {
 	return;
 }
 
-static inline void widedoor(Context & context) {
+static void widedoor(Context & context) {
 	context.data.byte(193) = -24;
 	context.data.byte(194) = 24;
 	context.data.byte(195) = -30;
@@ -2949,7 +3419,7 @@ static inline void widedoor(Context & context) {
 	return;
 }
 
-static inline void dodoor(Context & context) {
+static void dodoor(Context & context) {
 	context.al = context.data.byte(151);
 	context.ah = context.data.byte(152);
 	context.cl = context.data.byte(context.bx+10);
@@ -3039,7 +3509,7 @@ notnearly:
 	return;
 }
 
-static inline void lockeddoorway(Context & context) {
+static void lockeddoorway(Context & context) {
 	context.al = context.data.byte(151);
 	context.ah = context.data.byte(152);
 	context.cl = context.data.byte(context.bx+10);
@@ -3176,17698 +3646,17122 @@ notnearly:
 	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) {
+static void updatepeople(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.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 void getreelframeax(Context & context) {
 	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.data.word(160) = context.ax;
+	findsource(context);
+	context.es = context.ds;
 	context.ds = context.pop();
-	context.es = context.pop();
-	context.bx = context.pop();
-	context._add(context.bx, 5);
-	goto dumpevery2;
-finishevery2:
+	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 readabyte(Context & context) {
-	context._cmp(context.si, 30000);
-	if (!context.flags.z()) goto notendblock;
-	context.push(context.bx);
+static void reelsonscreen(Context & context) {
+	reconstruct(context);
+	updatepeople(context);
+	watchreel(context);
+	showrain(context);
+	usetimedtext(context);
+	return;
+}
+
+static void plotreel(Context & context) {
+	getreelstart(context);
+retryreel:
 	context.push(context.es);
-	context.push(context.di);
-	context.push(context.ds);
 	context.push(context.si);
-	readoneblock(context);
+	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.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._add(context.si, 40);
+	goto retryreel;
+normalreel:
+	context.cx = 8;
+plotloop:
 	context.push(context.cx);
-	context.push(context.di);
+	context.push(context.es);
 	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.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.di = context.pop();
+	context.es = context.pop();
 	context.cx = context.pop();
-	context._add(context.si, 320);
-	context._add(context.di, 320);
-	if (--context.cx) goto scrollmonloop1;
+	context._add(context.si, 5);
+	if (--context.cx) goto plotloop;
+	soundonreels(context);
+	context.bx = context.pop();
+	context.es = context.pop();
 	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;
+static 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;
-	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);
+	{ 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 delthisone(Context & context) {
-	context.push(context.ax);
-	context.push(context.ax);
+static 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 void dealwithspecial(Context & context) {
+	context._sub(context.al, 220);
+	context._cmp(context.al, 0);
+	if (!context.flags.z()) goto notplset;
 	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);
+	placesetobject(context);
+	context.data.byte(130) = 1;
+	return;
+notplset:
+	context._cmp(context.al, 1);
+	if (!context.flags.z()) goto notremset;
 	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;
+	removesetobject(context);
+	context.data.byte(130) = 1;
 	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:
+notremset:
+	context._cmp(context.al, 2);
+	if (!context.flags.z()) goto notplfree;
+	context.al = context.ah;
+	placefreeobject(context);
+	context.data.byte(130) = 1;
 	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;
+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 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;
+static 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 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;
+static 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 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;
+static 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 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);
+static 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;
-nomorefading:
-	context.data.byte(344) = 0;
+bigroom:
+	context._sub(context.data.byte(129), 8);
+	maptopanel(context);
+	context._add(context.data.byte(129), 8);
 	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);
+static void dumpeverything(Context & 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);
+	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 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);
+static void allocatework(Context & context) {
+	context.bx = 0x1000;
+	allocatemem(context);
+	context.data.word(400) = context.ax;
 	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);
+static 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 fadeupyellows(Context & context) {
-	paltoendpal(context);
+static 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+(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.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();
-	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);
+	if (--context.cx) goto palloop;
 	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;
+static void cls(Context & context) {
+	context.ax = 0x0a000;
+	context.es = context.ax;
+	context.di = 0;
+	context.cx = 0x7fff;
 	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);
+	while(--context.cx) 	context._stosw();
 	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:
+static 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.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.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();
-	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;
+	context.cx = context.pop();
+	context._add(context.si, 320);
+	context._add(context.di, 320);
+	if (--context.cx) goto scrollmonloop1;
 	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);
+static 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 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);
+static 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 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;
+static 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 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;
+static 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 obtoinv(Context & context) {
-	context.push(context.bx);
-	context.push(context.es);
-	context.push(context.si);
-	context.push(context.ax);
+static void pixelcheckset(Context & context) {
 	context.push(context.ax);
-	context.push(context.di);
+	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.ds = context.data.word(408);
-	context._sub(context.di, 2);
-	context._sub(context.bx, 1);
-	context.al = 10;
+	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;
-	showframe(context);
-	context.bx = context.pop();
-	context.di = context.pop();
+	context.cx = 6;
+	context._mul(context.cx);
+	context._add(context.bx, context.ax);
 	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.al = context.ah;
 	context.ah = 0;
-	showframe(context);
-finishfill:
-	context.ax = context.pop();
-	context.si = context.pop();
-	context.es = context.pop();
+	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 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:
+static 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 makeworn(Context & context) {
-	context.data.byte(context.bx+12) = 'W'-'A';
-	context.data.byte(context.bx+13) = 'E'-'A';
+static 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 getbackfromob(Context & context) {
-	context._cmp(context.data.byte(106), 1);
-	if (!context.flags.z()) goto notheldob;
-	blank(context);
-	return;
-notheldob:
-	getback1(context);
+static 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 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:
+static 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;
-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);
+zoomswitch:
+	context._cmp(context.data.byte(100), 199);
+	if (context.flags.c()) goto zoomit;
+cantzoom:
+	putunderzoom(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;
+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 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));
+static void delthisone(Context & context) {
 	context.push(context.ax);
-	context.al = context.data.byte(19);
+	context.push(context.ax);
+	context.al = context.ah;
 	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._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;
-	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;
+	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 examicon(Context & context) {
-	context.ds = context.data.word(410);
-	context.di = 254;
-	context.bx = 5;
-	context.al = 3;
+static 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;
-	showframe(context);
+	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 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;
+static 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 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);
+static 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;
-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);
+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 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);
+static 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 locklighton(Context & context) {
-	context.di = 56;
-	context.bx = 182;
-	context.ds = context.data.word(458);
-	context.al = 10;
+static 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.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.cx);
+	context.cx = 11;
+loop124:
+	context.push(context.cx);
 	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.ds = context.data.word(418);
+	context._lodsb();
+	context.ds = context.data.word(416);
 	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._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.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:
+	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 makecaps(Context & context) {
-	context._cmp(context.al, 'a');
-	if (context.flags.c()) goto notupperc;
-	context._sub(context.al, 32);
-notupperc:
+static 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;
-}
-
-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);
+notblankshow:
+	context._test(context.ah, 128);
+	if (!context.flags.z()) goto skipoffsets;
+	context.al = context.data.byte(context.si+4);
 	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._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.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);
+	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;
-notblankinp:
-	context.cl = 0;
-comloop:
+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.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._sub(context.bx, context.data.word(119));
+	context.ah = context.bl;
 	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);
+	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;
-}
-
-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:
+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 signon(Context & context) {
-	parser(context);
-	context._add(context.di, 1);
-	context.ds = context.cs;
-	context.si = 2807;
-	context.cx = 4;
-signonloop:
+static 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.push(context.si);
-	context.push(context.di);
-	context._add(context.si, 14);
-	context.cx = 11;
-signonloop2:
+	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, 32);
-	if (context.flags.z()) goto foundsign;
-	makecaps(context);
-	context.ah = context.data.byte(context.di);
+	context._cmp(context.al, 0);
+	if (!context.flags.z()) goto backtosolid;
+backtoother:
 	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();
+	if (--context.cx) goto frameloop2;
 	context.cx = context.pop();
-	context._add(context.si, 26);
-	if (--context.cx) goto signonloop;
-	context.al = 13;
-	monmessage(context);
+	context._add(context.di, context.dx);
+	context._sub(context.ch, 1);
+	if (!context.flags.z()) goto frameloop1;
 	return;
-foundsign:
-	context.di = context.pop();
-	context.si = context.pop();
+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.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;
+	context._add(context.di, context.dx);
+	context._sub(context.ch, 1);
+	if (!context.flags.z()) goto frameloop1;
 	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:
+static 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.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.ch = 0;
+	context._sub(context.dx, context.cx);
 	context.cx = context.pop();
-	context._add(context.bx, 26);
-	if (--context.cx) goto keysloop;
-	scrollmonitor(context);
+	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 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);
+static 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;
-foundfile2:
-	getkeyandlogo(context);
+}
+
+static 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 keyok1;
+	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;
-keyok1:
-	context.es = context.cs;
-	context.di = 2883;
-	context.ds = context.data.word(324);
-	searchforstring(context);
+frameloopfx3:
+	context._lodsb();
 	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);
+	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;
-findtopictext:
-	context._add(context.bx, 1);
-	context.push(context.es);
+}
+
+static 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);
-	monitorlogo(context);
-	scrollmonitor(context);
-	context.bx = context.pop();
-	context.es = context.pop();
-moretopic:
-	monprint(context);
+	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._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.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.es = context.pop();
-	goto moretopic;
-endoftopic:
-	scrollmonitor(context);
+	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 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);
+static void transfermap(Context & context) {
+	context.di = context.data.word(12);
 	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.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.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(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._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);
+	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 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 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;
+static 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 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;
+static void clearpalette(Context & context) {
+	context.data.byte(344) = 0;
+	clearstartpal(context);
+	dumpcurrent(context);
 	return;
-notfound:
-	context.al = 1;
+}
+
+static 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 parser(Context & context) {
-	context.es = context.cs;
-	context.di = 2883;
-	context.cx = 13;
+static 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 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 = 2883;
-	context.al = '=';
+	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
+	context.al = 0;
 	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;
+	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 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();
+static 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 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:
+static 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 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);
+static 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;
-notnewlogo:
-	printlogo(context);
+}
+
+static 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 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 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 printlogo(Context & context) {
-	context.di = 56;
-	context.bx = 32;
+static 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);
-	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.ds = context.data.word(458);
+	context.al = 1;
 	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);
+	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 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:
+static void rollendcredits2(Context & context) {
+	rollem(context);
 	return;
 }
 
-static inline void triggermessage(Context & context) {
-	context.push(context.ax);
-	context.di = 174;
-	context.bx = 153;
-	context.cl = 200;
-	context.ch = 63;
+static 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.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.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.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();
+	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._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.es);
 	context.push(context.bx);
+	context.cx = 18;
+onelot2:
 	context.push(context.cx);
-	context.ds = context.data.word(412);
-	context.si = 0;
-	multiput(context);
+	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();
-	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();
+endearly:
 	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:
+static 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;
-douse:
-	useroutine(context);
+nomorefading:
+	context.data.byte(344) = 0;
 	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);
+static 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);
-	if (context.flags.z()) goto cantuse2;
-	findnextcolon(context);
+	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 cantuse2;
-	context.al = context.data.byte(context.si);
+	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 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;
+	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 wheelsound(Context & context) {
-	context.al = 17;
-	playchannel1(context);
-	showfirstuse(context);
-	putbackobstuff(context);
-	return;
+static 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 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);
+static 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 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 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 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 playguitar(Context & context) {
-	context.al = 14;
-	playchannel1(context);
-	showfirstuse(context);
-	putbackobstuff(context);
+static 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 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);
+static 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;
-notrightcont:
-	showseconduse(context);
-	putbackobstuff(context);
+}
+
+static 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 hotelbell(Context & context) {
-	context.al = 12;
+static 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);
-	showfirstuse(context);
-	putbackobstuff(context);
+	context.cx = 64;
+	hangon(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;
+static 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 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);
+static 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 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);
+static void titles(Context & context) {
+	clearpalette(context);
+	biblequote(context);
+	intro(context);
 	return;
 }
 
-static inline void usepipe(Context & context) {
-	context._cmp(context.data.byte(95), 255);
-	if (!context.flags.z()) goto pipewith;
-	withwhat(context);
+static 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;
-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;
+}
+
+static 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;
-	context.al = 14;
-	showpuztext(context);
-	putbackobstuff(context);
+	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 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 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;
-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';
+}
+
+static void credits(Context & context) {
+	clearpalette(context);
+	realcredits(context);
 	return;
-alreadyfull:
-	context.cx = 300;
-	context.al = 35;
-	showpuztext(context);
-	putbackobstuff(context);
+}
+
+static 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 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;
+static 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 useplinth(Context & context) {
-	context._cmp(context.data.byte(95), 255);
-	if (!context.flags.z()) goto plinthwith;
-	withwhat(context);
+static 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;
-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);
+}
+
+static 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;
-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;
+earlyendrun:
+	context.ax = context.pop();
+	context.ax = context.pop();
+	getridoftemptext(context);
+	clearbeforeload(context);
 	return;
 }
 
-static inline void chewy(Context & context) {
-	showfirstuse(context);
-	getanyad(context);
-	context.data.byte(context.bx+2) = 255;
-	context.data.byte(103) = 1;
+static 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 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;
+static 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 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;
+static 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 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;
+static 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 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);
+static 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;
-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;
+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;
-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;
+kernit:
+	context._sub(context.cl, 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;
+static 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;
-slabcwrong:
-	context.data.word(21) = 40;
-	context.data.word(25) = 94;
-	context.data.byte(27) = 1;
-	context.data.byte(26) = 1;
+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 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;
+static 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 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;
+static 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 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;
+static 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;
-slabfwrong:
-	context.data.word(21) = 40;
-	context.data.word(25) = 189;
-	context.data.byte(27) = 1;
-	context.data.byte(26) = 1;
+}
+
+static 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 useslab(Context & context) {
-	context._cmp(context.data.byte(95), 255);
-	if (!context.flags.z()) goto slabwith;
-	withwhat(context);
+static 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, 0xfe);
+	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;
-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);
+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, 0xfe);
+	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;
-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;
+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 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);
+static 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);
-	removesetobject(context);
+	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();
-	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);
+	kernchars(context);
+	context._add(context.bl, context.cl);
+	goto getloop;
+endword:
+	context._add(context.bl, 6);
+	context.al = 0;
 	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;
+endall:
+	context._add(context.bl, 6);
+	context.al = 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;
+static 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;
-}
-
-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;
+not160:
+	context._cmp(context.al, 130);
+	if (!context.flags.z()) goto not130;
+	context.al = 'Z'+2;
 	return;
-}
-
-static inline void useopenbox(Context & context) {
-	context._cmp(context.data.byte(95), 255);
-	if (!context.flags.z()) goto openboxwith;
-	withwhat(context);
+not130:
+	context._cmp(context.al, 161);
+	if (!context.flags.z()) goto not161;
+	context.al = 'Z'+3;
 	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);
+not161:
+	context._cmp(context.al, 162);
+	if (!context.flags.z()) goto not162;
+	context.al = 'Z'+4;
 	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;
+not162:
+	context._cmp(context.al, 163);
+	if (!context.flags.z()) goto not163;
+	context.al = 'Z'+5;
 	return;
-openboxwrong:
-	context.cx = 300;
-	context.al = 38;
-	showpuztext(context);
-	putbackobstuff(context);
+not163:
+	context._cmp(context.al, 164);
+	if (!context.flags.z()) goto not164;
+	context.al = 'Z'+6;
 	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);
+not164:
+	context._cmp(context.al, 165);
+	if (!context.flags.z()) goto not165;
+	context.al = ','-1;
 	return;
-wearingwatch:
-	showseconduse(context);
-	putbackobstuff(context);
+not165:
+	context._cmp(context.al, 168);
+	if (!context.flags.z()) goto not168;
+	context.al = 'A'-1;
 	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);
+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;
-wearingshades:
-	showseconduse(context);
-	putbackobstuff(context);
+nomod:
 	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);
+static 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 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;
+static 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 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;
+static 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 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;
+static 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 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;
+static 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 usedryer(Context & context) {
-	context.al = 12;
-	playchannel1(context);
-	showfirstuse(context);
-	context.data.byte(103) = 1;
+static 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 openlouis(Context & context) {
-	context.al = 5;
-	context.ah = 2;
-	context.cl = 3;
-	context.ch = 8;
-	entercode(context);
-	context.data.byte(103) = 1;
+static void makeworn(Context & context) {
+	context.data.byte(context.bx+12) = 'W'-'A';
+	context.data.byte(context.bx+13) = 'E'-'A';
 	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;
+static 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 openyourneighbour(Context & context) {
-	context.al = 255;
-	context.ah = 255;
-	context.cl = 255;
-	context.ch = 255;
-	entercode(context);
-	context.data.byte(103) = 1;
+static 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);


Commit: 1f063c947b34ba9e56fabcbdf838094da80b3727
    https://github.com/scummvm/scummvm/commit/1f063c947b34ba9e56fabcbdf838094da80b3727
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:39-07:00

Commit Message:
DREAMWEB: added stubs

Changed paths:
    engines/dreamweb/dreamweb.cpp



diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index 5943572..9e04147 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -133,3 +133,239 @@ Common::Error DreamWebEngine::run() {
 }
 
 } // End of namespace DreamWeb
+
+
+namespace dreamgen {
+void randomnumber(Context &context) {
+	::error("randomnumber");
+}
+
+void quickquit(Context &context) {
+	::error("quickquit");
+}
+
+void quickquit2(Context &context) {
+	::error("quickquit2");
+}
+
+void keyboardread(Context &context) {
+	::error("keyboardread");
+}
+
+void resetkeyboard(Context &context) {
+	::error("resetkeyboard");
+}
+
+void setkeyboardint(Context &context) {
+	::error("setkeyboardint");
+}
+
+void readfromfile(Context &context) {
+	::error("readfromfile");
+}
+
+void closefile(Context &context) {
+	::error("closefile");
+}
+
+void openforsave(Context &context) {
+	::error("openforsave");
+}
+
+void openfilenocheck(Context &context) {
+	::error("openfilenocheck");
+}
+
+void openfile(Context &context) {
+	::error("openfile");
+}
+
+void createfile(Context &context) {
+	::error("createfile");
+}
+
+void dontloadseg(Context &context) {
+	::error("dontloadseg");
+}
+
+void mousecall(Context &context) {
+	::error("mousecall");
+}
+
+void setmouse(Context &context) {
+	::error("setmouse");
+}
+
+void gettime(Context &context) {
+	::error("gettime");
+}
+
+void allocatemem(Context &context) {
+	::error("allocatemem");
+}
+
+void deallocatemem(Context &context) {
+	::error("deallocatemem");
+}
+
+void removeemm(Context &context) {
+	::error("removeemm");
+}
+
+void setupemm(Context &context) {
+	::error("setupemm");
+}
+
+void pitinterupt(Context &context) {
+	::error("pitinterupt");
+}
+
+void getridofpit(Context &context) {
+	::error("getridofpit");
+}
+
+void setuppit(Context &context) {
+	::error("setuppit");
+}
+
+void startdmablock(Context &context) {
+	::error("startdmablock");
+}
+
+void dmaend(Context &context) {
+	::error("dmaend");
+}
+
+void restoreems(Context &context) {
+	::error("restoreems");
+}
+
+void saveems(Context &context) {
+	::error("saveems");
+}
+
+void bothchannels(Context &context) {
+	::error("bothchannels");
+}
+
+void channel1only(Context &context) {
+	::error("channel1only");
+}
+
+void channel0only(Context &context) {
+	::error("channel0only");
+}
+
+void out22c(Context &context) {
+	::error("out22c");
+}
+
+void soundend(Context &context) {
+	::error("soundend");
+}
+
+void interupttest(Context &context) {
+	::error("interupttest");
+}
+
+void disablesoundint(Context &context) {
+	::error("disablesoundint");
+}
+
+void enablesoundint(Context &context) {
+	::error("enablesoundint");
+}
+
+void checksoundint(Context &context) {
+	::error("checksoundint");
+}
+
+void setsoundoff(Context &context) {
+	::error("setsoundoff");
+}
+
+void soundstartup(Context &context) {
+	::error("soundstartup");
+}
+
+void loadsecondsample(Context &context) {
+	::error("loadsecondsample");
+}
+
+void loadsample(Context &context) {
+	::error("loadsample");
+}
+
+void loadspeech(Context &context) {
+	::error("loadspeech");
+}
+
+void scanfornames(Context &context) {
+	::error("scanfornames");
+}
+
+void saveseg(Context &context) {
+	::error("saveseg");
+}
+
+void loadseg(Context &context) {
+	::error("loadseg");
+}
+
+void loadposition(Context &context) {
+	::error("loadposition");
+}
+
+void saveposition(Context &context) {
+	::error("saveposition");
+}
+
+void error(Context &context) {
+	::error("error");
+}
+
+void generalerror(Context &context) {
+	::error("generalerror");
+}
+
+void dosreturn(Context &context) {
+	::error("dosreturn");
+}
+
+void set16colpalette(Context &context) {
+	::error("set16colpalette");
+}
+
+void mode640x480(Context &context) {
+	::error("mode640x480");
+}
+
+void showgroup(Context &context) {
+	::error("showgroup");
+}
+
+void fadedos(Context &context) {
+	::error("fadedos");
+}
+
+void doshake(Context &context) {
+	::error("doshake");
+}
+
+void vsync(Context &context) {
+	::error("vsync");
+}
+
+void setmode(Context &context) {
+	::error("setmode");
+}
+
+void readoneblock(Context &context) {
+	::error("readoneblock");
+}
+
+void showpcx(Context &context) {
+	::error("showpcx");
+}
+
+} /*namespace dreamgen */


Commit: 9cf2a7ba0e686b35a4f1041f67c51cb9ef2fa867
    https://github.com/scummvm/scummvm/commit/9cf2a7ba0e686b35a4f1041f67c51cb9ef2fa867
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:44-07:00

Commit Message:
DREAMWEB: added tasm-recover tool

Changed paths:
  A devtools/tasmrecover/runtime.h
  A devtools/tasmrecover/tasm-recover
  A devtools/tasmrecover/tasm/__init__.py
  A devtools/tasmrecover/tasm/__init__.pyc
  A devtools/tasmrecover/tasm/cpp.py
  A devtools/tasmrecover/tasm/cpp.pyc
  A devtools/tasmrecover/tasm/lex.py
  A devtools/tasmrecover/tasm/lex.pyc
  A devtools/tasmrecover/tasm/op.py
  A devtools/tasmrecover/tasm/op.pyc
  A devtools/tasmrecover/tasm/parser.py
  A devtools/tasmrecover/tasm/parser.pyc
  A devtools/tasmrecover/tasm/proc.py
  A devtools/tasmrecover/tasm/proc.pyc



diff --git a/devtools/tasmrecover/runtime.h b/devtools/tasmrecover/runtime.h
new file mode 100644
index 0000000..5824728
--- /dev/null
+++ b/devtools/tasmrecover/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/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
new file mode 100755
index 0000000..c4214b2
--- /dev/null
+++ b/devtools/tasmrecover/tasm-recover
@@ -0,0 +1,11 @@
+#!/usr/bin/python
+
+from tasm.parser import parser
+from tasm.cpp import cpp
+
+p = parser()
+p.strip_path = 3
+context = p.parse('dreamweb/dreamweb.asm')
+p.link()
+generator = cpp(context, "dreamgen", blacklist = ['randomnumber', 'quickquit', 'quickquit2'])
+generator.generate('dreamweb') #start routine
diff --git a/devtools/tasmrecover/tasm/__init__.py b/devtools/tasmrecover/tasm/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/devtools/tasmrecover/tasm/__init__.pyc b/devtools/tasmrecover/tasm/__init__.pyc
new file mode 100644
index 0000000..8582b7b
Binary files /dev/null and b/devtools/tasmrecover/tasm/__init__.pyc differ
diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
new file mode 100644
index 0000000..53338c1
--- /dev/null
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -0,0 +1,544 @@
+import op, traceback, re, proc
+from copy import copy
+proc_module = proc
+
+class CrossJump(Exception):
+	pass
+
+def parse_bin(s):
+	b = s.group(1)
+	v = hex(int(b, 2))
+	#print "BINARY: %s -> %s" %(b, v)
+	return v
+
+class cpp:
+	def __init__(self, context, namespace, skip_first = 0, blacklist = []):
+		self.namespace = namespace
+		fname = namespace + ".cpp"
+		header = namespace + ".h"
+		self.fd = open(fname, "wt")
+		self.hd = open(header, "wt")
+		self.context = context
+		self.data_seg = context.binary_data
+		self.procs = context.proc_list
+		self.skip_first = skip_first
+		self.proc_queue = []
+		self.proc_done = []
+		self.blacklist = blacklist
+		self.failed = list(blacklist)
+		self.translated = []
+		self.proc_addr = []
+		self.forwards = []
+		self.fd.write("""#include \"%s\"
+
+namespace %s {
+
+""" %(header, namespace))
+
+	def expand_cb(self, match):
+		name = match.group(0).lower()
+		if len(name) == 2 and \
+			((name[0] in ['a', 'b', 'c', 'd'] and name[1] in ['h', 'x', 'l']) or name in ['si', 'di', 'es', 'ds', 'cs']):
+			return "context.%s" %name
+
+		if self.indirection == -1:
+			try:
+				offset,p,p = self.context.get_offset(name)
+				print "OFFSET = %d" %offset
+				self.indirection = 0
+				return str(offset)
+			except:
+				pass
+		
+		g = self.context.get_global(name)
+		if isinstance(g, op.const):
+			value = self.expand(g.value)
+		elif isinstance(g, proc.proc):
+			if self.indirection != -1:
+				raise Exception("invalid proc label usage")
+			value = str(g.offset)
+			self.indirection = 0
+		else:
+			size = g.size
+			if size == 0:
+				raise Exception("invalid var '%s' size %u" %(name, size))
+			if self.indirection == 0:
+				value = "context.data.%s(%d)" %("byte" if size == 1 else "word", g.offset)
+			elif self.indirection == -1:
+				value = "%s" %g.offset
+				self.indirection = 0
+			else:
+				raise Exception("invalid indirection %d" %self.indirection)
+		return value
+	
+	def get_size(self, expr):
+		#print 'get_size("%s")' %expr
+		try:
+			v = self.context.parse_int(expr)
+			return 1 if v < 256 else 2
+		except:
+			pass
+
+		if re.match(r'byte\s+ptr\s', expr) is not None:
+			return 1
+
+		if re.match(r'word\s+ptr\s', expr) is not None:
+			return 2
+
+		if len(expr) == 2 and expr[0] in ['a', 'b', 'c', 'd'] and expr[1] in ['h', 'l']:
+			return 1
+		if expr in ['ax', 'bx', 'cx', 'dx', 'si', 'di', 'sp', 'bp', 'ds', 'cs', 'es', 'fs']:
+			return 2
+
+		m = re.match(r'[a-zA-Z_]\w*', expr)
+		if m is not None:
+			name = m.group(0)
+			try:
+				g = self.context.get_global(name)
+				return g.size
+			except:
+				pass
+
+		return 0
+
+	def expand(self, expr, def_size = 0):
+		#print "EXPAND \"%s\"" %expr
+		size = self.get_size(expr) if def_size == 0 else def_size
+		indirection = 0
+		seg = None
+		reg = True
+
+		m = re.match(r'seg\s+(.*?)$', expr)
+		if m is not None:
+			return "context.ds"
+		
+		match_id = True
+		m = re.match(r'offset\s+(.*?)$', expr)
+		if m is not None:
+			indirection -= 1
+			expr = m.group(1).strip()
+
+		m = re.match(r'byte\s+ptr\s+(.*?)$', expr)
+		if m is not None:
+			expr = m.group(1).strip()
+
+		m = re.match(r'word\s+ptr\s+(.*?)$', expr)
+		if m is not None:
+			expr = m.group(1).strip()
+
+		m = re.match(r'\[(.*)\]$', expr)
+		if m is not None:
+			indirection += 1
+			expr = m.group(1).strip()
+
+		m = re.match(r'(\w{2,2}):(.*)$', expr)
+		if m is not None:
+			seg = m.group(1)
+			expr = m.group(2).strip()
+			print "SEGMENT %s, remains: %s" %(seg, expr)
+
+		m = re.match(r'(([abcd][xhl])|si|di|bp|sp)([\+-].*)?$', expr)
+		if m is not None:
+			reg = m.group(1)
+			plus = m.group(3)
+			if plus is not None:
+				plus = self.expand(plus)
+			else:
+				plus = ""
+			match_id = False
+			#print "COMMON_REG: ", reg, plus
+			expr = "context.%s%s" %(reg, plus)
+
+		expr = re.sub(r'\b([0-9][a-fA-F0-9]*)h', '0x\\1', expr)
+		expr = re.sub(r'\b([0-1]+)b', parse_bin, expr)
+		expr = re.sub(r'"(.)"', '\'\\1\'', expr)
+		if match_id:
+			#print "BEFORE: %d" %indirection
+			self.indirection = indirection
+			expr = re.sub(r'\b[a-zA-Z_][a-zA-Z0-9_]+\b', self.expand_cb, expr)
+			indirection = self.indirection
+			#print "AFTER: %d" %indirection
+		
+		if indirection == 1:
+			if size == 1:
+				expr = "context.data.byte(%s)" %expr
+			elif size == 2:
+				expr = "context.data.word(%s)" %expr
+			else:
+				expr = "@invalid size 0"
+		elif indirection == 0:
+			pass
+		elif indirection == -1:
+			expr = "&%s" %expr
+		else:
+			raise Exception("invalid indirection %d" %indirection)
+		return expr
+	
+	def mangle_label(self, name):
+		name = name.lower()
+		return re.sub(r'\$', '_tmp', name)
+
+	def resolve_label(self, name):
+		name = name.lower()
+		if not name in self.proc.labels:
+			try:
+				offset, proc, pos = self.context.get_offset(name)
+			except:
+				print "no label %s, trying procedure" %name
+				proc = self.context.get_global(name)
+				pos = 0
+				if not isinstance(proc, proc_module.proc):
+					raise CrossJump("cross-procedure jump to non label and non procedure %s" %(name))
+			self.proc.labels.add(name)
+			for i in xrange(0, len(self.unbounded)):
+				u = self.unbounded[i]
+				if u[1] == proc:
+					if pos < u[2]:
+						self.unbounded[i] = (name, proc, pos)
+				return self.mangle_label(name)
+			self.unbounded.append((name, proc, pos))
+		
+		return self.mangle_label(name)
+
+	def jump_to_label(self, name):
+		jump_proc = False
+		if name in self.blacklist:
+			jump_proc = True
+		
+		if self.context.has_global(name) :
+			g = self.context.get_global(name)
+			if isinstance(g, proc_module.proc):
+				jump_proc = True
+		
+		if jump_proc:
+			self.add_forward(name)
+			return "{ %s(context); return; }" %name
+		else:
+			return "goto %s" %self.resolve_label(name)
+	
+	def _label(self, name):
+		self.body += "%s:\n" %self.mangle_label(name)
+	
+	def schedule(self, name):
+		name = name.lower()
+		if name in self.proc_queue or name in self.proc_done or name in self.failed:
+			return
+		print "+scheduling function %s..." %name
+		self.proc_queue.append(name)
+
+	def add_forward(self, name):
+		if name not in self.forwards and name not in self.failed:
+			self.forwards.append(name)
+	
+	def _call(self, name):
+		name = name.lower()
+		if name == 'ax':
+			self.body += "\t__dispatch_call(context, %s);\n" %self.expand('ax', 2)
+			return
+		self.body += "\t%s(context);\n" %name
+		self.add_forward(name);
+		self.schedule(name)
+
+	def _ret(self):
+		self.body += "\treturn;\n"
+
+	def parse2(self, dst, src):
+		dst_size, src_size = self.get_size(dst), self.get_size(src)
+		if dst_size == 0:
+			if src_size == 0:
+				raise Exception("both sizes are 0")
+			dst_size = src_size
+		if src_size == 0:
+			src_size = dst_size
+
+		dst = self.expand(dst, dst_size)
+		src = self.expand(src, src_size)
+		return dst, src
+
+	def _mov(self, dst, src):
+		self.body += "\t%s = %s;\n" %self.parse2(dst, src)
+
+	def _add(self, dst, src):
+		self.body += "\tcontext._add(%s, %s);\n" %self.parse2(dst, src)
+
+	def _sub(self, dst, src):
+		self.body += "\tcontext._sub(%s, %s);\n" %self.parse2(dst, src)
+
+	def _and(self, dst, src):
+		self.body += "\tcontext._and(%s, %s);\n" %self.parse2(dst, src)
+
+	def _or(self, dst, src):
+		self.body += "\tcontext._or(%s, %s);\n" %self.parse2(dst, src)
+
+	def _xor(self, dst, src):
+		self.body += "\tcontext._xor(%s, %s);\n" %self.parse2(dst, src)
+
+	def _neg(self, dst):
+		dst = self.expand(dst)
+		self.body += "\tcontext._neg(%s);\n" %(dst)
+
+	def _cbw(self):
+		self.body += "\tcontext.ax.cbw();\n"
+
+	def _shr(self, dst, src):
+		self.body += "\tcontext._shr(%s, %s);\n" %self.parse2(dst, src)
+
+	def _shl(self, dst, src):
+		self.body += "\tcontext._shl(%s, %s);\n" %self.parse2(dst, src)
+
+	def _sar(self, dst, src):
+		self.body += "\tcontext._sar(%s%s);\n" %self.parse2(dst, src)
+
+	def _sal(self, dst, src):
+		self.body += "\tcontext._sal(%s, %s);\n" %self.parse2(dst, src)
+
+	def _rcl(self, dst, src):
+		self.body += "\tcontext._rcl(%s, %s);\n" %self.parse2(dst, src)
+
+	def _rcr(self, dst, src):
+		self.body += "\tcontext._rcr(%s, %s);\n" %self.parse2(dst, src)
+
+	def _mul(self, src):
+		src = self.expand(src)
+		self.body += "\tcontext._mul(%s);\n" %(src)
+
+	def _div(self, src):
+		src = self.expand(src)
+		self.body += "\tcontext._div(%s);\n" %(src)
+
+	def _inc(self, dst):
+		dst = self.expand(dst)
+		self.body += "\tcontext._add(%s, 1);\n" %(dst)
+
+	def _dec(self, dst):
+		dst = self.expand(dst)
+		self.body += "\tcontext._sub(%s, 1);\n" %(dst)
+
+	def _cmp(self, a, b):
+		self.body += "\tcontext._cmp(%s, %s);\n" %self.parse2(a, b)
+
+	def _test(self, a, b):
+		self.body += "\tcontext._test(%s, %s);\n" %self.parse2(a, b)
+
+	def _js(self, label):
+		self.body += "\tif (context.flags.s()) %s;\n" %(self.jump_to_label(label))
+
+	def _jns(self, label):
+		self.body += "\tif (!context.flags.s()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jz(self, label):
+		self.body += "\tif (context.flags.z()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jnz(self, label):
+		self.body += "\tif (!context.flags.z()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jl(self, label):
+		self.body += "\tif (context.flags.l()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jg(self, label):
+		self.body += "\tif (!context.flags.g()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jle(self, label):
+		self.body += "\tif (context.flags.le()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jge(self, label):
+		self.body += "\tif (!context.flags.ge()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jc(self, label):
+		self.body += "\tif (context.flags.c()) %s;\n" %(self.jump_to_label(label)) 
+
+	def _jnc(self, label):
+		self.body += "\tif (!context.flags.c()) %s;\n" %(self.jump_to_label(label)) 
+	
+	def _xchg(self, dst, src):
+		self.body += "\tcontext._xchg(%s, %s);\n" %self.parse2(dst, src)
+
+	def _jmp(self, label):
+		self.body += "\t%s;\n" %(self.jump_to_label(label)) 
+
+	def _loop(self, label):
+		self.body += "\tif (--context.cx) %s;\n" %self.jump_to_label(label)
+
+	def _push(self, regs):
+		p = str();
+		for r in regs:
+			r = self.expand(r)
+			p += "\tcontext.push(%s);\n" %(r)
+		self.body += p
+
+	def _pop(self, regs):
+		p = str();
+		for r in regs:
+			self.temps_count -= 1
+			i = self.temps_count
+			r = self.expand(r)
+			p += "\t%s = context.pop();\n" %r
+		self.body += p
+
+	def _rep(self):
+		self.body += "\twhile(--context.cx) ";
+
+	def _lodsb(self):
+		self.body += "\tcontext._lodsb();\n";
+
+	def _lodsw(self):
+		self.body += "\tcontext._lodsw();\n";
+
+	def _stosb(self):
+		self.body += "\tcontext._stosb();\n";
+
+	def _stosw(self):
+		self.body += "\tcontext._stosw();\n";
+
+	def _movsb(self):
+		self.body += "\tcontext._movsb();\n ";
+
+	def _movsw(self):
+		self.body += "\tcontext._movsw();\n ";
+
+	def __proc(self, name, def_skip = 0):
+		try:
+			skip = def_skip
+			self.temps_count = 0
+			self.temps_max = 0
+			if self.context.has_global(name):
+				self.proc = self.context.get_global(name)
+			else:
+				print "No procedure named %s, trying label" %name
+				off, src_proc, skip = self.context.get_offset(name)
+				
+				self.proc = proc_module.proc(name)
+				self.proc.stmts = copy(src_proc.stmts)
+				self.proc.labels = copy(src_proc.labels)
+				#for p in xrange(skip, len(self.proc.stmts)):
+				#	s = self.proc.stmts[p]
+				#	if isinstance(s, op.basejmp):
+				#		o, p, s = self.context.get_offset(s.label)
+				#		if p == src_proc and s < skip:
+				#			skip = s
+			
+			
+			self.proc_addr.append((name, self.proc.offset))
+			self.body = str()
+			self.body += "static void %s(Context & context) {\n" %name;
+			self.proc.optimize()
+			self.unbounded = []
+			self.proc.visit(self, skip)
+
+			#adding remaining labels:
+			for i in xrange(0, len(self.unbounded)):
+				u = self.unbounded[i]
+				print "UNBOUNDED: ", u
+				proc = u[1]
+				for p in xrange(u[2], len(proc.stmts)):
+					s = proc.stmts[p]
+					if isinstance(s, op.basejmp):
+						self.resolve_label(s.label)
+			
+			#adding statements
+			for label, proc, offset in self.unbounded:
+				self.body += "/*continuing to unbounded code: %s from %s:%d-%d*/\n" %(label, proc.name, offset, len(proc.stmts))
+				start = len(self.proc.stmts)
+				self.proc.add_label(label)
+				for s in proc.stmts[offset:]:
+					if isinstance(s, op.label):
+						self.proc.labels.add(s.name)
+					self.proc.stmts.append(s)
+				self.proc.add("ret")
+				print "skipping %d instructions, todo: %d" %(start, len(self.proc.stmts) - start)
+				self.proc.visit(self, start)
+			self.body += "}\n";
+			self.translated.insert(0, self.body)
+			self.proc = None
+			if self.temps_count > 0:
+				raise Exception("temps count == %d at the exit of proc" %self.temps_count);
+			return True
+		except (CrossJump, op.Unsupported) as e:
+			print "%s: ERROR: %s" %(name, e)
+			self.failed.append(name)
+		except:
+			raise
+
+	def get_type(self, width):
+		return "uint%d_t" %(width * 8)
+	
+	def write_stubs(self, fname, procs):
+		fd = open(fname, "wt")
+		fd.write("namespace %s {\n" %self.namespace)
+		for p in procs:
+			fd.write("void %s(Context &context) {\n\t::error(\"%s\");\n}\n\n" %(p, p))
+		fd.write("} /*namespace %s */\n" %self.namespace)
+		fd.close()
+
+
+	def generate(self, start):
+		#print self.prologue()
+		#print context
+		self.proc_queue.append(start)
+		while len(self.proc_queue):
+			name = self.proc_queue.pop()
+			if name in self.failed or name in self.proc_done:
+				continue
+			if len(self.proc_queue) == 0 and len(self.procs) > 0:
+				print "queue's empty, adding remaining procs:"
+				for p in self.procs:
+					self.schedule(p)
+				self.procs = []
+			print "continuing on %s" %name
+			self.proc_done.append(name)
+			self.__proc(name)
+		self.write_stubs("_stubs.cpp", self.failed)
+		done, failed = len(self.proc_done), len(self.failed)
+		for f in self.forwards:
+			if f not in self.failed:
+				self.fd.write("static void %s(Context &context);\n" %f)
+		self.fd.write("\n")
+		self.fd.write("\n".join(self.translated))
+		self.fd.write("\n\n")
+		print "%d ok, %d failed of %d, %.02g%% translated" %(done, failed, done + failed, 100.0 * done / (done + failed))
+		print "\n".join(self.failed)
+		data_decl = "struct Data : public Segment {\n\t\tData();\n"
+		data_impl = "Data::Data() {\n"
+		data_bin = self.data_seg
+		data_impl += "\tstatic const uint8 src[] = {\n\t\t"
+		n = 0
+		for v in data_bin:
+			data_impl += "%s, " %v
+			n += 1
+			if (n & 0xf) == 0:
+				data_impl += "\n\t\t"
+		data_impl += "};\ndata.assign(src, src + sizeof(src));\n"
+		hid = "TASMRECOVER_%s_STUBS_H__" %self.namespace.upper()
+		data_decl += "\t};\n\n"
+		data_impl += "\t};\n\n"
+		self.hd.write("""#ifndef %s
+#define %s
+""" %(hid, hid))
+		self.hd.write(
+"""\n#\tinclude "runtime.h"
+
+namespace %s {
+
+	%s
+	typedef RegisterContext<Data> Context;
+
+	void __dispatch_call(Context &context, unsigned addr);
+	void __start(Context &context);
+
+""" %(self.namespace, data_decl))
+		self.fd.write(data_impl)
+		
+		for f in self.failed:
+			self.hd.write("\tvoid %s(Context &context);\n" %f)
+		self.hd.write("\n}\n\n#endif\n")
+		self.hd.close()
+		
+		self.fd.write("\nvoid __start(Context &context) { %s(context); }\n" %start)
+		
+		self.fd.write("\nvoid __dispatch_call(Context &context, unsigned addr) {\n\tswitch(addr) {\n")
+		self.proc_addr.sort(cmp = lambda x, y: x[1] - y[1])
+		for name,addr in self.proc_addr:
+			self.fd.write("\t\tcase 0x%04x: %s(context); break;\n" %(addr, name))
+		self.fd.write("\n\t}\n}\n\n} /*namespace*/\n")
+
+		self.fd.close()
diff --git a/devtools/tasmrecover/tasm/cpp.pyc b/devtools/tasmrecover/tasm/cpp.pyc
new file mode 100644
index 0000000..b0406b3
Binary files /dev/null and b/devtools/tasmrecover/tasm/cpp.pyc differ
diff --git a/devtools/tasmrecover/tasm/lex.py b/devtools/tasmrecover/tasm/lex.py
new file mode 100644
index 0000000..ba66611
--- /dev/null
+++ b/devtools/tasmrecover/tasm/lex.py
@@ -0,0 +1,52 @@
+def parse_args(text):
+	#print "parsing: [%s]" %text
+	escape = False
+	string = False
+	result = []
+	token = str()
+	value = 0;
+	for c in text:
+		#print "[%s]%s: %s: %s" %(token, c, escape, string)
+		if c == '\\':
+			escape = True
+			continue
+
+		if escape:
+			if not string:
+				raise SyntaxError("escape found in no string: %s" %text);
+	
+			#print "escaping[%s]" %c
+			escape = False
+			token += c
+			continue
+
+		if string:
+			if c == '\'' or c == '"':
+				string = False
+
+			token += c
+			continue
+		
+		if c == '\'' or c == '"':
+			string = True
+			token += c
+			continue
+
+		if c == ',':
+			result.append(token.strip())
+			token = str()
+			continue
+
+		if c == ';': #comment, bailing out
+			break
+		
+		token += c
+	token = token.strip()
+	if len(token):
+		result.append(token)
+	#print result
+	return result
+
+def compile(width, data):
+	print data
+	return data
diff --git a/devtools/tasmrecover/tasm/lex.pyc b/devtools/tasmrecover/tasm/lex.pyc
new file mode 100644
index 0000000..aaab26e
Binary files /dev/null and b/devtools/tasmrecover/tasm/lex.pyc differ
diff --git a/devtools/tasmrecover/tasm/op.py b/devtools/tasmrecover/tasm/op.py
new file mode 100644
index 0000000..c77eda2
--- /dev/null
+++ b/devtools/tasmrecover/tasm/op.py
@@ -0,0 +1,394 @@
+import re
+import lex
+
+class Unsupported(Exception):
+	pass
+
+class var:
+	def __init__(self, size, offset):
+		self.size = size
+		self.offset = offset
+
+class const:
+	def __init__(self, value):
+		self.value = value
+
+class reg:
+	def __init__(self, name):
+		self.name = name
+	def size(self):
+		return 2 if self.name[1] == 'x' else 1
+	def __str__(self):
+		return "<register %s>" %self.name
+
+class unref:
+	def __init__(self, exp):
+		self.exp = exp
+	def __str__(self):
+		return "<unref %s>" %self.exp
+
+class ref:
+	def __init__(self, name):
+		self.name = name
+	def __str__(self):
+		return "<ref %s>" %self.name
+
+class glob:
+	def __init__(self, name):
+		self.name = name
+	def __str__(self):
+		return "<global %s>" %self.name
+
+class segment:
+	def __init__(self, name):
+		self.name = name
+	def __str__(self):
+		return "<segment %s>" %self.name
+
+class baseop(object):
+	def parse_arg(self, arg):
+		return arg
+
+	def split(self, text):
+		a, b = lex.parse_args(text)
+		return self.parse_arg(a), self.parse_arg(b)
+	def __str__(self):
+		return str(self.__class__)
+
+class basejmp(baseop):
+	pass
+
+class _call(baseop):
+	def __init__(self, arg):
+		self.name = arg
+	def visit(self, visitor):
+		visitor._call(self.name)
+	def __str__(self):
+		return "call(%s)" %self.name
+
+class _rep(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._rep()
+
+class _mov(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._mov(self.dst, self.src)
+	def __str__(self):
+		return "mov(%s, %s)" %(self.dst, self.src)
+
+class _mov2(baseop):
+	def __init__(self, dst, src):
+		self.dst, self.src = dst, src
+	def visit(self, visitor):
+		visitor._mov(self.dst, self.src)
+
+class _shr(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._shr(self.dst, self.src)
+
+class _shl(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._shl(self.dst, self.src)
+
+class _ror(baseop):
+	def __init__(self, arg):
+		pass
+
+class _rol(baseop):
+	def __init__(self, arg):
+		pass
+
+class _sar(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._sar(self.dst, self.src)
+
+class _sal(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._sal(self.dst, self.src)
+
+class _rcl(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._rcl(self.dst, self.src)
+
+class _rcr(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._rcr(self.dst, self.src)
+
+class _neg(baseop):
+	def __init__(self, arg):
+		self.arg = arg
+	def visit(self, visitor):
+		visitor._neg(self.arg)
+
+class _dec(baseop):
+	def __init__(self, arg):
+		self.dst = arg
+	def visit(self, visitor):
+		visitor._dec(self.dst)
+
+class _inc(baseop):
+	def __init__(self, arg):
+		self.dst = arg
+	def visit(self, visitor):
+		visitor._inc(self.dst)
+
+class _add(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._add(self.dst, self.src)
+
+class _sub(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._sub(self.dst, self.src)
+
+class _mul(baseop):
+	def __init__(self, arg):
+		self.arg = self.parse_arg(arg)
+	def visit(self, visitor):
+		visitor._mul(self.arg)
+
+class _div(baseop):
+	def __init__(self, arg):
+		self.arg = self.parse_arg(arg)
+	def visit(self, visitor):
+		visitor._div(self.arg)
+
+class _and(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._and(self.dst, self.src)
+
+class _xor(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._xor(self.dst, self.src)
+
+class _or(baseop):
+	def __init__(self, arg):
+		self.dst, self.src = self.split(arg)
+	def visit(self, visitor):
+		visitor._or(self.dst, self.src)
+
+class _cmp(baseop):
+	def __init__(self, arg):
+		self.a, self.b = self.split(arg)
+	def visit(self, visitor):
+		visitor._cmp(self.a, self.b)
+
+class _test(baseop):
+	def __init__(self, arg):
+		self.a, self.b = self.split(arg)
+	def visit(self, visitor):
+		visitor._test(self.a, self.b)
+
+class _xchg(baseop):
+	def __init__(self, arg):
+		self.a, self.b = self.split(arg)
+	def visit(self, visitor):
+		visitor._xchg(self.a, self.b)
+
+class _jnz(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jnz(self.label)
+
+class _jz(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jz(self.label)
+
+class _jc(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jc(self.label)
+
+class _jnc(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jnc(self.label)
+
+class _js(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._js(self.label)
+
+class _jns(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jns(self.label)
+
+class _jl(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jl(self.label)
+
+class _jg(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jg(self.label)
+
+class _jle(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jle(self.label)
+
+class _jge(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jge(self.label)
+
+class _jmp(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._jmp(self.label)
+
+class _loop(basejmp):
+	def __init__(self, label):
+		self.label = label
+	def visit(self, visitor):
+		visitor._loop(self.label)
+
+class _push(baseop):
+	def __init__(self, arg):
+		self.regs = []
+		for r in arg.split():
+			self.regs.append(self.parse_arg(r))
+	def visit(self, visitor):
+		visitor._push(self.regs)
+
+class _pop(baseop):
+	def __init__(self, arg):
+		self.regs = []
+		for r in arg.split():
+			self.regs.append(self.parse_arg(r))
+	def visit(self, visitor):
+		visitor._pop(self.regs)
+
+class _ret(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._ret()
+
+class _lodsb(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._lodsb()
+
+class _lodsw(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._lodsw()
+
+class _stosw(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._stosw()
+
+class _stosb(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._stosb()
+
+class _movsw(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._movsw()
+
+class _movsb(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._movsb()
+
+class _in(baseop):
+	def __init__(self, arg):
+		self.arg = arg
+	def visit(self, visitor):
+		raise Unsupported("input from port: %s" %self.arg)
+
+class _out(baseop):
+	def __init__(self, arg):
+		self.arg = arg
+	def visit(self, visitor):
+		raise Unsupported("out to port: %s" %self.arg)
+
+class _cli(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		raise Unsupported("cli")
+
+class _sti(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		raise Unsupported("sli")
+
+class _int(baseop):
+	def __init__(self, arg):
+		self.arg = arg
+	def visit(self, visitor):
+		raise Unsupported("interrupt: %s" %self.arg)
+
+class _iret(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		raise Unsupported("interrupt return")
+
+class _cbw(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		visitor._cbw()
+
+class _nop(baseop):
+	def __init__(self, arg):
+		pass
+	def visit(self, visitor):
+		pass
+
+class label(baseop):
+	def __init__(self, name):
+		self.name = name
+	def visit(self, visitor):
+		visitor._label(self.name)
+
diff --git a/devtools/tasmrecover/tasm/op.pyc b/devtools/tasmrecover/tasm/op.pyc
new file mode 100644
index 0000000..2e212ae
Binary files /dev/null and b/devtools/tasmrecover/tasm/op.pyc differ
diff --git a/devtools/tasmrecover/tasm/parser.py b/devtools/tasmrecover/tasm/parser.py
new file mode 100644
index 0000000..8dbf54c
--- /dev/null
+++ b/devtools/tasmrecover/tasm/parser.py
@@ -0,0 +1,248 @@
+import os, re
+from proc import proc
+import lex
+import op
+
+class parser:
+	def __init__(self):
+		self.strip_path = 0
+		self.__globals = {}
+		self.__offsets = {}
+		self.__stack = []
+		self.proc = None
+		self.proc_list = []
+		self.binary_data = []
+
+		self.symbols = []
+		self.link_later = []
+
+	def visible(self):
+		for i in self.__stack:
+			if not i or i == 0:
+				return False
+		return True
+
+	def push_if(self, text):
+		value = self.eval(text)
+		#print "if %s -> %s" %(text, value)
+		self.__stack.append(value)
+
+	def push_else(self):
+		#print "else"
+		self.__stack[-1] = not self.__stack[-1]
+
+	def pop_if(self):
+		#print "endif"
+		return self.__stack.pop()
+
+	def set_global(self, name, value):
+		if len(name) == 0:
+			raise Exception("empty name is not allowed")
+		name = name.lower()
+		#print "adding global %s -> %s" %(name, value)
+		if self.__globals.has_key(name):
+			raise Exception("global %s was already defined", name)
+		self.__globals[name] = value
+
+	def get_global(self, name):
+		name = name.lower()
+		return self.__globals[name]
+
+	def has_global(self, name):
+		name = name.lower()
+		return self.__globals.has_key(name)
+
+	def set_offset(self, name, value):
+		if len(name) == 0:
+			raise Exception("empty name is not allowed")
+		name = name.lower()
+		#print "adding global %s -> %s" %(name, value)
+		if self.__offsets.has_key(name):
+			raise Exception("global %s was already defined", name)
+		self.__offsets[name] = value
+
+	def get_offset(self, name):
+		name = name.lower()
+		return self.__offsets[name]
+
+	def include(self, basedir, fname):
+		path = fname.split('\\')[self.strip_path:]
+		path = os.path.join(basedir, os.path.pathsep.join(path))
+		#print "including %s" %(path)
+		
+		self.parse(path)
+
+	def eval(self, stmt):
+		try: 
+			return self.parse_int(stmt)
+		except:
+			pass
+		value = self.__globals[stmt.lower()].value
+		return int(value)
+	
+	def expr_callback(self, match):
+		name = match.group(1).lower()
+		g = self.get_global(name)
+		if isinstance(g, op.const):
+			return g.value
+		else:
+			return "0x%04x" %g.offset
+	
+	def eval_expr(self, expr):
+		n = 1
+		while n > 0:
+			expr, n = re.subn(r'\b([a-zA-Z_]+[a-zA-Z0-9_]*)', self.expr_callback, expr)
+		return eval(expr)
+	
+	def expand_globals(self, text):
+		return text
+	
+	def fix_dollar(self, v):
+		return re.sub(r'\$', "%d" %len(self.binary_data), v)
+
+	def parse_int(self, v):
+		if re.match(r'[01]+b$', v):
+			v = int(v[:-1], 2)
+		if re.match(r'[\+-]?[0-9a-f]+h$', v):
+			v = int(v[:-1], 16)
+		return int(v)
+	
+	def compact_data(self, width, data):
+		#print "COMPACTING %d %s" %(width, data)
+		r = []
+		base = 0x100 if width == 1 else 0x10000
+		for v in data:
+			if v[0] == '"':
+				if v[-1] != '"':
+					raise Exception("invalid string %s" %v)
+				if width == 2:
+					raise Exception("string with data width more than 1") #we could allow it :)
+				for i in xrange(1, len(v) - 1):
+					r.append(ord(v[i]))
+				continue
+			
+			m = re.match(r'(\w+)\s+dup\s+\((\s*\S+\s*)\)', v)
+			if m is not None:
+				#we should parse that
+				n = self.parse_int(m.group(1))
+				if m.group(2) != '?':
+					value = self.parse_int(m.group(2))
+				else:
+					value = 0
+				for i in xrange(0, n):
+					v = value
+					for b in xrange(0, width):
+						r.append(v & 0xff);
+						v >>= 8
+				continue
+			
+			try:
+				v = self.parse_int(v)
+				if v < 0:
+					v += base
+			except:
+				#global name
+				print "global/expr: %s" %v
+				try:
+					g = self.get_global(v)
+					v = g.offset
+				except:
+					print "unknown address %s" %(v)
+					self.link_later.append((len(self.binary_data) + len(r), v))
+					v = 0
+		
+			for b in xrange(0, width):
+				r.append(v & 0xff);
+				v >>= 8
+		#print r
+		return r
+
+	def parse(self, fname):
+#		print "opening file %s..." %(fname, basedir)
+		fd = open(fname, 'rb')
+		for line in fd:
+			line = line.strip()
+			if len(line) == 0 or line[0] == ';' or line[0] == chr(0x1a):
+				continue
+
+			#print cmd
+			m = re.match('(\w+)\s*?:', line)
+			if m is not None:
+				line = line[len(m.group(0)):]
+				if self.visible():
+					name = m.group(1)
+					if self.proc is not None:
+						self.proc.add_label(name)
+					self.set_offset(name, (len(self.binary_data), self.proc, len(self.proc.stmts) if self.proc is not None else 0))
+
+			cmd = line.split()
+			if len(cmd) == 0:
+				continue
+			
+			cmd0 = str(cmd[0])
+			if cmd0 == 'if':
+				self.push_if(cmd[1])
+				continue
+			elif cmd0 == 'else':
+				self.push_else()
+				continue
+			elif cmd0 == 'endif':
+				self.pop_if()
+				continue
+			
+			if not self.visible():
+				continue
+
+			if cmd0 == 'db' or cmd0 == 'dw' or cmd0 == 'dd':
+				arg = " ".join(cmd[1:])
+				binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd0[1]]
+				self.binary_data += self.compact_data(binary_width, lex.parse_args(arg))
+				continue
+			elif cmd0 == 'include':
+				self.include(os.path.dirname(fname), cmd[1])
+				continue
+			elif cmd0 == 'endp':
+				self.proc = None
+				continue
+			elif cmd0 == 'assume':
+				print "skipping: %s" %line
+				continue
+			elif cmd0 == 'rep':
+				self.proc.add(cmd0)
+				self.proc.add(" ".join(cmd[1:]))
+				continue
+			
+			if len(cmd) >= 3:
+				cmd1 = cmd[1]
+				if cmd1 == 'equ':
+					v = cmd[2]
+					self.set_global(cmd0, op.const(self.fix_dollar(v)))
+				elif cmd1 == 'db' or cmd1 == 'dw' or cmd1 == 'dd':
+					binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd1[1]]
+					self.binary_data += self.compact_data(binary_width, lex.parse_args(" ".join(cmd[2:])))
+					self.set_global(cmd0.lower(), op.var(binary_width, len(self.binary_data)))
+					continue
+				elif cmd1 == 'proc':
+					name = cmd0.lower()
+					self.proc = proc(name)
+					print "procedure %s, #%d" %(name, len(self.proc_list))
+					self.proc_list.append(name)
+					self.set_global(name, self.proc)
+					continue
+			if (self.proc):
+				self.proc.add(line)
+			else:
+				#print line
+				pass
+			
+		fd.close()
+		return self
+
+	def link(self):
+		for addr, expr in self.link_later:
+			v = self.eval_expr(expr)
+			print "link: patching %04x -> %04x" %(addr, v)
+			while v != 0:
+				self.binary_data[addr] = v & 0xff
+				addr += 1
+				v >>= 8
diff --git a/devtools/tasmrecover/tasm/parser.pyc b/devtools/tasmrecover/tasm/parser.pyc
new file mode 100644
index 0000000..d7049c8
Binary files /dev/null and b/devtools/tasmrecover/tasm/parser.pyc differ
diff --git a/devtools/tasmrecover/tasm/proc.py b/devtools/tasmrecover/tasm/proc.py
new file mode 100644
index 0000000..4337d4c
--- /dev/null
+++ b/devtools/tasmrecover/tasm/proc.py
@@ -0,0 +1,84 @@
+import re
+import op
+
+class proc:
+	last_addr = 0xc000
+	
+	def __init__(self, name):
+		self.name = name
+		self.calls = []
+		self.stmts = []
+		self.labels = set()
+		self.__label_re = re.compile(r'^(\S+):(.*)$')
+		self.offset = proc.last_addr
+		proc.last_addr += 4
+
+	def add_label(self, label):
+		self.stmts.append(op.label(label))
+		self.labels.add(label)
+	
+	def optimize(self):
+		print "optimizing..."
+		#trivial simplifications, removing last ret
+		while len(self.stmts) and isinstance(self.stmts[-1], op.label):
+			print "stripping last label"
+			self.stmts.pop()
+		#if isinstance(self.stmts[-1], op._ret) and (len(self.stmts) < 2 or not isinstance(self.stmts[-2], op.label)):
+		#	print "stripping last ret"
+		#	self.stmts.pop()
+		#merging push ax pop bx constructs
+		i = 0
+		while i + 1 < len(self.stmts):
+			a, b = self.stmts[i], self.stmts[i + 1]
+			if isinstance(a, op._push) and isinstance(b, op._pop):
+				ar, br = a.regs, b.regs
+				movs = []
+				while len(ar) and len(br):
+					src = ar.pop()
+					dst = br.pop(0)
+					movs.append(op._mov2(dst, src))
+				if len(br) == 0:
+					self.stmts.pop(i + 1)
+				print "merging %d push-pops into movs" %(len(movs))
+				for m in movs:
+					print "\t%s <- %s" %(m.dst, m.src)
+				self.stmts[i + 1:i + 1] = movs
+				if len(ar) == 0:
+					self.stmts.pop(i)
+			else:
+				i += 1
+		#fixme: add local? 
+	
+	def add(self, stmt):
+		#print stmt
+		comment = stmt.rfind(';')
+		if comment >= 0:
+			stmt = stmt[:comment]
+		stmt = stmt.strip()
+
+		r = self.__label_re.search(stmt)
+		if r is not None:
+			#label
+			self.add_label(r.group(1).lower())
+			#print "remains: %s" %r.group(2)
+			stmt = r.group(2).strip()
+
+		if len(stmt) == 0:
+			return
+		
+		s = stmt.split(None)
+		cmd = s[0]
+		cl = getattr(op, '_' + cmd)
+		arg = " ".join(s[1:]) if len(s) > 1 else str()
+		o = cl(arg)
+		self.stmts.append(o)
+	
+	def __str__(self):
+		r = []
+		for i in self.stmts:
+			r.append(i.__str__())
+		return "\n".join(r)
+
+	def visit(self, visitor, skip = 0):
+		for i in xrange(skip, len(self.stmts)):
+			self.stmts[i].visit(visitor)
diff --git a/devtools/tasmrecover/tasm/proc.pyc b/devtools/tasmrecover/tasm/proc.pyc
new file mode 100644
index 0000000..cd8f967
Binary files /dev/null and b/devtools/tasmrecover/tasm/proc.pyc differ


Commit: 10c84a81fe3e04d9b923c023c46e89ca9eeb151a
    https://github.com/scummvm/scummvm/commit/10c84a81fe3e04d9b923c023c46e89ca9eeb151a
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:48-07:00

Commit Message:
DREAMWEB: removed ugly macroses

Changed paths:
    engines/dreamweb/runtime.h



diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index 5824728..8050e9f 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -1,18 +1,15 @@
-#ifndef TASM_RECOVER_H__
-#define TASM_RECOVER_H__
+#ifndef ENGINES_DREAMGEN_RUNTIME_H__
+#define ENGINES_DREAMGEN_RUNTIME_H__
 
 #include <stdint.h>
 #include <assert.h>
 #include <vector>
+#include "common/scummsys.h"
 
-typedef uint16_t uint16;
-typedef uint8_t uint8;
-typedef int16_t int16;
-typedef int8_t int8;
+//fixme: name clash
+#undef random
 
-//little endian
-#define REG_LOW 0
-#define REG_HIGH 1
+enum { kLowPartOfRegister = 0, kHighPartOfRegister = 1 };
 
 struct Register {
 	union {
@@ -160,14 +157,14 @@ struct Flags {
 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;
+	RegisterPart<kLowPartOfRegister> al;
+	RegisterPart<kHighPartOfRegister> ah;
+	RegisterPart<kLowPartOfRegister> bl;
+	RegisterPart<kHighPartOfRegister> bh;
+	RegisterPart<kLowPartOfRegister> cl;
+	RegisterPart<kHighPartOfRegister> ch;
+	RegisterPart<kLowPartOfRegister> dl;
+	RegisterPart<kHighPartOfRegister> dh;
 	
 	SegmentRef cs, ds, es;
 	Flags flags;


Commit: e3178397ce9dd1e5e52e7a6831f3a19670005076
    https://github.com/scummvm/scummvm/commit/e3178397ce9dd1e5e52e7a6831f3a19670005076
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:52-07:00

Commit Message:
COMMON: added assign(T*, T*)

Changed paths:
    common/array.h



diff --git a/common/array.h b/common/array.h
index 7ab4a1b..b3d3e01 100644
--- a/common/array.h
+++ b/common/array.h
@@ -252,6 +252,13 @@ public:
 		_size = newSize;
 	}
 
+	void assign(const T *srcBegin, const T *srcEnd) {
+		reserve(distance(srcBegin, srcEnd));
+		T *dst = _storage;
+		while(srcBegin != srcEnd)
+			*dst++ = *srcBegin++;
+	}
+
 protected:
 	static uint roundUpCapacity(uint capacity) {
 		// Round up capacity to the next power of 2;


Commit: d725199ac05e439a1a616f9eef2fe010d3433d90
    https://github.com/scummvm/scummvm/commit/d725199ac05e439a1a616f9eef2fe010d3433d90
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:29:58-07:00

Commit Message:
DREAMWEB: 'scummvm'ing types. :)

Changed paths:
    engines/dreamweb/runtime.h



diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index 8050e9f..c266c5d 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -1,10 +1,9 @@
 #ifndef ENGINES_DREAMGEN_RUNTIME_H__
 #define ENGINES_DREAMGEN_RUNTIME_H__
 
-#include <stdint.h>
 #include <assert.h>
-#include <vector>
 #include "common/scummsys.h"
+#include "common/array.h"
 
 //fixme: name clash
 #undef random
@@ -17,7 +16,7 @@ struct Register {
 		uint8 _part[2];
 	};
 	inline Register(): _value() {}
-	inline Register& operator=(uint16_t v) { _value = v; return *this; }
+	inline Register& operator=(uint16 v) { _value = v; return *this; }
 	inline operator uint16&() { return _value; }
 	inline void cbw() {
 		if (_value & 0x80)
@@ -29,7 +28,7 @@ struct Register {
 
 template<unsigned PART>
 struct RegisterPart {
-	uint8_t &_part;
+	uint8 &_part;
 
 	inline RegisterPart(Register &reg) : _part(reg._part[PART]) {}
 
@@ -40,19 +39,19 @@ struct RegisterPart {
 		_part = o._part;
 		return *this;
 	}
-	inline RegisterPart& operator=(uint8_t v) {
+	inline RegisterPart& operator=(uint8 v) {
 		_part = v;
 		return *this;
 	}
 };
 
 struct WordRef {
-	std::vector<uint8> &data;
+	Common::Array<uint8> &data;
 	unsigned index;
 	bool changed;
-	uint16_t value;
+	uint16 value;
 
-	inline WordRef(std::vector<uint8> &data, unsigned index) : data(data), index(index), changed(false) {
+	inline WordRef(Common::Array<uint8> &data, unsigned index) : data(data), index(index), changed(false) {
 		assert(index + 1 < data.size());
 		value = data[index] | (data[index + 1] << 8);
 	}
@@ -61,15 +60,15 @@ struct WordRef {
 		value = ref.value;
 		return *this;
 	}
-	inline WordRef& operator=(uint16_t v) {
+	inline WordRef& operator=(uint16 v) {
 		changed = true;
 		value = v;
 		return *this;
 	}
-	inline operator uint16_t() const {
+	inline operator uint16() const {
 		return value;
 	}
-	inline operator uint16_t&() {
+	inline operator uint16&() {
 		return value;
 	}
 	inline ~WordRef() {
@@ -81,12 +80,12 @@ struct WordRef {
 };
 
 struct Segment {
-	std::vector<uint8> data;
-	inline uint8_t &byte(unsigned index) {
+	Common::Array<uint8> data;
+	inline uint8 &byte(unsigned index) {
 		assert(index < data.size());
 		return data[index];
 	}
-	inline uint16_t word(unsigned index) const {
+	inline uint16 word(unsigned index) const {
 		assert(index + 1 < data.size());
 		return data[index] | (data[index + 1] << 8);
 	}
@@ -99,25 +98,25 @@ struct Segment {
 
 struct SegmentRef {
 	public:
-	uint16_t value;
-	std::vector<uint8> *data;
+	uint16 value;
+	Common::Array<uint8> *data;
 	inline SegmentRef& operator=(const SegmentRef &o) {
 		data = o.data;
 		return *this;
 	}
-	inline SegmentRef& operator=(const uint16_t id) {
+	inline SegmentRef& operator=(const uint16 id) {
 		return *this;
 	}
-	inline uint8_t &byte(unsigned index) {
+	inline uint8 &byte(unsigned index) {
 		assert(index < data->size());
 		return (*data)[index];
 	}
-	inline uint16_t word(unsigned index) const {
+	inline uint16 word(unsigned index) const {
 		assert(index + 1 < data->size());
 		return (*data)[index] | ((*data)[index + 1] << 8);
 	}
 	
-	inline operator uint16_t() const {
+	inline operator uint16() const {
 		return value;
 	}
 
@@ -310,7 +309,7 @@ struct RegisterContext {
 		b = t;
 	}
 
-	std::vector<uint16> stack;
+	Common::Array<uint16> stack;
 	inline void push(uint16 v) {
 		stack.push_back(v);
 	}


Commit: 1f991fa1e4ae59fb86852212d7fe5021b6f97809
    https://github.com/scummvm/scummvm/commit/1f991fa1e4ae59fb86852212d7fe5021b6f97809
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:30:03-07:00

Commit Message:
DREAMWEB: fixed almost all runtime warnings

Changed paths:
    engines/dreamweb/runtime.h



diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index c266c5d..7324475 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -4,6 +4,7 @@
 #include <assert.h>
 #include "common/scummsys.h"
 #include "common/array.h"
+#include "common/hashmap.h"
 
 //fixme: name clash
 #undef random
@@ -45,36 +46,38 @@ struct RegisterPart {
 	}
 };
 
-struct WordRef {
-	Common::Array<uint8> &data;
-	unsigned index;
-	bool changed;
-	uint16 value;
+class WordRef {
+	Common::Array<uint8>	&_data;
+	unsigned				_index;
+	bool					_changed;
+	uint16					_value;
 
-	inline WordRef(Common::Array<uint8> &data, unsigned index) : data(data), index(index), changed(false) {
+public:
+
+	inline WordRef(Common::Array<uint8> &data, unsigned index) : _data(data), _index(index), _changed(false) {
 		assert(index + 1 < data.size());
-		value = data[index] | (data[index + 1] << 8);
+		_value = _data[index] | (_data[index + 1] << 8);
 	}
 	inline WordRef& operator=(const WordRef &ref) {
-		changed = true;
-		value = ref.value;
+		_changed = true;
+		_value = ref._value;
 		return *this;
 	}
 	inline WordRef& operator=(uint16 v) {
-		changed = true;
-		value = v;
+		_changed = true;
+		_value = v;
 		return *this;
 	}
 	inline operator uint16() const {
-		return value;
+		return _value;
 	}
 	inline operator uint16&() {
-		return value;
+		return _value;
 	}
 	inline ~WordRef() {
-		if (changed) {
-			data[index] = value & 0xff;
-			data[index + 1] = value >> 8;
+		if (_changed) {
+			_data[_index] = _value & 0xff;
+			_data[_index + 1] = _value >> 8;
 		}
 	}
 };
@@ -96,32 +99,40 @@ struct Segment {
 };
 
 
-struct SegmentRef {
-	public:
-	uint16 value;
-	Common::Array<uint8> *data;
-	inline SegmentRef& operator=(const SegmentRef &o) {
-		data = o.data;
-		return *this;
+class SegmentRef {
+
+	uint16		_value;
+	Segment		*_segment;
+
+public:
+	SegmentRef(): _value(), _segment() {
 	}
+
+	inline void reset(uint16 value) {
+		
+	}
+
 	inline SegmentRef& operator=(const uint16 id) {
 		return *this;
 	}
+
 	inline uint8 &byte(unsigned index) {
-		assert(index < data->size());
-		return (*data)[index];
+		assert(_segment != 0);
+		return _segment->byte(index);
 	}
+
 	inline uint16 word(unsigned index) const {
-		assert(index + 1 < data->size());
-		return (*data)[index] | ((*data)[index + 1] << 8);
+		assert(_segment != 0);
+		return _segment->word(index);
 	}
 	
 	inline operator uint16() const {
-		return value;
+		return _value;
 	}
 
 	inline WordRef word(unsigned index) {
-		return WordRef(*data, index);
+		assert(_segment != 0);
+		return _segment->word(index);
 	}
 };
 
@@ -139,16 +150,16 @@ struct Flags {
 	inline bool le() const { return _z || _s != _o; }
 	
 	inline void update_sign(uint8 v) {
-		bool s = v & 0x80;
-		_o = s != _s;
-		_s = s;
+		bool new_s = v & 0x80;
+		_o = new_s != _s;
+		_s = new_s;
 		_z = v == 0;
 	}
 
 	inline void update(uint16 v) {
-		bool s = v & 0x8000;
-		_o = s != _s;
-		_s = s;
+		bool new_s = v & 0x8000;
+		_o = new_s != _s;
+		_s = new_s;
 		_z = v == 0;
 	}
 };


Commit: cc784e9a0c0b0527548b1ea5cac06b4d9458042a
    https://github.com/scummvm/scummvm/commit/cc784e9a0c0b0527548b1ea5cac06b4d9458042a
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:30:08-07:00

Commit Message:
DREAMWEB: removed context template, cleaned up initialization

Changed paths:
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/dreamgen.h
    engines/dreamweb/runtime.h



diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 5b075a1..6d45fbf 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -20872,565 +20872,562 @@ endofgame:
 }
 
 
-Data::Data() {
+
+void __start(Context &context) { 
 	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 __start(Context &context) { dreamweb(context); }
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, 
+		0xff, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0xb6, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x14, 0x00, 0x02, 0x00, 0x01, 0x01, 0x37, 
+		0x00, 0x00, 0x00, 0x32, 0x14, 0x00, 0x18, 0x16, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x18, 0x21, 
+		0x0a, 0x4b, 0x00, 0x01, 0x00, 0x01, 0x01, 0x2c, 0x00, 0x1b, 0x00, 0x02, 0x00, 0x02, 0x01, 0x2c, 
+		0x00, 0x60, 0x00, 0x03, 0x00, 0x04, 0x01, 0x2c, 0x00, 0x76, 0x00, 0x02, 0x00, 0x05, 0x01, 0x2c, 
+		0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x16, 0x14, 0x35, 0x00, 0x03, 0x00, 0x00, 0x05, 0x16, 
+		0x14, 0x28, 0x00, 0x01, 0x00, 0x02, 0x05, 0x16, 0x14, 0x32, 0x00, 0x01, 0x00, 0x03, 0x02, 0x0b, 
+		0x0a, 0xc0, 0x00, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x0a, 0xb6, 0x00, 0x02, 0x00, 0x01, 0x08, 0x0b, 
+		0x0a, 0x00, 0x00, 0x02, 0x00, 0x01, 0x17, 0x00, 0x32, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0x0b, 
+		0x14, 0xfa, 0x00, 0x04, 0x00, 0x00, 0x17, 0x00, 0x32, 0x2b, 0x00, 0x02, 0x00, 0x08, 0x17, 0x0b, 
+		0x28, 0x82, 0x00, 0x02, 0x00, 0x01, 0x17, 0x16, 0x28, 0x7a, 0x00, 0x02, 0x00, 0x02, 0x17, 0x16, 
+		0x28, 0x69, 0x00, 0x02, 0x00, 0x03, 0x17, 0x16, 0x28, 0x51, 0x00, 0x02, 0x00, 0x04, 0x17, 0x0b, 
+		0x28, 0x87, 0x00, 0x02, 0x00, 0x05, 0x17, 0x16, 0x28, 0x91, 0x00, 0x02, 0x00, 0x06, 0x04, 0x16, 
+		0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x14, 0x2d, 0x16, 
+		0x1e, 0x27, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0x19, 0x00, 0x02, 0x00, 0x00, 0x08, 0x16, 
+		0x28, 0x20, 0x00, 0x02, 0x00, 0x00, 0x07, 0x0b, 0x14, 0x40, 0x00, 0x02, 0x00, 0x00, 0x16, 0x16, 
+		0x14, 0x52, 0x00, 0x02, 0x00, 0x00, 0x1b, 0x0b, 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00, 
+		0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x21, 0x28, 0x15, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x0b, 
+		0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x16, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x19, 0x00, 
+		0x32, 0x04, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x1e, 0x79, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 
+		0x1e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x34, 0x16, 0x1e, 0xc0, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 
+		0x1e, 0xe9, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x68, 0x00, 0x37, 0x00, 0x00, 0x35, 0x21, 
+		0x00, 0x63, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x32, 0x16, 
+		0x1e, 0xa2, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 0x1e, 0x39, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 
+		0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x48, 0x00, 0x03, 0x00, 0x00, 0x37, 0x2c, 
+		0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x16, 
+		0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x16, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x16, 
+		0x1e, 0xae, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0b, 
+		0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x0b, 0x1e, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x16, 
+		0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0e, 0x21, 0x28, 0x00, 0x00, 0x32, 0x14, 0x00, 0xff, 0x7c, 
+		0xc0, 0x80, 0xc0, 0x1c, 0xc0, 0x20, 0xc0, 0x00, 0xc1, 0x10, 0xc0, 0x18, 0xc0, 0xf4, 0xc0, 0x0c, 
+		0xc0, 0x24, 0xc0, 0x28, 0xc0, 0x2c, 0xc0, 0x30, 0xc0, 0x54, 0xc0, 0x78, 0xc0, 0x50, 0xc0, 0x74, 
+		0xc0, 0x34, 0xc0, 0x38, 0xc0, 0x40, 0xc0, 0x44, 0xc0, 0x48, 0xc0, 0x3c, 0xc0, 0x14, 0xc0, 0x88, 
+		0xc0, 0x8c, 0xc0, 0x90, 0xc0, 0x70, 0xc0, 0xfc, 0xc0, 0x6c, 0xc0, 0x58, 0xc0, 0x68, 0xc0, 0x04, 
+		0xc1, 0x64, 0xc0, 0x60, 0xc0, 0x5c, 0xc0, 0x94, 0xc0, 0x04, 0xc0, 0xa4, 0xc0, 0x9c, 0xc0, 0xa0, 
+		0xc0, 0xa8, 0xc0, 0xac, 0xc0, 0x98, 0xc0, 0xb0, 0xc0, 0xb4, 0xc0, 0xc8, 0xc0, 0xcc, 0xc0, 0xd4, 
+		0xc0, 0xdc, 0xc0, 0xd8, 0xc0, 0x00, 0xc0, 0x08, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 
+		0xc0, 0x00, 0x3c, 0x21, 0x47, 0x0b, 0x52, 0x16, 0x5d, 0x01, 0x2c, 0x0a, 0x10, 0x04, 0x0b, 0x1e, 
+		0x0e, 0x04, 0x16, 0x1e, 0x0e, 0x03, 0x21, 0x0a, 0x0e, 0x0a, 0x21, 0x1e, 0x0e, 0x0a, 0x16, 0x1e, 
+		0x18, 0x09, 0x16, 0x0a, 0x0e, 0x02, 0x21, 0x00, 0x0e, 0x02, 0x16, 0x00, 0x0e, 0x06, 0x0b, 0x1e, 
+		0x0e, 0x07, 0x0b, 0x14, 0x12, 0x07, 0x00, 0x14, 0x12, 0x07, 0x00, 0x1e, 0x12, 0x37, 0x2c, 0x00, 
+		0x0e, 0x05, 0x16, 0x1e, 0x0e, 0x08, 0x00, 0x0a, 0x12, 0x08, 0x0b, 0x0a, 0x12, 0x08, 0x16, 0x0a, 
+		0x12, 0x08, 0x21, 0x0a, 0x12, 0x08, 0x21, 0x14, 0x12, 0x08, 0x21, 0x1e, 0x12, 0x08, 0x21, 0x28, 
+		0x12, 0x08, 0x16, 0x28, 0x12, 0x08, 0x0b, 0x28, 0x12, 0x15, 0x2c, 0x14, 0x12, 0xff, 0x2f, 0x05, 
+		0x30, 0x05, 0x34, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x47, 0x05, 0x2f, 0x05, 0x4e, 0x05, 
+		0x5e, 0x05, 0x65, 0x05, 0x69, 0x05, 0x6d, 0x05, 0x71, 0x05, 0x7e, 0x05, 0x2f, 0x05, 0x2f, 0x05, 
+		0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0xa0, 0x05, 0x2f, 0x05, 0xb6, 0x05, 0xd5, 0x05, 0x2f, 0x05, 
+		0xe2, 0x05, 0xf8, 0x05, 0x0e, 0x06, 0x27, 0x06, 0x3a, 0x06, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 
+		0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 
+		0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x4a, 0x06, 0x51, 0x06, 0x76, 0x06, 0x2f, 0x05, 
+		0x2f, 0x05, 0x2f, 0x05, 0x2f, 0x05, 0x83, 0x06, 0x87, 0x06, 0x2f, 0x05, 0x8e, 0x06, 0xff, 0x0f, 
+		0x01, 0x01, 0xff, 0x0c, 0x05, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x23, 0x00, 0x11, 0x32, 0x00, 0x12, 
+		0x67, 0x00, 0x13, 0x6c, 0x00, 0xff, 0x12, 0x13, 0x00, 0x13, 0x17, 0x00, 0xff, 0x0c, 0x33, 0x00, 
+		0x0d, 0x35, 0x00, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x00, 0x00, 0x4e, 0x00, 0xff, 0x0c, 0x77, 0x00, 
+		0x0c, 0x91, 0x00, 0xff, 0x0d, 0x10, 0x00, 0xff, 0x0d, 0x14, 0x00, 0xff, 0x0e, 0x10, 0x00, 0xff, 
+		0x0f, 0x04, 0x00, 0x10, 0x08, 0x00, 0x11, 0x86, 0x00, 0x12, 0x99, 0x00, 0xff, 0x0d, 0x6c, 0x00, 
+		0x0f, 0x46, 0x01, 0x0f, 0x4b, 0x01, 0x0f, 0x50, 0x01, 0x0f, 0x56, 0x01, 0x0f, 0x5c, 0x01, 0x0f, 
+		0x62, 0x01, 0x12, 0x9f, 0x00, 0x12, 0xb2, 0x00, 0x93, 0xd9, 0x00, 0x54, 0xe4, 0x00, 0xff, 0x0d, 
+		0x14, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x22, 0x00, 0x0d, 0x34, 0x00, 0x0d, 0x37, 0x00, 0x19, 0x39, 
+		0x00, 0x15, 0x49, 0x00, 0xff, 0x0d, 0xc4, 0x00, 0x0d, 0xea, 0x00, 0x0d, 0x9c, 0x00, 0x0e, 0x81, 
+		0x00, 0x0d, 0x7c, 0x00, 0x0f, 0xa2, 0x00, 0x0f, 0xc8, 0x00, 0x0f, 0xef, 0x00, 0x11, 0x63, 0x00, 
+		0x0c, 0x34, 0x00, 0xff, 0x0f, 0x38, 0x00, 0x10, 0x40, 0x00, 0x13, 0x16, 0x00, 0x14, 0x21, 0x00, 
+		0xff, 0x14, 0x0b, 0x00, 0x14, 0x0f, 0x00, 0x0f, 0x1c, 0x00, 0x0d, 0x50, 0x00, 0x15, 0x52, 0x00, 
+		0x93, 0x57, 0x00, 0x57, 0x80, 0x00, 0xff, 0x0c, 0x0d, 0x00, 0x0e, 0x27, 0x00, 0x0c, 0x43, 0x00, 
+		0x0c, 0x4b, 0x00, 0x0c, 0x53, 0x00, 0x0c, 0x5b, 0x00, 0x0f, 0x66, 0x00, 0xff, 0x16, 0x24, 0x00, 
+		0x0d, 0x7d, 0x00, 0x12, 0x58, 0x00, 0x0f, 0x6b, 0x00, 0x0e, 0x7f, 0x00, 0x0e, 0x9a, 0x00, 0x93, 
+		0xaa, 0x00, 0x57, 0xe8, 0x00, 0xff, 0x15, 0x10, 0x00, 0x15, 0x48, 0x00, 0x15, 0xcd, 0x00, 0x16, 
+		0x3f, 0x00, 0x97, 0x63, 0x00, 0x58, 0x9e, 0x00, 0xff, 0x0d, 0x15, 0x00, 0x0e, 0x18, 0x00, 0x93, 
+		0x32, 0x00, 0x57, 0x4b, 0x00, 0x18, 0x80, 0x00, 0xff, 0x53, 0x2e, 0x00, 0x10, 0xa7, 0x00, 0xff, 
+		0x10, 0x13, 0x00, 0x0e, 0x24, 0x00, 0x10, 0x32, 0x00, 0x0e, 0x41, 0x00, 0x10, 0x51, 0x00, 0x0e, 
+		0x60, 0x00, 0x10, 0x72, 0x00, 0x0e, 0x81, 0x00, 0x10, 0x93, 0x00, 0x0e, 0xa2, 0x00, 0x10, 0xb1, 
+		0x00, 0x0e, 0xbf, 0x00, 0xff, 0x0d, 0x30, 0x00, 0x0e, 0x29, 0x00, 0x0f, 0x4e, 0x00, 0x10, 0x5c, 
+		0x00, 0xff, 0x10, 0x73, 0x00, 0xff, 0x15, 0x67, 0x00, 0x14, 0xc7, 0x00, 0xff, 0x11, 0x35, 0x00, 
+		0x11, 0x36, 0x00, 0x11, 0x37, 0x00, 0x11, 0x38, 0x00, 0x11, 0x39, 0x00, 0x11, 0x3a, 0x00, 0x11, 
+		0x3b, 0x00, 0x11, 0x3d, 0x00, 0x11, 0x3f, 0x00, 0x11, 0x40, 0x00, 0x11, 0x41, 0x00, 0xff, 0x9c, 
+		0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 
+		0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 
+		0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 
+		0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 
+		0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 
+		0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 
+		0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9c, 0x44, 0x52, 0x45, 0x41, 0x4d, 
+		0x57, 0x45, 0x42, 0x2e, 0x53, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 
+		0x2e, 0x53, 0x30, 0x32, 0x00, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x2e, 0x44, 0x41, 0x54, 
+		0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x30, 0x00, 0x44, 0x52, 
+		0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 
+		0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 
+		0x2e, 0x56, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, 
+		0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x30, 0x00, 0x44, 
+		0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 
+		0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 
+		0x42, 0x2e, 0x47, 0x30, 0x38, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 
+		0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x37, 0x00, 
+		0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 
+		0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 
+		0x45, 0x42, 0x2e, 0x47, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 
+		0x47, 0x31, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x31, 
+		0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x32, 0x00, 0x44, 0x52, 
+		0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 
+		0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 
+		0x2e, 0x54, 0x31, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 
+		0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x30, 0x00, 0x44, 
+		0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 
+		0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 
+		0x42, 0x2e, 0x54, 0x32, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 
+		0x32, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x30, 0x00, 
+		0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x31, 0x00, 0x44, 0x52, 0x45, 
+		0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 
+		0x45, 0x42, 0x2e, 0x54, 0x38, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 
+		0x54, 0x38, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x33, 
+		0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x34, 0x00, 0x44, 0x52, 
+		0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x4f, 0x4c, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 
+		0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 
+		0x2e, 0x47, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 
+		0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x32, 0x00, 0x44, 
+		0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 
+		0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 
+		0x42, 0x2e, 0x49, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 
+		0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x32, 0x00, 
+		0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 
+		0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 
+		0x45, 0x42, 0x2e, 0x49, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 
+		0x49, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x37, 
+		0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x50, 0x41, 0x4c, 0x00, 0x11, 0x01, 
+		0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x48, 0xc3, 0x04, 0x01, 0x2c, 0x01, 0x00, 0x00, 0x2c, 0x00, 
+		0x84, 0xc5, 0xd2, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x2c, 0x00, 0xe0, 0xc3, 0x90, 0x00, 0xb0, 0x00, 
+		0x40, 0x00, 0x60, 0x00, 0x84, 0xc3, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0xc8, 0x00, 0x88, 0xc3, 
+		0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 
+		0x9d, 0x00, 0xc6, 0x00, 0x48, 0xc3, 0xff, 0x00, 0x26, 0x01, 0x00, 0x00, 0x18, 0x00, 0xcc, 0xc3, 
+		0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x4c, 0xc3, 0x50, 0x00, 0x00, 0x01, 0x9e, 0x00, 
+		0xca, 0x00, 0xe4, 0xc3, 0x50, 0x00, 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0x9c, 0xc3, 0x00, 0x00, 
+		0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 
+		0xc6, 0x00, 0x48, 0xc3, 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x4c, 0xc3, 0x50, 0x00, 
+		0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0xc0, 0xc6, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 
+		0x9c, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x80, 0xc4, 0xf0, 0x00, 
+		0x22, 0x01, 0x02, 0x00, 0x2c, 0x00, 0x98, 0xc4, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 
+		0x9c, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x80, 0xc4, 0x00, 0x00, 
+		0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0xee, 0x00, 0x02, 0x01, 0x04, 0x00, 
+		0x2c, 0x00, 0xcc, 0xc4, 0x68, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x2c, 0x00, 0xd0, 0xc4, 0x18, 0x01, 
+		0x34, 0x01, 0x04, 0x00, 0x2c, 0x00, 0xb4, 0xc4, 0x68, 0x00, 0xd8, 0x00, 0x8a, 0x00, 0xc0, 0x00, 
+		0xd4, 0xc4, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x80, 0xc4, 0x00, 0x00, 0x40, 0x01, 
+		0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0x45, 0x58, 0x49, 0x54, 0x20, 0x48, 0x45, 0x4c, 
+		0x50, 0x20, 0x4c, 0x49, 0x53, 0x54, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x4c, 0x4f, 0x47, 0x4f, 
+		0x4e, 0x20, 0x4b, 0x45, 0x59, 0x53, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 
+		0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x00, 0x00, 0x00, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 
+		0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 
+		0x4e, 0x44, 0x52, 0x49, 0x58, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x00, 0x00, 0x00, 0x53, 
+		0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 
+		0x00, 0xff, 0xff, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x00, 0x22, 0x20, 0x00, 0x4e, 
+		0x45, 0x54, 0x57, 0xec, 0xc4, 0x45, 0x4c, 0x56, 0x41, 0x90, 0xc6, 0x45, 0x4c, 0x56, 0x42, 0xa0, 
+		0xc6, 0x45, 0x4c, 0x56, 0x43, 0x98, 0xc6, 0x45, 0x4c, 0x56, 0x45, 0x9c, 0xc6, 0x45, 0x4c, 0x56, 
+		0x46, 0xa4, 0xc6, 0x43, 0x47, 0x41, 0x54, 0x34, 0xc7, 0x52, 0x45, 0x4d, 0x4f, 0xac, 0xc6, 0x42, 
+		0x55, 0x54, 0x41, 0x40, 0xc7, 0x43, 0x42, 0x4f, 0x58, 0x48, 0xc7, 0x4c, 0x49, 0x54, 0x45, 0x60, 
+		0xc6, 0x50, 0x4c, 0x41, 0x54, 0x44, 0xc7, 0x4c, 0x49, 0x46, 0x54, 0x80, 0xc6, 0x57, 0x49, 0x52, 
+		0x45, 0x88, 0xc6, 0x48, 0x4e, 0x44, 0x4c, 0x8c, 0xc6, 0x48, 0x41, 0x43, 0x48, 0x84, 0xc6, 0x44, 
+		0x4f, 0x4f, 0x52, 0xb8, 0xc6, 0x43, 0x53, 0x48, 0x52, 0x74, 0xc6, 0x47, 0x55, 0x4e, 0x41, 0x38, 
+		0xc7, 0x43, 0x52, 0x41, 0x41, 0x68, 0xc6, 0x43, 0x52, 0x42, 0x42, 0x6c, 0xc6, 0x43, 0x52, 0x43, 
+		0x43, 0x70, 0xc6, 0x53, 0x45, 0x41, 0x54, 0xfc, 0xc5, 0x4d, 0x45, 0x4e, 0x55, 0x9c, 0xc7, 0x43, 
+		0x4f, 0x4f, 0x4b, 0xb0, 0xc6, 0x45, 0x4c, 0x43, 0x41, 0x50, 0xc6, 0x45, 0x44, 0x43, 0x41, 0x54, 
+		0xc6, 0x44, 0x44, 0x43, 0x41, 0x58, 0xc6, 0x41, 0x4c, 0x54, 0x52, 0x08, 0xc6, 0x4c, 0x4f, 0x4b, 
+		0x41, 0x40, 0xc6, 0x4c, 0x4f, 0x4b, 0x42, 0x44, 0xc6, 0x45, 0x4e, 0x54, 0x41, 0x14, 0xc6, 0x45, 
+		0x4e, 0x54, 0x42, 0x28, 0xc6, 0x45, 0x4e, 0x54, 0x45, 0x2c, 0xc6, 0x45, 0x4e, 0x54, 0x43, 0x1c, 
+		0xc6, 0x45, 0x4e, 0x54, 0x44, 0x30, 0xc6, 0x45, 0x4e, 0x54, 0x48, 0x34, 0xc6, 0x57, 0x57, 0x41, 
+		0x54, 0xf4, 0xc5, 0x50, 0x4f, 0x4f, 0x4c, 0x5c, 0xc6, 0x57, 0x53, 0x48, 0x44, 0xf8, 0xc5, 0x47, 
+		0x52, 0x41, 0x46, 0x48, 0xc6, 0x54, 0x52, 0x41, 0x50, 0x4c, 0xc6, 0x43, 0x44, 0x50, 0x45, 0x2c, 
+		0xc7, 0x44, 0x4c, 0x4f, 0x4b, 0x0c, 0xc6, 0x48, 0x4f, 0x4c, 0x45, 0x04, 0xc6, 0x44, 0x52, 0x59, 
+		0x52, 0x10, 0xc6, 0x48, 0x4f, 0x4c, 0x59, 0x00, 0xc6, 0x57, 0x41, 0x4c, 0x4c, 0x30, 0xc7, 0x42, 
+		0x4f, 0x4f, 0x4b, 0x0c, 0xc8, 0x41, 0x58, 0x45, 0x44, 0xb4, 0xc6, 0x53, 0x48, 0x4c, 0x44, 0x3c, 
+		0xc7, 0x42, 0x43, 0x4e, 0x59, 0xec, 0xc5, 0x4c, 0x49, 0x44, 0x43, 0xe8, 0xc5, 0x4c, 0x49, 0x44, 
+		0x55, 0xe4, 0xc5, 0x4c, 0x49, 0x44, 0x4f, 0xf0, 0xc5, 0x50, 0x49, 0x50, 0x45, 0xac, 0xc5, 0x42, 
+		0x41, 0x4c, 0x43, 0x24, 0xc6, 0x57, 0x49, 0x4e, 0x44, 0x20, 0xc6, 0x50, 0x41, 0x50, 0x52, 0xb8, 
+		0xc7, 0x55, 0x57, 0x54, 0x41, 0xa4, 0xc5, 0x55, 0x57, 0x54, 0x42, 0xa4, 0xc5, 0x53, 0x54, 0x41, 
+		0x54, 0xdc, 0xc7, 0x54, 0x4c, 0x49, 0x44, 0xa0, 0xc5, 0x53, 0x4c, 0x41, 0x42, 0xdc, 0xc5, 0x43, 
+		0x41, 0x52, 0x54, 0xe0, 0xc5, 0x46, 0x43, 0x41, 0x52, 0xb0, 0xc5, 0x53, 0x4c, 0x42, 0x41, 0xc4, 
+		0xc5, 0x53, 0x4c, 0x42, 0x42, 0xc8, 0xc5, 0x53, 0x4c, 0x42, 0x43, 0xd0, 0xc5, 0x53, 0x4c, 0x42, 
+		0x44, 0xcc, 0xc5, 0x53, 0x4c, 0x42, 0x45, 0xd4, 0xc5, 0x53, 0x4c, 0x42, 0x46, 0xd8, 0xc5, 0x50, 
+		0x4c, 0x49, 0x4e, 0xb4, 0xc5, 0x4c, 0x41, 0x44, 0x44, 0xbc, 0xc5, 0x4c, 0x41, 0x44, 0x42, 0xc0, 
+		0xc5, 0x47, 0x55, 0x4d, 0x41, 0xb8, 0xc5, 0x53, 0x51, 0x45, 0x45, 0x8c, 0xc5, 0x54, 0x41, 0x50, 
+		0x50, 0x90, 0xc5, 0x47, 0x55, 0x49, 0x54, 0x94, 0xc5, 0x43, 0x4f, 0x4e, 0x54, 0x98, 0xc5, 0x42, 
+		0x45, 0x4c, 0x4c, 0x9c, 0xc5, 0x8c, 0x8c, 0x8c, 0x8c, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 
+		0x00, 0x9d, 0x00, 0xb2, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x5c, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x51, 
+		0x00, 0x5e, 0x00, 0x60, 0xc7, 0xc9, 0x00, 0xde, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x64, 0xc7, 0x9d, 
+		0x00, 0xb2, 0x00, 0x5f, 0x00, 0x70, 0x00, 0x68, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x5f, 0x00, 0x70, 
+		0x00, 0x6c, 0xc7, 0xc9, 0x00, 0xde, 0x00, 0x5f, 0x00, 0x70, 0x00, 0x70, 0xc7, 0x9d, 0x00, 0xb2, 
+		0x00, 0x71, 0x00, 0x82, 0x00, 0x74, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x71, 0x00, 0x82, 0x00, 0x78, 
+		0xc7, 0xc9, 0x00, 0xde, 0x00, 0x71, 0x00, 0x82, 0x00, 0x7c, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x83, 
+		0x00, 0x91, 0x00, 0x80, 0xc7, 0xb3, 0x00, 0xde, 0x00, 0x83, 0x00, 0x91, 0x00, 0x84, 0xc7, 0xdc, 
+		0x00, 0xea, 0x00, 0x98, 0x00, 0xa6, 0x00, 0x54, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 
+		0x00, 0x9c, 0xca, 0xff, 0xff, 0xae, 0x00, 0xbc, 0x00, 0x84, 0x00, 0x94, 0x00, 0x54, 0xc7, 0x00, 
+		0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0x18, 0x01, 0x40, 0x01, 0xa0, 
+		0x00, 0xc8, 0x00, 0x54, 0xc7, 0x8f, 0x00, 0x2c, 0x01, 0x06, 0x00, 0xc2, 0x00, 0xbc, 0xc7, 0x00, 
+		0x00, 0x8f, 0x00, 0x06, 0x00, 0xc2, 0x00, 0xc4, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 
+		0x00, 0x9c, 0xca, 0xff, 0xff, 0x68, 0x00, 0x80, 0x00, 0x3a, 0x00, 0x48, 0x00, 0xe0, 0xc7, 0x40, 
+		0x00, 0x74, 0x00, 0x4c, 0x00, 0x6a, 0x00, 0xe4, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x4c, 0x00, 0x6a, 
+		0x00, 0xe8, 0xc7, 0x40, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x88, 0x00, 0xec, 0xc7, 0x74, 0x00, 0xa8, 
+		0x00, 0x6a, 0x00, 0x88, 0x00, 0xf0, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 
+		0xca, 0xff, 0xff, 0xba, 0x00, 0xca, 0x00, 0x9d, 0x00, 0xad, 0x00, 0x20, 0xc8, 0xf3, 0x00, 0x03, 
+		0x01, 0x83, 0x00, 0x93, 0x00, 0x1c, 0xc8, 0x0c, 0x01, 0x1c, 0x01, 0xa8, 0x00, 0xb8, 0x00, 0x54, 
+		0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 
+		0x00, 0x52, 0x00, 0x80, 0x00, 0x38, 0xc8, 0x46, 0x00, 0x89, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x84, 
+		0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x44, 0x00, 0x98, 0x00, 0x50, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 
+		0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x4c, 
+		0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x40, 0x00, 0x98, 0x00, 0x5c, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 
+		0x00, 0x85, 0x00, 0x78, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 
+		0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, 0x80, 0x00, 0x48, 0xc8, 0x46, 0x00, 0x8b, 0x00, 0x3e, 
+		0x00, 0x6f, 0x00, 0x54, 0xc8, 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x4c, 0xc8, 0x00, 
+		0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0xec, 0x00, 0xfc, 0x00, 0x70, 
+		0x00, 0x80, 0x00, 0x4c, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x40, 0x00, 0x98, 0x00, 0x58, 0xc8, 0x3e, 
+		0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, 0x78, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 
+		0x00, 0x9c, 0xca, 0xff, 0xff, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 
+		0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 
+		0x0a, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 
+		0x61, 0x74, 0x65, 0x20, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x4d, 0x65, 0x6d, 
+		0x6f, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 
+		0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 
+		0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 
+		0x65, 0x72, 0x20, 0x63, 0x61, 0x72, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 
+		0x64, 0x20, 0x61, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 
+		0x20, 0x48, 0x65, 0x78, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 
+		0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 
+		0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x4f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x61, 0x73, 
+		0x65, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 
+		0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 
+		0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 
+		0x20, 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 
+		0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 
+		0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 
+		0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x41, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 
+		0x35, 0x39, 0x30, 0x4b, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x6d, 
+		0x6f, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 
+		0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 
+		0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 
+		0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6e, 
+		0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 
+		0x72, 0x75, 0x70, 0x74, 0x20, 0x30, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 
+		0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 
+		0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 
+		0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x45, 0x4d, 0x4d, 0x20, 0x70, 0x61, 0x67, 0x65, 
+		0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 
+		0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 
+		0x0d, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 
+		0x2e, 0x63, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 
+		0x6c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 
+		0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 
+		0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x42, 0x4c, 0x41, 0x53, 
+		0x54, 0x45, 0x52, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 
+		0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 
+		0x72, 0x20, 0x41, 0x55, 0x54, 0x4f, 0x45, 0x58, 0x45, 0x43, 0x2e, 0x42, 0x41, 0x54, 0x29, 0x0d, 
+		0x0a, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 
+		0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x49, 0x52, 0x51, 
+		0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 
+		0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x64, 0x64, 0x72, 
+		0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73, 
+		0x75, 0x6d, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 
+		0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 
+		0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x79, 
+		0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 
+		0x68, 0x65, 0x6d, 0x0d, 0x0a, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 
+		0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 
+		0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x44, 
+		0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x20, 0x49, 0x37, 0x20, 0x41, 0x32, 0x32, 0x30, 0x20, 
+		0x44, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 
+		0x65, 0x62, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, 
+		0x0d, 0x0a, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 
+		0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 
+		0x30, 0x68, 0x0d, 0x0a, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x20, 0x49, 0x35, 
+		0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 
+		0x20, 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 
+		0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 
+		0x6f, 0x66, 0x20, 0x32, 0x32, 0x30, 0x68, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x31, 0x0d, 0x0a, 
+		0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 
+		0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x43, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 
+		0x75, 0x72, 0x20, 0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x2e, 0x2e, 0x2e, 0x2e, 0x0d, 0x0a, 0x0d, 
+		0x0a, 0x0d, 0x0a, 0x24, 0x81, 0x00, 0xb8, 0x00, 0x52, 0x00, 0x80, 0x00, 0xbc, 0xc8, 0x50, 0x00, 
+		0x93, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x84, 0xc8, 0xb7, 0x00, 0xfa, 0x00, 0x3e, 0x00, 0x6f, 0x00, 
+		0xc0, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x9c, 0xca, 0xff, 0xff, 0x53, 0x50, 
+		0x45, 0x45, 0x43, 0x48, 0x52, 0x32, 0x34, 0x43, 0x30, 0x30, 0x30, 0x35, 0x2e, 0x52, 0x41, 0x57, 
+		0x00, 0x87, 0x83, 0x81, 0x82, 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x74, 0xc4, 0x00, 
+		0x00, 0x32, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x80, 0xc3, 0xe2, 0x00, 0xf4, 0x00, 0x0a, 0x00, 0x1a, 
+		0x00, 0x2c, 0xc8, 0xe2, 0x00, 0xf4, 0x00, 0x1a, 0x00, 0x28, 0x00, 0x30, 0xc8, 0xf0, 0x00, 0x04, 
+		0x01, 0x64, 0x00, 0x7c, 0x00, 0xc8, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd0, 
+		0xc9, 0xff, 0xff, 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x74, 0xc4, 0x00, 0x00, 0x32, 
+		0x00, 0x00, 0x00, 0xb4, 0x00, 0x80, 0xc3, 0x12, 0x01, 0x24, 0x01, 0x0a, 0x00, 0x1a, 0x00, 0x2c, 
+		0xc8, 0x12, 0x01, 0x24, 0x01, 0x1a, 0x00, 0x28, 0x00, 0x30, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 
+		0x00, 0x7c, 0x00, 0xc8, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd0, 0xc9, 0xff, 
+		0xff, 0x00, 0x21, 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x00, 0x0f, 0xff, 
+		0x00, 0x0b, 0x00, 0x0f, 0xff, 0x00, 0x0b, 0x0a, 0x0f, 0xff, 0x00, 0x00, 0x0a, 0x0f, 0xff, 0x01, 
+		0x2c, 0x0a, 0x06, 0xff, 0x01, 0x2c, 0x00, 0x0d, 0xff, 0x02, 0x21, 0x00, 0x06, 0xff, 0x02, 0x16, 
+		0x00, 0x05, 0xff, 0x02, 0x16, 0x0a, 0x10, 0xff, 0x02, 0x0b, 0x0a, 0x10, 0xff, 0x03, 0x2c, 0x00, 
+		0x0f, 0xff, 0x03, 0x21, 0x0a, 0x06, 0xff, 0x03, 0x21, 0x00, 0x05, 0xff, 0x04, 0x0b, 0x1e, 0x06, 
+		0xff, 0x04, 0x16, 0x1e, 0x05, 0xff, 0x04, 0x16, 0x14, 0x0d, 0xff, 0x0a, 0x21, 0x1e, 0x06, 0xff, 
+		0x0a, 0x16, 0x1e, 0x06, 0xff, 0x09, 0x16, 0x0a, 0x06, 0xff, 0x09, 0x16, 0x14, 0x10, 0xff, 0x09, 
+		0x16, 0x1e, 0x10, 0xff, 0x09, 0x16, 0x28, 0x10, 0xff, 0x09, 0x16, 0x32, 0x10, 0xff, 0x06, 0x0b, 
+		0x1e, 0x06, 0xff, 0x06, 0x00, 0x0a, 0x0f, 0xff, 0x06, 0x00, 0x14, 0x0f, 0xff, 0x06, 0x0b, 0x14, 
+		0x0f, 0xff, 0x06, 0x16, 0x14, 0x0f, 0xff, 0x07, 0x0b, 0x14, 0x06, 0xff, 0x07, 0x00, 0x14, 0x06, 
+		0xff, 0x07, 0x00, 0x1e, 0x06, 0xff, 0x37, 0x2c, 0x00, 0x05, 0xff, 0x37, 0x2c, 0x0a, 0x05, 0xff, 
+		0x05, 0x16, 0x1e, 0x06, 0xff, 0x05, 0x16, 0x14, 0x0f, 0xff, 0x05, 0x16, 0x0a, 0x0f, 0xff, 0x18, 
+		0x16, 0x00, 0x0f, 0xff, 0x18, 0x21, 0x00, 0x0f, 0xff, 0x18, 0x2c, 0x00, 0x0f, 0xff, 0x18, 0x21, 
+		0x0a, 0x0f, 0xff, 0x08, 0x00, 0x0a, 0x06, 0xff, 0x08, 0x0b, 0x0a, 0x06, 0xff, 0x08, 0x16, 0x0a, 
+		0x06, 0xff, 0x08, 0x21, 0x0a, 0x06, 0xff, 0x08, 0x21, 0x14, 0x06, 0xff, 0x08, 0x21, 0x1e, 0x06, 
+		0xff, 0x08, 0x21, 0x28, 0x06, 0xff, 0x08, 0x16, 0x28, 0x06, 0xff, 0x08, 0x0b, 0x28, 0x06, 0xff, 
+		0x0b, 0x0b, 0x14, 0x0c, 0xff, 0x0b, 0x0b, 0x1e, 0x0c, 0xff, 0x0b, 0x16, 0x14, 0x0c, 0xff, 0x0b, 
+		0x16, 0x1e, 0x0c, 0xff, 0x0c, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x21, 
+		0x14, 0x0c, 0xff, 0x0e, 0x2c, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x00, 0x0c, 0xff, 0x0e, 0x21, 0x0a, 
+		0x0c, 0xff, 0x0e, 0x21, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x1e, 0x0c, 0xff, 0x0e, 0x21, 0x28, 0x0c, 
+		0xff, 0x0e, 0x16, 0x00, 0x10, 0xff, 0x13, 0x00, 0x00, 0x0c, 0xff, 0x14, 0x00, 0x14, 0x10, 0xff, 
+		0x14, 0x00, 0x1e, 0x10, 0xff, 0x14, 0x0b, 0x1e, 0x10, 0xff, 0x14, 0x00, 0x28, 0x10, 0xff, 0x14, 
+		0x0b, 0x28, 0x10, 0xff, 0x15, 0x0b, 0x0a, 0x0f, 0xff, 0x15, 0x0b, 0x14, 0x0f, 0xff, 0x15, 0x00, 
+		0x14, 0x0f, 0xff, 0x15, 0x16, 0x14, 0x0f, 0xff, 0x15, 0x21, 0x14, 0x0f, 0xff, 0x15, 0x2c, 0x14, 
+		0x0f, 0xff, 0x15, 0x2c, 0x0a, 0x0f, 0xff, 0x16, 0x16, 0x0a, 0x10, 0xff, 0x16, 0x16, 0x14, 0x10, 
+		0xff, 0x17, 0x16, 0x1e, 0x0d, 0xff, 0x17, 0x16, 0x28, 0x0d, 0xff, 0x17, 0x21, 0x28, 0x0d, 0xff, 
+		0x17, 0x0b, 0x28, 0x0d, 0xff, 0x17, 0x00, 0x28, 0x0d, 0xff, 0x17, 0x00, 0x32, 0x0d, 0xff, 0x19, 
+		0x0b, 0x28, 0x10, 0xff, 0x19, 0x0b, 0x32, 0x10, 0xff, 0x19, 0x00, 0x32, 0x10, 0xff, 0x1b, 0x0b, 
+		0x14, 0x10, 0xff, 0x1b, 0x0b, 0x1e, 0x10, 0xff, 0x1d, 0x0b, 0x0a, 0x10, 0xff, 0x2d, 0x16, 0x1e, 
+		0x0c, 0xff, 0x2d, 0x16, 0x28, 0x0c, 0xff, 0x2d, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x28, 0x0c, 
+		0xff, 0x2e, 0x0b, 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x21, 0x32, 0x0c, 0xff, 
+		0x2f, 0x00, 0x00, 0x0c, 0xff, 0x1a, 0x16, 0x14, 0x10, 0xff, 0x1a, 0x21, 0x0a, 0x10, 0xff, 0x1a, 
+		0x21, 0x14, 0x10, 0xff, 0x1a, 0x21, 0x1e, 0x10, 0xff, 0x1a, 0x2c, 0x1e, 0x10, 0xff, 0x1a, 0x16, 
+		0x1e, 0x10, 0xff, 0x1a, 0x0b, 0x1e, 0x10, 0xff, 0x1a, 0x0b, 0x14, 0x10, 0xff, 0x1a, 0x00, 0x14, 
+		0x10, 0xff, 0x1a, 0x0b, 0x28, 0x10, 0xff, 0x1a, 0x00, 0x28, 0x10, 0xff, 0x1a, 0x16, 0x28, 0x10, 
+		0xff, 0x1a, 0x0b, 0x32, 0x10, 0xff, 0x1c, 0x00, 0x1e, 0x0f, 0xff, 0x1c, 0x00, 0x14, 0x0f, 0xff, 
+		0x1c, 0x00, 0x28, 0x0f, 0xff, 0x1c, 0x0b, 0x1e, 0x0f, 0xff, 0x1c, 0x0b, 0x14, 0x0f, 0xff, 0x1c, 
+		0x16, 0x1e, 0x0f, 0xff, 0x1c, 0x16, 0x14, 0x0f, 0xff, 0xff, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 
+		0x20, 0x4e, 0x41, 0x4d, 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x00, 0x10, 0x12, 0x12, 0x11, 0x10, 
+		0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 
+		0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2d, 
+		0x00, 0x08, 0x00, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4f, 0x50, 0x00, 0x00, 0x0d, 
+		0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 
+		0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x20, 0x44, 
+		0x41, 0x54, 0x41, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 
+		0x48, 0x54, 0x20, 0x31, 0x39, 0x39, 0x32, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x56, 0x45, 
+		0x20, 0x52, 0x45, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x30, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x01, 0x06, 0x02, 0xff, 0x03, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x07, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0x06, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x32, 0x00, 0x02, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x00, 0xff, 0xff, 0x01, 
+		0xff, 0x03, 0xff, 0xff, 0xff, 0x02, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x33, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0x00, 0x02, 0x04, 
+		0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x34, 0x00, 0x17, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x00, 0x05, 0xff, 
+		0xff, 0x03, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x00, 0x04, 0xff, 
+		0xff, 0x03, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x36, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 
+		0xff, 0x00, 0xff, 0xff, 0xff, 0x06, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x37, 0x00, 0xff, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x38, 0x00, 0x08, 0xff, 0x00, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0x00, 0x0b, 0x28, 0x00, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x39, 0x00, 0x09, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x04, 0x06, 0xff, 0xff, 0xff, 
+		0xff, 0x00, 0xff, 0xff, 0xff, 0x09, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x30, 0x00, 0x0a, 0xff, 0x21, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x02, 0x00, 0xff, 0xff, 0x02, 
+		0x02, 0x04, 0x16, 0x1e, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x31, 0x00, 0x0b, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x33, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x34, 0x00, 0x0e, 0xff, 0x2c, 0x14, 0xff, 0xff, 0xff, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x30, 0x00, 0x16, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x02, 0x0f, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x02, 0x0f, 0x01, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x00, 0x04, 0xff, 0xff, 0x01, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x33, 0x00, 0x17, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x02, 0x0f, 0x03, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x34, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x06, 0x02, 0x0f, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x35, 0x00, 0x16, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x36, 0x00, 0x09, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x04, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x37, 0x00, 0x16, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x39, 0x00, 0x16, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x01, 0x0f, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x34, 0x00, 0x17, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x02, 0x0f, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x30, 0x00, 0x0a, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x03, 0x06, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x33, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x06, 0x02, 0xff, 0x04, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x34, 0x00, 0x05, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x06, 0x00, 0xff, 0xff, 
+		0xff, 0xff, 0x21, 0x00, 0x03, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x31, 0x00, 0x0b, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, 0x00, 0x06, 0xff, 0xff, 0x02, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x01, 0x04, 0x02, 0x0f, 0x01, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x32, 0x36, 0x00, 0x09, 0xff, 0x00, 0x28, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x38, 0x00, 0x08, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x03, 0x06, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x28, 0xff, 0xff, 0xff, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x34, 0x37, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x32, 0xff, 0xff, 0xff, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x35, 0x30, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x35, 0x31, 0x00, 0x23, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x35, 0x32, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x35, 0x33, 0x00, 0x23, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x35, 0x34, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x52, 
+		0x35, 0x35, 0x00, 0x0e, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, 0x01, 0x0a, 0x09, 0x08, 0x06, 
+		0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 
+		0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 
+		0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 
+		0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x31, 0x00, 0x44, 
+		0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 
+		0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 
+		0x42, 0x2e, 0x44, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 
+		0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x36, 0x00, 
+		0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x45, 0x4d, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
+	context.data.assign(src, src + sizeof(src)); dreamweb(context); }
 
 void __dispatch_call(Context &context, unsigned addr) {
 	switch(addr) {
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index f4d1801..e5b4493 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -5,13 +5,6 @@
 
 namespace dreamgen {
 
-	struct Data : public Segment {
-		Data();
-	};
-
-
-	typedef RegisterContext<Data> Context;
-
 	void __dispatch_call(Context &context, unsigned addr);
 	void __start(Context &context);
 
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index 7324475..fb634b6 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -6,6 +6,8 @@
 #include "common/array.h"
 #include "common/hashmap.h"
 
+namespace dreamgen {
+
 //fixme: name clash
 #undef random
 
@@ -84,10 +86,16 @@ public:
 
 struct Segment {
 	Common::Array<uint8> data;
+	
+	inline void assign(const uint8 *b, const uint8 *e) {
+		data.assign(b, e);
+	}
+	
 	inline uint8 &byte(unsigned index) {
 		assert(index < data.size());
 		return data[index];
 	}
+	
 	inline uint16 word(unsigned index) const {
 		assert(index + 1 < data.size());
 		return data[index] | (data[index + 1] << 8);
@@ -98,14 +106,15 @@ struct Segment {
 	}
 };
 
+class Context;
 
 class SegmentRef {
-
-	uint16		_value;
-	Segment		*_segment;
+	Context			*_context;
+	uint16			_value;
+	Segment			*_segment;
 
 public:
-	SegmentRef(): _value(), _segment() {
+	SegmentRef(Context *ctx): _context(ctx), _value(), _segment() {
 	}
 
 	inline void reset(uint16 value) {
@@ -164,8 +173,10 @@ struct Flags {
 	}
 };
 
-template<typename Data>
-struct RegisterContext {
+class Context {
+	Common::HashMap<uint16, Segment> _segments;
+	
+public:
 	Register ax, dx, bx, cx, si, di;
 	RegisterPart<kLowPartOfRegister> al;
 	RegisterPart<kHighPartOfRegister> ah;
@@ -179,7 +190,9 @@ struct RegisterContext {
 	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 Context(): al(ax), ah(ax), bl(bx), bh(bx), cl(cx), ch(cx), dl(dx), dh(dx), cs(this), ds(this), es(this) {
+		
+	}
 
 	inline void _cmp(uint8 a, uint8 b) {
 		uint8 x = a;
@@ -330,8 +343,10 @@ struct RegisterContext {
 		return v;
 	}
 	
-	Data data;
+	Segment data;
 };
 
+}
+
 #endif
 


Commit: 0b0b22ccc2157c7260a55afe3add0629703c0b21
    https://github.com/scummvm/scummvm/commit/0b0b22ccc2157c7260a55afe3add0629703c0b21
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:30:14-07:00

Commit Message:
DREAMWEB: removed data declaration

Changed paths:
    devtools/tasmrecover/tasm/cpp.py
    devtools/tasmrecover/tasm/cpp.pyc



diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
index 53338c1..d63f568 100644
--- a/devtools/tasmrecover/tasm/cpp.py
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -497,20 +497,16 @@ namespace %s {
 		self.fd.write("\n\n")
 		print "%d ok, %d failed of %d, %.02g%% translated" %(done, failed, done + failed, 100.0 * done / (done + failed))
 		print "\n".join(self.failed)
-		data_decl = "struct Data : public Segment {\n\t\tData();\n"
-		data_impl = "Data::Data() {\n"
 		data_bin = self.data_seg
-		data_impl += "\tstatic const uint8 src[] = {\n\t\t"
+		data_impl = "\n\tstatic const uint8 src[] = {\n\t\t"
 		n = 0
 		for v in data_bin:
-			data_impl += "%s, " %v
+			data_impl += "0x%02x, " %v
 			n += 1
 			if (n & 0xf) == 0:
 				data_impl += "\n\t\t"
-		data_impl += "};\ndata.assign(src, src + sizeof(src));\n"
+		data_impl += "};\n\tcontext.data.assign(src, src + sizeof(src))"
 		hid = "TASMRECOVER_%s_STUBS_H__" %self.namespace.upper()
-		data_decl += "\t};\n\n"
-		data_impl += "\t};\n\n"
 		self.hd.write("""#ifndef %s
 #define %s
 """ %(hid, hid))
@@ -519,21 +515,16 @@ namespace %s {
 
 namespace %s {
 
-	%s
-	typedef RegisterContext<Data> Context;
-
 	void __dispatch_call(Context &context, unsigned addr);
 	void __start(Context &context);
 
-""" %(self.namespace, data_decl))
-		self.fd.write(data_impl)
-		
+""" %(self.namespace))
 		for f in self.failed:
 			self.hd.write("\tvoid %s(Context &context);\n" %f)
 		self.hd.write("\n}\n\n#endif\n")
 		self.hd.close()
 		
-		self.fd.write("\nvoid __start(Context &context) { %s(context); }\n" %start)
+		self.fd.write("\nvoid __start(Context &context) { %s; %s(context); }\n" %(data_impl, start))
 		
 		self.fd.write("\nvoid __dispatch_call(Context &context, unsigned addr) {\n\tswitch(addr) {\n")
 		self.proc_addr.sort(cmp = lambda x, y: x[1] - y[1])
diff --git a/devtools/tasmrecover/tasm/cpp.pyc b/devtools/tasmrecover/tasm/cpp.pyc
index b0406b3..c454ae4 100644
Binary files a/devtools/tasmrecover/tasm/cpp.pyc and b/devtools/tasmrecover/tasm/cpp.pyc differ


Commit: 4e6483e700e016d9a94b3ddb1fe53e8bc087f9c9
    https://github.com/scummvm/scummvm/commit/4e6483e700e016d9a94b3ddb1fe53e8bc087f9c9
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:30:18-07:00

Commit Message:
DREAMWEB: removed python generated bytecode

Changed paths:
  A devtools/tasmrecover/.gitignore
  R devtools/tasmrecover/tasm/__init__.pyc
  R devtools/tasmrecover/tasm/cpp.pyc
  R devtools/tasmrecover/tasm/lex.pyc
  R devtools/tasmrecover/tasm/op.pyc
  R devtools/tasmrecover/tasm/parser.pyc
  R devtools/tasmrecover/tasm/proc.pyc



diff --git a/devtools/tasmrecover/.gitignore b/devtools/tasmrecover/.gitignore
new file mode 100644
index 0000000..0d20b64
--- /dev/null
+++ b/devtools/tasmrecover/.gitignore
@@ -0,0 +1 @@
+*.pyc
diff --git a/devtools/tasmrecover/tasm/__init__.pyc b/devtools/tasmrecover/tasm/__init__.pyc
deleted file mode 100644
index 8582b7b..0000000
Binary files a/devtools/tasmrecover/tasm/__init__.pyc and /dev/null differ
diff --git a/devtools/tasmrecover/tasm/cpp.pyc b/devtools/tasmrecover/tasm/cpp.pyc
deleted file mode 100644
index c454ae4..0000000
Binary files a/devtools/tasmrecover/tasm/cpp.pyc and /dev/null differ
diff --git a/devtools/tasmrecover/tasm/lex.pyc b/devtools/tasmrecover/tasm/lex.pyc
deleted file mode 100644
index aaab26e..0000000
Binary files a/devtools/tasmrecover/tasm/lex.pyc and /dev/null differ
diff --git a/devtools/tasmrecover/tasm/op.pyc b/devtools/tasmrecover/tasm/op.pyc
deleted file mode 100644
index 2e212ae..0000000
Binary files a/devtools/tasmrecover/tasm/op.pyc and /dev/null differ
diff --git a/devtools/tasmrecover/tasm/parser.pyc b/devtools/tasmrecover/tasm/parser.pyc
deleted file mode 100644
index d7049c8..0000000
Binary files a/devtools/tasmrecover/tasm/parser.pyc and /dev/null differ
diff --git a/devtools/tasmrecover/tasm/proc.pyc b/devtools/tasmrecover/tasm/proc.pyc
deleted file mode 100644
index cd8f967..0000000
Binary files a/devtools/tasmrecover/tasm/proc.pyc and /dev/null differ


Commit: 781d06709f4e5dbc0812c285248a08452f9f7005
    https://github.com/scummvm/scummvm/commit/781d06709f4e5dbc0812c285248a08452f9f7005
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:30:24-07:00

Commit Message:
DREAMWEB: updated git ignore

Changed paths:
    devtools/tasmrecover/.gitignore



diff --git a/devtools/tasmrecover/.gitignore b/devtools/tasmrecover/.gitignore
index 0d20b64..c1b0a4c 100644
--- a/devtools/tasmrecover/.gitignore
+++ b/devtools/tasmrecover/.gitignore
@@ -1 +1,5 @@
 *.pyc
+dreamweb
+dreamgen.*
+_stubs*
+


Commit: 1ee6b0af692d0dc478ad50ec32c8a7144c40ee40
    https://github.com/scummvm/scummvm/commit/1ee6b0af692d0dc478ad50ec32c8a7144c40ee40
Author: Vladimir (whoozle at yandex.ru)
Date: 2011-06-15T08:30:29-07:00

Commit Message:
DREAMWEB: get rid of data, added simple segment management

Changed paths:
    devtools/tasmrecover/tasm/cpp.py
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/runtime.h



diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
index d63f568..f9afe48 100644
--- a/devtools/tasmrecover/tasm/cpp.py
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -63,7 +63,7 @@ namespace %s {
 			if size == 0:
 				raise Exception("invalid var '%s' size %u" %(name, size))
 			if self.indirection == 0:
-				value = "context.data.%s(%d)" %("byte" if size == 1 else "word", g.offset)
+				value = "context.ds.%s(%d)" %("byte" if size == 1 else "word", g.offset)
 			elif self.indirection == -1:
 				value = "%s" %g.offset
 				self.indirection = 0
@@ -161,9 +161,9 @@ namespace %s {
 		
 		if indirection == 1:
 			if size == 1:
-				expr = "context.data.byte(%s)" %expr
+				expr = "context.ds.byte(%s)" %expr
 			elif size == 2:
-				expr = "context.data.word(%s)" %expr
+				expr = "context.ds.word(%s)" %expr
 			else:
 				expr = "@invalid size 0"
 		elif indirection == 0:
@@ -505,7 +505,7 @@ namespace %s {
 			n += 1
 			if (n & 0xf) == 0:
 				data_impl += "\n\t\t"
-		data_impl += "};\n\tcontext.data.assign(src, src + sizeof(src))"
+		data_impl += "};\n\tcontext.ds.assign(src, src + sizeof(src))"
 		hid = "TASMRECOVER_%s_STUBS_H__" %self.namespace.upper()
 		self.hd.write("""#ifndef %s
 #define %s
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 6d45fbf..3ec12c1 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -483,7 +483,7 @@ static void intro3text(Context &context);
 static void intro1text(Context &context);
 
 static void alleybarksound(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._sub(context.ax, 1);
 	context._cmp(context.ax, 0);
 	if (!context.flags.z()) goto nobark;
@@ -495,7 +495,7 @@ static void alleybarksound(Context & context) {
 	context.bx = context.pop();
 	context.ax = 1000;
 nobark:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 	return;
 }
 
@@ -516,49 +516,49 @@ nofog:
 static void receptionist(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gotrecep;
-	context._cmp(context.data.byte(52), 1);
+	context._cmp(context.ds.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;
+	context._add(context.ds.byte(52), 1);
+	context.ds.byte(context.bx+7) = 1;
+	context.ds.word(context.bx+3) = 64;
 notsetcard:
-	context._cmp(context.data.word(context.bx+3), 58);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx+3) = 55;
 	goto gotrecep;
 notdes1:
-	context._cmp(context.data.word(context.bx+3), 60);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx+3) = 53;
 	goto gotrecep;
 notdes2:
-	context._cmp(context.data.word(context.bx+3), 88);
+	context._cmp(context.ds.word(context.bx+3), 88);
 	if (!context.flags.z()) goto notendcard;
-	context.data.word(context.bx+3) = 53;
+	context.ds.word(context.bx+3) = 53;
 	goto gotrecep;
 notendcard:
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 gotrecep:
 	showgamereel(context);
 	addtopeoplelist(context);
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 128);
 	if (context.flags.z()) goto nottalkedrecep;
-	context.data.byte(51) = 1;
+	context.ds.byte(51) = 1;
 nottalkedrecep:
 	return;
 }
 
 static void smokebloke(Context & context) {
-	context._cmp(context.data.byte(41), 0);
+	context._cmp(context.ds.byte(41), 0);
 	if (!context.flags.z()) goto notspokento;
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 128);
 	if (context.flags.z()) goto notspokento;
 	context.push(context.es);
@@ -570,20 +570,20 @@ static void smokebloke(Context & context) {
 notspokento:
 	checkspeed(context);
 	if (!context.flags.z()) goto gotsmokeb;
-	context._cmp(context.data.word(context.bx+3), 100);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx+3) = 96;
 	goto gotsmokeb;
 notsmokeb1:
-	context._cmp(context.data.word(context.bx+3), 117);
+	context._cmp(context.ds.word(context.bx+3), 117);
 	if (!context.flags.z()) goto notsmokeb2;
-	context.data.word(context.bx+3) = 96;
+	context.ds.word(context.bx+3) = 96;
 	goto gotsmokeb;
 notsmokeb2:
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 gotsmokeb:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -593,25 +593,25 @@ gotsmokeb:
 static void attendant(Context & context) {
 	showgamereel(context);
 	addtopeoplelist(context);
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 128);
 	if (context.flags.z()) goto nottalked;
-	context.data.byte(48) = 1;
+	context.ds.byte(48) = 1;
 nottalked:
 	return;
 }
 
 static void manasleep(Context & context) {
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 127);
-	context.data.byte(context.bx+7) = context.al;
+	context.ds.byte(context.bx+7) = context.al;
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
 }
 
 static void eden(Context & context) {
-	context._cmp(context.data.byte(42), 0);
+	context._cmp(context.ds.byte(42), 0);
 	if (!context.flags.z()) goto notinbed;
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -620,9 +620,9 @@ notinbed:
 }
 
 static void edeninbath(Context & context) {
-	context._cmp(context.data.byte(42), 0);
+	context._cmp(context.ds.byte(42), 0);
 	if (context.flags.z()) goto notinbed;
-	context._cmp(context.data.byte(43), 0);
+	context._cmp(context.ds.byte(43), 0);
 	if (!context.flags.z()) goto notinbath;
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -647,7 +647,7 @@ static void femalefan(Context & context) {
 }
 
 static void louis(Context & context) {
-	context._cmp(context.data.byte(41), 0);
+	context._cmp(context.ds.byte(41), 0);
 	if (!context.flags.z()) goto notlouis1;
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -656,26 +656,26 @@ notlouis1:
 }
 
 static void louischair(Context & context) {
-	context._cmp(context.data.byte(41), 0);
+	context._cmp(context.ds.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.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 	goto notlouisanim;
 randomlouis:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 notlouisanim:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -684,9 +684,9 @@ notlouis2:
 }
 
 static void manasleep2(Context & context) {
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 127);
-	context.data.byte(context.bx+7) = context.al;
+	context.ds.byte(context.bx+7) = context.al;
 	showgamereel(context);
 	addtopeoplelist(context);
 	return;
@@ -707,18 +707,18 @@ static void tattooman(Context & context) {
 static 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);
+	context._add(context.ds.word(context.bx+3), 1);
+	context._cmp(context.ds.word(context.bx+3), 115);
 	if (!context.flags.z()) goto notdrinker1;
-	context.data.word(context.bx+3) = 105;
+	context.ds.word(context.bx+3) = 105;
 	goto gotdrinker;
 notdrinker1:
-	context._cmp(context.data.word(context.bx+3), 106);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx+3) = 105;
 gotdrinker:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -728,25 +728,25 @@ gotdrinker:
 static void bartender(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gotsmoket;
-	context._cmp(context.data.word(context.bx+3), 86);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx+3) = 81;
 	goto gotsmoket;
 notsmoket1:
-	context._cmp(context.data.word(context.bx+3), 103);
+	context._cmp(context.ds.word(context.bx+3), 103);
 	if (!context.flags.z()) goto notsmoket2;
-	context.data.word(context.bx+3) = 81;
+	context.ds.word(context.bx+3) = 81;
 	goto gotsmoket;
 notsmoket2:
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 gotsmoket:
 	showgamereel(context);
-	context._cmp(context.data.byte(46), 1);
+	context._cmp(context.ds.byte(46), 1);
 	if (!context.flags.z()) goto notgotgun;
-	context.data.byte(context.bx+7) = 9;
+	context.ds.byte(context.bx+7) = 9;
 notgotgun:
 	addtopeoplelist(context);
 	return;
@@ -765,49 +765,49 @@ static void barwoman(Context & context) {
 }
 
 static void interviewer(Context & context) {
-	context._cmp(context.data.word(23), 68);
+	context._cmp(context.ds.word(23), 68);
 	if (!context.flags.z()) goto notgeneralstart;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 notgeneralstart:
-	context._cmp(context.data.word(context.bx+3), 250);
+	context._cmp(context.ds.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);
+	context._cmp(context.ds.word(context.bx+3), 259);
 	if (context.flags.z()) goto talking;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 talking:
 	showgamereel(context);
 	return;
 }
 
 static void soldier1(Context & context) {
-	context._cmp(context.data.word(context.bx+3), 0);
+	context._cmp(context.ds.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);
+	context.ds.word(21) = 10;
+	context._cmp(context.ds.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);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 40);
 	if (!context.flags.z()) goto gotsoldframe;
-	context.data.byte(56) = 2;
+	context.ds.byte(56) = 2;
 	goto gotsoldframe;
 notaftersshot:
 	checkspeed(context);
 	if (!context.flags.z()) goto gotsoldframe;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 	goto gotsoldframe;
 soldierwait:
-	context._cmp(context.data.byte(65), 1);
+	context._cmp(context.ds.byte(65), 1);
 	if (!context.flags.z()) goto gotsoldframe;
-	context.data.word(21) = 10;
-	context._cmp(context.data.byte(475), 2);
+	context.ds.word(21) = 10;
+	context._cmp(context.ds.byte(475), 2);
 	if (!context.flags.z()) goto gotsoldframe;
-	context._cmp(context.data.byte(133), 4);
+	context._cmp(context.ds.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;
+	context._add(context.ds.word(context.bx+3), 1);
+	context.ds.byte(65) = -1;
+	context.ds.byte(64) = 0;
 gotsoldframe:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -815,70 +815,70 @@ gotsoldframe:
 }
 
 static void rockstar(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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.ax = context.ds.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;
+	context.ds.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);
+	context._cmp(context.ds.byte(65), 1);
 	if (!context.flags.z()) goto notgunonrock;
-	context.data.byte(65) = -1;
+	context.ds.byte(65) = -1;
 	context.ax = 123;
 	goto gotrockframe;
 notgunonrock:
-	context._add(context.data.byte(64), 1);
-	context._cmp(context.data.byte(64), 40);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 40);
 	if (!context.flags.z()) goto gotrockframe;
-	context.data.byte(64) = 0;
+	context.ds.byte(64) = 0;
 	context.ax = 79;
 gotrockframe:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 rockspeed:
 	showgamereel(context);
-	context._cmp(context.data.word(context.bx+3), 78);
+	context._cmp(context.ds.word(context.bx+3), 78);
 	if (!context.flags.z()) goto notalkrock;
 	addtopeoplelist(context);
-	context.data.byte(234) = 2;
-	context.data.word(21) = 0;
+	context.ds.byte(234) = 2;
+	context.ds.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;
+	context.ds.word(21) = 2;
+	context.ds.byte(234) = 0;
+	context.al = context.ds.byte(149);
+	context.ds.byte(context.bx+2) = context.al;
 	return;
 rockcombatend:
-	context.data.byte(188) = 45;
+	context.ds.byte(188) = 45;
 	showgamereel(context);
 	return;
 }
 
 static void helicopter(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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.ax = context.ds.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);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 8);
 	if (context.flags.c()) goto waitabit;
-	context.data.byte(56) = 2;
+	context.ds.byte(56) = 2;
 waitabit:
 	context.ax = 49;
 	goto gotheliframe;
@@ -886,59 +886,59 @@ notbeforehdead:
 	context._cmp(context.ax, 9);
 	if (!context.flags.z()) goto gotheliframe;
 	context._sub(context.ax, 1);
-	context._cmp(context.data.byte(65), 1);
+	context._cmp(context.ds.byte(65), 1);
 	if (!context.flags.z()) goto notgunonheli;
-	context.data.byte(65) = -1;
+	context.ds.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);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 20);
 	if (!context.flags.z()) goto gotheliframe;
-	context.data.byte(64) = 0;
+	context.ds.byte(64) = 0;
 	context.ax = 9;
 gotheliframe:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 helispeed:
 	showgamereel(context);
-	context.al = context.data.byte(148);
-	context.data.byte(context.bx+1) = context.al;
+	context.al = context.ds.byte(148);
+	context.ds.byte(context.bx+1) = context.al;
 helicombatend:
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 9);
 	if (!context.flags.c()) goto notwaitingheli;
-	context._cmp(context.data.byte(64), 7);
+	context._cmp(context.ds.byte(64), 7);
 	if (context.flags.c()) goto notwaitingheli;
-	context.data.byte(234) = 2;
-	context.data.word(21) = 0;
+	context.ds.byte(234) = 2;
+	context.ds.word(21) = 0;
 	return;
 notwaitingheli:
-	context.data.byte(234) = 0;
-	context.data.word(21) = 2;
+	context.ds.byte(234) = 0;
+	context.ds.word(21) = 2;
 	return;
 heliwon:
-	context.data.byte(234) = 0;
+	context.ds.byte(234) = 0;
 	return;
 }
 
 static void mugger(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(21) = 175*2;
 havesetwatch:
 	checkspeed(context);
 	if (!context.flags.z()) goto notmugger;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 notmugger:
 	showgamereel(context);
-	context.al = context.data.byte(148);
-	context.data.byte(context.bx+1) = context.al;
+	context.al = context.ds.byte(148);
+	context.ds.byte(context.bx+1) = context.al;
 	return;
 endmugger1:
 	context.push(context.es);
@@ -959,26 +959,26 @@ endmugger1:
 	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;
+	context.ds.word(context.bx+3) = 140;
+	context.ds.byte(475) = 2;
+	context.ds.byte(477) = 2;
 	findxyfrompath(context);
-	context.data.byte(187) = 1;
+	context.ds.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;
+	context.ds.byte(99) = context.al;
+	context.ds.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;
+	context.ds.byte(99) = context.al;
+	context.ds.byte(102) = 4;
 	removeobfrominv(context);
 	makemainscreen(context);
 	context.al = 48;
@@ -987,7 +987,7 @@ endmugger1:
 	context.cx = 70;
 	context.dx = 10;
 	setuptimeduse(context);
-	context.data.byte(45) = 1;
+	context.ds.byte(45) = 1;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
@@ -1002,9 +1002,9 @@ static void aide(Context & context) {
 }
 
 static void businessman(Context & context) {
-	context.data.byte(234) = 0;
-	context.data.word(21) = 2;
-	context.ax = context.data.word(context.bx+3);
+	context.ds.byte(234) = 0;
+	context.ds.word(21) = 2;
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 2);
 	if (!context.flags.z()) goto notfirstbiz;
 	context.push(context.ax);
@@ -1026,27 +1026,27 @@ notfirstbiz:
 	if (context.flags.z()) goto buscombatend;
 	checkspeed(context);
 	if (!context.flags.z()) goto busspeed;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.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);
+	context._cmp(context.ds.byte(65), 3);
 	if (!context.flags.z()) goto notshieldonbus;
-	context.data.byte(65) = -1;
-	context.data.byte(64) = 0;
+	context.ds.byte(65) = -1;
+	context.ds.byte(64) = 0;
 	context.ax = 51;
 	goto gotbusframe;
 notshieldonbus:
-	context._add(context.data.byte(64), 1);
-	context._cmp(context.data.byte(64), 20);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 20);
 	if (!context.flags.z()) goto gotbusframe;
-	context.data.byte(64) = 0;
+	context.ds.byte(64) = 0;
 	context.ax = 15;
 	goto gotbusframe;
 buscombatwon:
@@ -1062,36 +1062,36 @@ buscombatwon:
 	turnpathon(context);
 	context.al = 3;
 	turnpathoff(context);
-	context.data.byte(475) = 5;
-	context.data.byte(477) = 5;
+	context.ds.byte(475) = 5;
+	context.ds.byte(477) = 5;
 	findxyfrompath(context);
-	context.data.byte(187) = 1;
+	context.ds.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;
+	context.ds.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.al = context.ds.byte(149);
+	context.ds.byte(context.bx+2) = context.al;
+	context.ax = context.ds.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;
+	context.ds.word(21) = 0;
+	context.ds.byte(234) = 2;
 	return;
 buscombatend:
 	return;
 buscombatwonend:
-	context.data.byte(234) = 0;
-	context.data.word(21) = 0;
+	context.ds.byte(234) = 0;
+	context.ds.word(21) = 0;
 	return;
 }
 
 static void poolguard(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 214);
 	if (context.flags.z()) goto combatover2;
 	context._cmp(context.ax, 258);
@@ -1105,57 +1105,57 @@ static void poolguard(Context & context) {
 notfirstpool:
 	checkspeed(context);
 	if (!context.flags.z()) goto guardspeed;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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);
+	context._cmp(context.ds.byte(65), 2);
 	if (!context.flags.z()) goto notaxeonpool;
-	context.data.byte(65) = -1;
+	context.ds.byte(65) = -1;
 	context.ax = 122;
 	goto gotguardframe;
 notaxeonpool:
-	context._add(context.data.byte(64), 1);
-	context._cmp(context.data.byte(64), 40);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 40);
 	if (!context.flags.z()) goto gotguardframe;
-	context.data.byte(64) = 0;
+	context.ds.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);
+	context._cmp(context.ds.byte(65), 1);
 	if (!context.flags.z()) goto notgunonpool;
-	context.data.byte(65) = -1;
+	context.ds.byte(65) = -1;
 	context.ax = 147;
 	goto gotguardframe;
 notgunonpool:
-	context._add(context.data.byte(64), 1);
-	context._cmp(context.data.byte(64), 40);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 40);
 	if (!context.flags.z()) goto gotguardframe;
-	context.data.byte(64) = 0;
+	context.ds.byte(64) = 0;
 	context.ax = 220;
 gotguardframe:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 guardspeed:
 	showgamereel(context);
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.byte(234) = 0;
+	context.ds.word(21) = 2;
 	return;
 iswaitingpool:
-	context.data.byte(234) = 2;
-	context.data.word(21) = 0;
+	context.ds.byte(234) = 2;
+	context.ds.word(21) = 0;
 	return;
 combatover1:
-	context.data.word(21) = 0;
-	context.data.byte(234) = 0;
+	context.ds.word(21) = 0;
+	context.ds.byte(234) = 0;
 	context.al = 0;
 	turnpathon(context);
 	context.al = 1;
@@ -1163,39 +1163,39 @@ combatover1:
 	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);
+	context.ds.word(21) = 2;
+	context.ds.byte(234) = 0;
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 100);
 	if (context.flags.c()) goto doneover2;
-	context.data.word(21) = 0;
-	context.data.byte(56) = 2;
+	context.ds.word(21) = 0;
+	context.ds.byte(56) = 2;
 doneover2:
 	return;
 }
 
 static void security(Context & context) {
-	context._cmp(context.data.word(context.bx+3), 32);
+	context._cmp(context.ds.word(context.bx+3), 32);
 	if (context.flags.z()) goto securwait;
-	context._cmp(context.data.word(context.bx+3), 69);
+	context._cmp(context.ds.word(context.bx+3), 69);
 	if (!context.flags.z()) goto notaftersec;
 	return;
 notaftersec:
-	context.data.word(21) = 10;
+	context.ds.word(21) = 10;
 	checkspeed(context);
 	if (!context.flags.z()) goto gotsecurframe;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 	goto gotsecurframe;
 securwait:
-	context._cmp(context.data.byte(65), 1);
+	context._cmp(context.ds.byte(65), 1);
 	if (!context.flags.z()) goto gotsecurframe;
-	context.data.word(21) = 10;
-	context._cmp(context.data.byte(475), 9);
+	context.ds.word(21) = 10;
+	context._cmp(context.ds.byte(475), 9);
 	if (!context.flags.z()) goto gotsecurframe;
-	context._cmp(context.data.byte(133), 0);
+	context._cmp(context.ds.byte(133), 0);
 	if (!context.flags.z()) goto gotsecurframe;
-	context.data.byte(65) = -1;
-	context._add(context.data.word(context.bx+3), 1);
+	context.ds.byte(65) = -1;
+	context._add(context.ds.word(context.bx+3), 1);
 gotsecurframe:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -1203,34 +1203,34 @@ gotsecurframe:
 }
 
 static void heavy(Context & context) {
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.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);
+	context.ds.byte(context.bx+7) = context.al;
+	context._cmp(context.ds.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);
+	context.ds.word(21) = 10;
+	context._cmp(context.ds.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);
+	context._add(context.ds.byte(64), 1);
+	context._cmp(context.ds.byte(64), 80);
 	if (!context.flags.z()) goto gotheavyframe;
-	context.data.byte(56) = 2;
+	context.ds.byte(56) = 2;
 	goto gotheavyframe;
 notafterhshot:
 	checkspeed(context);
 	if (!context.flags.z()) goto gotheavyframe;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 	goto gotheavyframe;
 heavywait:
-	context._cmp(context.data.byte(65), 1);
+	context._cmp(context.ds.byte(65), 1);
 	if (!context.flags.z()) goto gotheavyframe;
-	context._cmp(context.data.byte(475), 5);
+	context._cmp(context.ds.byte(475), 5);
 	if (!context.flags.z()) goto gotheavyframe;
-	context._cmp(context.data.byte(133), 4);
+	context._cmp(context.ds.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;
+	context.ds.byte(65) = -1;
+	context._add(context.ds.word(context.bx+3), 1);
+	context.ds.byte(64) = 0;
 gotheavyframe:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -1240,7 +1240,7 @@ gotheavyframe:
 static void bossman(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto notboss;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._add(context.ax, 1);
 	context._cmp(context.ax, 4);
 	if (context.flags.z()) goto firstdes;
@@ -1249,11 +1249,11 @@ static void bossman(Context & context) {
 	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;
+	context._add(context.ds.byte(46), 1);
+	context.ds.byte(context.bx+7) = 10;
 	goto gotallboss;
 firstdes:
-	context._cmp(context.data.byte(46), 1);
+	context._cmp(context.ds.byte(46), 1);
 	if (context.flags.z()) goto gotallboss;
 	context.push(context.ax);
 	randomnumber(context);
@@ -1264,18 +1264,18 @@ firstdes:
 	context.ax = 0;
 	goto gotallboss;
 secdes:
-	context._cmp(context.data.byte(46), 1);
+	context._cmp(context.ds.byte(46), 1);
 	if (context.flags.z()) goto gotallboss;
 	context.ax = 0;
 gotallboss:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 notboss:
 	showgamereel(context);
 	addtopeoplelist(context);
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 128);
 	if (context.flags.z()) goto nottalkedboss;
-	context.data.byte(50) = 1;
+	context.ds.byte(50) = 1;
 nottalkedboss:
 	return;
 }
@@ -1289,10 +1289,10 @@ gameragain:
 	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));
+	context._cmp(context.al, context.ds.byte(context.bx+3));
 	if (context.flags.z()) goto gameragain;
 	context.ah = 0;
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 gamerfin:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -1319,17 +1319,17 @@ cantdrip2:
 }
 
 static void keeper(Context & context) {
-	context._cmp(context.data.byte(54), 0);
+	context._cmp(context.ds.byte(54), 0);
 	if (!context.flags.z()) goto notwaiting;
-	context._cmp(context.data.word(23), 190);
+	context._cmp(context.ds.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._add(context.ds.byte(54), 1);
+	context.ah = context.ds.byte(context.bx+7);
 	context._and(context.ah, 127);
-	context._cmp(context.ah, context.data.byte(66));
+	context._cmp(context.ah, context.ds.byte(66));
 	if (context.flags.z()) goto notdiff;
-	context.al = context.data.byte(66);
-	context.data.byte(context.bx+7) = context.al;
+	context.al = context.ds.byte(66);
+	context.ds.byte(context.bx+7) = context.al;
 notdiff:
 	return;
 notwaiting:
@@ -1342,13 +1342,13 @@ waiting:
 static void candles1(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto candle1;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 candle1:
 	showgamereel(context);
 	return;
@@ -1357,13 +1357,13 @@ candle1:
 static void smallcandle(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto smallcandlef;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 smallcandlef:
 	showgamereel(context);
 	return;
@@ -1372,25 +1372,25 @@ smallcandlef:
 static void intromagic1(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto introm1fin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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.ds.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._add(context.ds.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);
+	context._cmp(context.ds.byte(139), 8);
 	if (!context.flags.z()) goto introm1fin;
-	context._add(context.data.byte(149), 10);
-	context.data.byte(186) = 1;
+	context._add(context.ds.byte(149), 10);
+	context.ds.byte(186) = 1;
 introm1fin:
 	showgamereel(context);
 	return;
@@ -1399,13 +1399,13 @@ introm1fin:
 static void candles(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto candlesfin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 candlesfin:
 	showgamereel(context);
 	return;
@@ -1414,13 +1414,13 @@ candlesfin:
 static void candles2(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto candles2fin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 candles2fin:
 	showgamereel(context);
 	return;
@@ -1429,7 +1429,7 @@ candles2fin:
 static void gates(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto gatesfin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._add(context.ax, 1);
 	context._cmp(context.ax, 116);
 	if (!context.flags.z()) goto notbang;
@@ -1444,14 +1444,14 @@ static void gates(Context & context) {
 notbang:
 	context._cmp(context.ax, 110);
 	if (context.flags.c()) goto slowgates;
-	context.data.byte(context.bx+5) = 2;
+	context.ds.byte(context.bx+5) = 2;
 slowgates:
 	context._cmp(context.ax, 120);
 	if (!context.flags.z()) goto gotgates;
-	context.data.byte(103) = 1;
+	context.ds.byte(103) = 1;
 	context.ax = 119;
 gotgates:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 	context.push(context.es);
 	context.push(context.bx);
 	intro3text(context);
@@ -1465,13 +1465,13 @@ gatesfin:
 static void intromagic2(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto introm2fin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 introm2fin:
 	showgamereel(context);
 	return;
@@ -1480,39 +1480,39 @@ introm2fin:
 static void intromagic3(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto introm3fin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.byte(103) = 1;
 gotintrom3:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 introm3fin:
 	showgamereel(context);
-	context.al = context.data.byte(148);
-	context.data.byte(context.bx+1) = context.al;
+	context.al = context.ds.byte(148);
+	context.ds.byte(context.bx+1) = context.al;
 	return;
 }
 
 static void intromonks1(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto intromonk1fin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context._add(context.ds.byte(149), 10);
+	context.ds.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._sub(context.ds.byte(149), 10);
+	context.ds.byte(186) = 1;
 	context.ax = 51;
 gotintromonk1:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 	context._cmp(context.ax, 5);
 	if (context.flags.z()) goto waitstep;
 	context._cmp(context.ax, 15);
@@ -1530,28 +1530,28 @@ waitstep:
 	intro2text(context);
 	context.bx = context.pop();
 	context.es = context.pop();
-	context.data.byte(context.bx+6) = -20;
+	context.ds.byte(context.bx+6) = -20;
 intromonk1fin:
 	showgamereel(context);
-	context.al = context.data.byte(149);
-	context.data.byte(context.bx+2) = context.al;
+	context.al = context.ds.byte(149);
+	context.ds.byte(context.bx+2) = context.al;
 	return;
 }
 
 static void intromonks2(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto intromonk2fin;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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._add(context.ds.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);
+	context._cmp(context.ds.byte(139), 19);
 	if (!context.flags.z()) goto notlasttalk1;
 	context.ax = 87;
 	goto gotintromonk2;
@@ -1561,13 +1561,13 @@ notlasttalk1:
 nottalk1:
 	context._cmp(context.ax, 110);
 	if (!context.flags.z()) goto notraisearm;
-	context._add(context.data.byte(139), 1);
+	context._add(context.ds.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);
+	context._cmp(context.ds.byte(139), 35);
 	if (!context.flags.z()) goto notlastraise;
 	context.ax = 111;
 	goto gotintromonk2;
@@ -1577,14 +1577,14 @@ notlastraise:
 notraisearm:
 	context._cmp(context.ax, 176);
 	if (!context.flags.z()) goto notendmonk2;
-	context.data.byte(103) = 1;
+	context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 intromonk2fin:
 	showgamereel(context);
 	return;
@@ -1595,7 +1595,7 @@ static void handclap(Context & context) {
 }
 
 static void monks2text(Context & context) {
-	context._cmp(context.data.byte(139), 1);
+	context._cmp(context.ds.byte(139), 1);
 	if (!context.flags.z()) goto notmonk2text1;
 	context.al = 8;
 	context.bl = 36;
@@ -1603,7 +1603,7 @@ static void monks2text(Context & context) {
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text1:
-	context._cmp(context.data.byte(139), 4);
+	context._cmp(context.ds.byte(139), 4);
 	if (!context.flags.z()) goto notmonk2text2;
 	context.al = 9;
 	context.bl = 36;
@@ -1611,7 +1611,7 @@ notmonk2text1:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text2:
-	context._cmp(context.data.byte(139), 7);
+	context._cmp(context.ds.byte(139), 7);
 	if (!context.flags.z()) goto notmonk2text3;
 	context.al = 10;
 	context.bl = 36;
@@ -1619,7 +1619,7 @@ notmonk2text2:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text3:
-	context._cmp(context.data.byte(139), 10);
+	context._cmp(context.ds.byte(139), 10);
 	if (!context.flags.z()) goto notmonk2text4;
 	context.al = 11;
 	context.bl = 0;
@@ -1627,7 +1627,7 @@ notmonk2text3:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text4:
-	context._cmp(context.data.byte(139), 13);
+	context._cmp(context.ds.byte(139), 13);
 	if (!context.flags.z()) goto notmonk2text5;
 	context.al = 12;
 	context.bl = 0;
@@ -1635,7 +1635,7 @@ notmonk2text4:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text5:
-	context._cmp(context.data.byte(139), 16);
+	context._cmp(context.ds.byte(139), 16);
 	if (!context.flags.z()) goto notmonk2text6;
 	context.al = 13;
 	context.bl = 0;
@@ -1643,7 +1643,7 @@ notmonk2text5:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text6:
-	context._cmp(context.data.byte(139), 19);
+	context._cmp(context.ds.byte(139), 19);
 	if (!context.flags.z()) goto notmonk2text7;
 	context.al = 14;
 	context.bl = 36;
@@ -1653,7 +1653,7 @@ notmonk2text6:
 	context.ah = 82;
 	{ setuptimedtemp(context); return; };
 notmonk2text7:
-	context._cmp(context.data.byte(139), 22);
+	context._cmp(context.ds.byte(139), 22);
 	if (!context.flags.z()) goto notmonk2text8;
 	context.al = 15;
 	context.bl = 36;
@@ -1661,7 +1661,7 @@ notmonk2text7:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text8:
-	context._cmp(context.data.byte(139), 25);
+	context._cmp(context.ds.byte(139), 25);
 	if (!context.flags.z()) goto notmonk2text9;
 	context.al = 16;
 	context.bl = 36;
@@ -1669,7 +1669,7 @@ notmonk2text8:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text9:
-	context._cmp(context.data.byte(139), 28);
+	context._cmp(context.ds.byte(139), 28);
 	if (!context.flags.z()) goto notmonk2text10;
 	context.al = 17;
 	context.bl = 36;
@@ -1677,7 +1677,7 @@ notmonk2text9:
 	context.cx = 100;
 	goto gotmonks2text;
 notmonk2text10:
-	context._cmp(context.data.byte(139), 31);
+	context._cmp(context.ds.byte(139), 31);
 	if (!context.flags.z()) goto notmonk2text11;
 	context.al = 18;
 	context.bl = 36;
@@ -1695,7 +1695,7 @@ gotmonks2text:
 }
 
 static void intro1text(Context & context) {
-	context._cmp(context.data.byte(139), 2);
+	context._cmp(context.ds.byte(139), 2);
 	if (!context.flags.z()) goto notintro1text1;
 	context.al = 40;
 	context.bl = 34;
@@ -1703,7 +1703,7 @@ static void intro1text(Context & context) {
 	context.cx = 90;
 	goto gotintro1text;
 notintro1text1:
-	context._cmp(context.data.byte(139), 4);
+	context._cmp(context.ds.byte(139), 4);
 	if (!context.flags.z()) goto notintro1text2;
 	context.al = 41;
 	context.bl = 34;
@@ -1711,7 +1711,7 @@ notintro1text1:
 	context.cx = 90;
 	goto gotintro1text;
 notintro1text2:
-	context._cmp(context.data.byte(139), 6);
+	context._cmp(context.ds.byte(139), 6);
 	if (!context.flags.z()) goto notintro1text3;
 	context.al = 42;
 	context.bl = 34;
@@ -1781,23 +1781,23 @@ gotintro3text:
 static void monkandryan(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto notmonkryan;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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._add(context.ds.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);
+	context._cmp(context.ds.byte(139), 57);
 	if (!context.flags.z()) goto gotmonkryan;
-	context.data.byte(103) = 1;
+	context.ds.byte(103) = 1;
 	return;
 gotmonkryan:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 notmonkryan:
 	showgamereel(context);
 	return;
@@ -1806,13 +1806,13 @@ notmonkryan:
 static void endgameseq(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto notendseq;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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);
+	context._cmp(context.ds.byte(139), 140);
 	if (context.flags.z()) goto gotendseq;
-	context._add(context.data.byte(139), 1);
+	context._add(context.ds.byte(139), 1);
 	context.push(context.es);
 	context.push(context.bx);
 	textforend(context);
@@ -1820,7 +1820,7 @@ static void endgameseq(Context & context) {
 	context.es = context.pop();
 	context.ax = 50;
 gotendseq:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 	context._cmp(context.ax, 134);
 	if (!context.flags.z()) goto notfadedown;
 	context.push(context.es);
@@ -1838,23 +1838,23 @@ notfadedown:
 	context.push(context.bx);
 	context.push(context.ax);
 	fadescreendowns(context);
-	context.data.byte(387) = 7;
-	context.data.byte(388) = 1;
+	context.ds.byte(387) = 7;
+	context.ds.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;
+	context.ds.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.al = context.ds.byte(149);
+	context.ds.byte(context.bx+2) = context.al;
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 145);
 	if (!context.flags.z()) goto notendcreds;
-	context.data.word(context.bx+3) = 146;
+	context.ds.word(context.bx+3) = 146;
 	rollendcredits(context);
 notendcreds:
 	return;
@@ -1864,26 +1864,26 @@ static 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.ds.byte(386) = 7;
+	context.ds.byte(387) = 0;
+	context.ds.byte(388) = -1;
 	context.cl = 160;
 	context.ch = 160;
 	context.di = 75;
 	context.bx = 20;
-	context.ds = context.data.word(402);
+	context.ds = context.ds.word(402);
 	context.si = 0;
 	multiget(context);
-	context.es = context.data.word(466);
+	context.es = context.ds.word(466);
 	context.si = 3*2;
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.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);
+	context.cx = context.ds.word(77);
 endcredits2:
 	context.push(context.cx);
 	context.push(context.si);
@@ -1895,7 +1895,7 @@ endcredits2:
 	context.ch = 160;
 	context.di = 75;
 	context.bx = 20;
-	context.ds = context.data.word(402);
+	context.ds = context.ds.word(402);
 	context.si = 0;
 	multiput(context);
 	vsync(context);
@@ -1914,7 +1914,7 @@ onelot:
 	context.dx = 161;
 	context.ax = 0;
 	printdirect(context);
-	context._add(context.bx, context.data.word(77));
+	context._add(context.bx, context.ds.word(77));
 	context.cx = context.pop();
 	if (--context.cx) goto onelot;
 	vsync(context);
@@ -1932,7 +1932,7 @@ onelot:
 	if (--context.cx) goto endcredits2;
 	context.cx = context.pop();
 looknext:
-	context.al = context.data.byte(context.si);
+	context.al = context.ds.byte(context.si);
 	context._add(context.si, 1);
 	context._cmp(context.al, ':');
 	if (context.flags.z()) goto gotnext;
@@ -1949,13 +1949,13 @@ gotnext:
 }
 
 static void priest(Context & context) {
-	context._cmp(context.data.word(context.bx+3), 8);
+	context._cmp(context.ds.word(context.bx+3), 8);
 	if (context.flags.z()) goto priestspoken;
-	context.data.byte(234) = 0;
-	context.data.word(21) = 2;
+	context.ds.byte(234) = 0;
+	context.ds.word(21) = 2;
 	checkspeed(context);
 	if (!context.flags.z()) goto priestwait;
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 	context.push(context.es);
 	context.push(context.bx);
 	priesttext(context);
@@ -1968,22 +1968,22 @@ priestspoken:
 }
 
 static void madmanstelly(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.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;
+	context.ds.word(context.bx+3) = context.ax;
 	showgamereel(context);
 	return;
 }
 
 static void madman(Context & context) {
-	context.data.word(21) = 2;
+	context.ds.word(21) = 2;
 	checkspeed(context);
 	if (!context.flags.z()) goto nomadspeed;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 364);
 	if (!context.flags.c()) goto ryansded;
 	context._cmp(context.ax, 10);
@@ -1996,46 +1996,46 @@ static void madman(Context & context) {
 	context.ax = context.pop();
 	context.bx = context.pop();
 	context.es = context.pop();
-	context.data.byte(64) = -1;
-	context.data.byte(69) = 0;
+	context.ds.byte(64) = -1;
+	context.ds.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._add(context.ds.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);
+	context._cmp(context.ds.byte(64), 62);
 	if (context.flags.c()) goto nomadspeak;
-	context._cmp(context.data.byte(64), 68);
+	context._cmp(context.ds.byte(64), 68);
 	if (context.flags.z()) goto killryan;
-	context._cmp(context.data.byte(65), 8);
+	context._cmp(context.ds.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.ds.byte(64) = 70;
+	context.ds.byte(65) = -1;
+	context.ds.byte(53) = 1;
 	context.ax = 67;
 	goto nomadspeak;
 killryan:
 	context.ax = 310;
 nomadspeak:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 nomadspeed:
 	showgamereel(context);
-	context.al = context.data.byte(148);
-	context.data.byte(context.bx+1) = context.al;
+	context.al = context.ds.byte(148);
+	context.ds.byte(context.bx+1) = context.al;
 	madmode(context);
 	return;
 madmanspoken:
-	context._cmp(context.data.byte(391), 1);
+	context._cmp(context.ds.byte(391), 1);
 	if (context.flags.z()) goto alreadywon;
-	context.data.byte(391) = 1;
+	context.ds.byte(391) = 1;
 	context.push(context.es);
 	context.push(context.bx);
 	getridoftemptext(context);
@@ -2044,18 +2044,18 @@ madmanspoken:
 alreadywon:
 	return;
 ryansded:
-	context.data.byte(56) = 2;
+	context.ds.byte(56) = 2;
 	showgamereel(context);
 	return;
 }
 
 static void madmantext(Context & context) {
-	context._cmp(context.data.byte(64), 61);
+	context._cmp(context.ds.byte(64), 61);
 	if (!context.flags.c()) goto nomadtext;
-	context.al = context.data.byte(64);
+	context.al = context.ds.byte(64);
 	context._and(context.al, 3);
 	if (!context.flags.z()) goto nomadtext;
-	context.al = context.data.byte(64);
+	context.al = context.ds.byte(64);
 	context._shr(context.al, 1);
 	context._shr(context.al, 1);
 	context._add(context.al, 47);
@@ -2070,26 +2070,26 @@ nomadtext:
 }
 
 static void madmode(Context & context) {
-	context.data.word(21) = 2;
-	context.data.byte(234) = 0;
-	context._cmp(context.data.byte(64), 63);
+	context.ds.word(21) = 2;
+	context.ds.byte(234) = 0;
+	context._cmp(context.ds.byte(64), 63);
 	if (context.flags.c()) goto iswatchmad;
-	context._cmp(context.data.byte(64), 68);
+	context._cmp(context.ds.byte(64), 68);
 	if (!context.flags.c()) goto iswatchmad;
-	context.data.byte(234) = 2;
+	context.ds.byte(234) = 2;
 iswatchmad:
 	return;
 }
 
 static void priesttext(Context & context) {
-	context._cmp(context.data.word(context.bx+3), 2);
+	context._cmp(context.ds.word(context.bx+3), 2);
 	if (context.flags.c()) goto nopriesttext;
-	context._cmp(context.data.word(context.bx+3), 7);
+	context._cmp(context.ds.word(context.bx+3), 7);
 	if (!context.flags.c()) goto nopriesttext;
-	context.al = context.data.byte(context.bx+3);
+	context.al = context.ds.byte(context.bx+3);
 	context._and(context.al, 1);
 	if (!context.flags.z()) goto nopriesttext;
-	context.al = context.data.byte(context.bx+3);
+	context.al = context.ds.byte(context.bx+3);
 	context._shr(context.al, 1);
 	context._add(context.al, 50);
 	context.bl = 72;
@@ -2102,7 +2102,7 @@ nopriesttext:
 }
 
 static void textforend(Context & context) {
-	context._cmp(context.data.byte(139), 20);
+	context._cmp(context.ds.byte(139), 20);
 	if (!context.flags.z()) goto notendtext1;
 	context.al = 0;
 	context.bl = 34;
@@ -2110,7 +2110,7 @@ static void textforend(Context & context) {
 	context.cx = 60;
 	goto gotendtext;
 notendtext1:
-	context._cmp(context.data.byte(139), 65);
+	context._cmp(context.ds.byte(139), 65);
 	if (!context.flags.z()) goto notendtext2;
 	context.al = 1;
 	context.bl = 34;
@@ -2118,7 +2118,7 @@ notendtext1:
 	context.cx = 60;
 	goto gotendtext;
 notendtext2:
-	context._cmp(context.data.byte(139), 110);
+	context._cmp(context.ds.byte(139), 110);
 	if (!context.flags.z()) goto notendtext3;
 	context.al = 2;
 	context.bl = 34;
@@ -2135,7 +2135,7 @@ gotendtext:
 }
 
 static void textformonk(Context & context) {
-	context._cmp(context.data.byte(139), 1);
+	context._cmp(context.ds.byte(139), 1);
 	if (!context.flags.z()) goto notmonktext1;
 	context.al = 19;
 	context.bl = 68;
@@ -2143,7 +2143,7 @@ static void textformonk(Context & context) {
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext1:
-	context._cmp(context.data.byte(139), 5);
+	context._cmp(context.ds.byte(139), 5);
 	if (!context.flags.z()) goto notmonktext2;
 	context.al = 20;
 	context.bl = 68;
@@ -2151,7 +2151,7 @@ notmonktext1:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext2:
-	context._cmp(context.data.byte(139), 9);
+	context._cmp(context.ds.byte(139), 9);
 	if (!context.flags.z()) goto notmonktext3;
 	context.al = 21;
 	context.bl = 48;
@@ -2159,7 +2159,7 @@ notmonktext2:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext3:
-	context._cmp(context.data.byte(139), 13);
+	context._cmp(context.ds.byte(139), 13);
 	if (!context.flags.z()) goto notmonktext4;
 	context.al = 22;
 	context.bl = 68;
@@ -2167,7 +2167,7 @@ notmonktext3:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext4:
-	context._cmp(context.data.byte(139), 17);
+	context._cmp(context.ds.byte(139), 17);
 	if (!context.flags.z()) goto notmonktext5;
 	context.al = 23;
 	context.bl = 68;
@@ -2175,7 +2175,7 @@ notmonktext4:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext5:
-	context._cmp(context.data.byte(139), 21);
+	context._cmp(context.ds.byte(139), 21);
 	if (!context.flags.z()) goto notmonktext6;
 	context.al = 24;
 	context.bl = 68;
@@ -2183,7 +2183,7 @@ notmonktext5:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext6:
-	context._cmp(context.data.byte(139), 25);
+	context._cmp(context.ds.byte(139), 25);
 	if (!context.flags.z()) goto notmonktext7;
 	context.al = 25;
 	context.bl = 68;
@@ -2191,7 +2191,7 @@ notmonktext6:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext7:
-	context._cmp(context.data.byte(139), 29);
+	context._cmp(context.ds.byte(139), 29);
 	if (!context.flags.z()) goto notmonktext8;
 	context.al = 26;
 	context.bl = 68;
@@ -2199,7 +2199,7 @@ notmonktext7:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext8:
-	context._cmp(context.data.byte(139), 33);
+	context._cmp(context.ds.byte(139), 33);
 	if (!context.flags.z()) goto notmonktext9;
 	context.al = 27;
 	context.bl = 68;
@@ -2207,7 +2207,7 @@ notmonktext8:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext9:
-	context._cmp(context.data.byte(139), 37);
+	context._cmp(context.ds.byte(139), 37);
 	if (!context.flags.z()) goto notmonktext10;
 	context.al = 28;
 	context.bl = 68;
@@ -2215,7 +2215,7 @@ notmonktext9:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext10:
-	context._cmp(context.data.byte(139), 41);
+	context._cmp(context.ds.byte(139), 41);
 	if (!context.flags.z()) goto notmonktext11;
 	context.al = 29;
 	context.bl = 68;
@@ -2223,7 +2223,7 @@ notmonktext10:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext11:
-	context._cmp(context.data.byte(139), 45);
+	context._cmp(context.ds.byte(139), 45);
 	if (!context.flags.z()) goto notmonktext12;
 	context.al = 30;
 	context.bl = 68;
@@ -2231,7 +2231,7 @@ notmonktext11:
 	context.cx = 120;
 	goto gotmonktext;
 notmonktext12:
-	context._cmp(context.data.byte(139), 49);
+	context._cmp(context.ds.byte(139), 49);
 	if (!context.flags.z()) goto notmonktext13;
 	context.al = 31;
 	context.bl = 68;
@@ -2239,7 +2239,7 @@ notmonktext12:
 	context.cx = 220;
 	goto gotmonktext;
 notmonktext13:
-	context._cmp(context.data.byte(139), 53);
+	context._cmp(context.ds.byte(139), 53);
 	if (!context.flags.z()) goto notendtitles;
 	fadescreendowns(context);
 notendtitles:
@@ -2253,11 +2253,11 @@ oktalk:
 }
 
 static void drunk(Context & context) {
-	context._cmp(context.data.byte(42), 0);
+	context._cmp(context.ds.byte(42), 0);
 	if (!context.flags.z()) goto trampgone;
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 127);
-	context.data.byte(context.bx+7) = context.al;
+	context.ds.byte(context.bx+7) = context.al;
 	showgamereel(context);
 	addtopeoplelist(context);
 trampgone:
@@ -2268,7 +2268,7 @@ static void advisor(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto noadvisor;
 	goto noadvisor;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._add(context.ax, 1);
 	context._cmp(context.ax, 123);
 	if (!context.flags.z()) goto notendadvis;
@@ -2285,7 +2285,7 @@ notendadvis:
 	if (context.flags.c()) goto gotadvframe;
 	context.ax = 106;
 gotadvframe:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 noadvisor:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -2295,7 +2295,7 @@ noadvisor:
 static void copper(Context & context) {
 	checkspeed(context);
 	if (!context.flags.z()) goto nocopper;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._add(context.ax, 1);
 	context._cmp(context.ax, 94);
 	if (!context.flags.z()) goto notendcopper;
@@ -2315,7 +2315,7 @@ mightwait:
 	if (context.flags.c()) goto gotcopframe;
 	context._sub(context.ax, 1);
 gotcopframe:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 nocopper:
 	showgamereel(context);
 	addtopeoplelist(context);
@@ -2323,41 +2323,41 @@ nocopper:
 }
 
 static void sparky(Context & context) {
-	context._cmp(context.data.word(16), 0);
+	context._cmp(context.ds.word(16), 0);
 	if (context.flags.z()) goto animsparky;
-	context.data.byte(context.bx+7) = 3;
+	context.ds.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);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx+3) = 27;
 	goto finishsparky;
 notsparky1:
-	context._cmp(context.data.word(context.bx+3), 48);
+	context._cmp(context.ds.word(context.bx+3), 48);
 	if (!context.flags.z()) goto dosparky;
-	context.data.word(context.bx+3) = 27;
+	context.ds.word(context.bx+3) = 27;
 	goto finishsparky;
 dosparky:
-	context._add(context.data.word(context.bx+3), 1);
+	context._add(context.ds.word(context.bx+3), 1);
 finishsparky:
 	showgamereel(context);
 	addtopeoplelist(context);
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._and(context.al, 128);
 	if (context.flags.z()) goto nottalkedsparky;
-	context.data.byte(49) = 1;
+	context.ds.byte(49) = 1;
 nottalkedsparky:
 	return;
 }
 
 static void train(Context & context) {
 	return;
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 21);
 	if (!context.flags.c()) goto notrainyet;
 	context._add(context.ax, 1);
@@ -2366,13 +2366,13 @@ notrainyet:
 	randomnumber(context);
 	context._cmp(context.al, 253);
 	if (context.flags.c()) goto notrainatall;
-	context._cmp(context.data.byte(475), 5);
+	context._cmp(context.ds.byte(475), 5);
 	if (!context.flags.z()) goto notrainatall;
-	context._cmp(context.data.byte(477), 5);
+	context._cmp(context.ds.byte(477), 5);
 	if (!context.flags.z()) goto notrainatall;
 	context.ax = 5;
 gottrainframe:
-	context.data.word(context.bx+3) = context.ax;
+	context.ds.word(context.bx+3) = context.ax;
 	showgamereel(context);
 notrainatall:
 	return;
@@ -2382,45 +2382,45 @@ static 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.cl = context.ds.byte(context.bx+7);
+	context.ax = context.ds.word(context.bx+3);
+	context.bx = context.ds.word(18);
+	context.es = context.ds.word(412);
+	context.ds.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.ds.word(context.bx+2) = context.ax;
+	context.ds.byte(context.bx+4) = context.cl;
 	context.bx = context.pop();
 	context.es = context.pop();
-	context._add(context.data.word(18), 5);
+	context._add(context.ds.word(18), 5);
 	return;
 }
 
 static void showgamereel(Context & context) {
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	context._cmp(context.ax, 512);
 	if (!context.flags.c()) goto noshow;
-	context.data.word(239) = context.ax;
+	context.ds.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;
+	context.ax = context.ds.word(239);
+	context.ds.word(context.bx+3) = context.ax;
 noshow:
 	return;
 }
 
 static void checkspeed(Context & context) {
-	context._cmp(context.data.byte(65), -1);
+	context._cmp(context.ds.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));
+	context._add(context.ds.byte(context.bx+6), 1);
+	context.al = context.ds.byte(context.bx+6);
+	context._cmp(context.al, context.ds.byte(context.bx+5));
 	if (!context.flags.z()) goto notspeed;
 	context.al = 0;
-	context.data.byte(context.bx+6) = context.al;
+	context.ds.byte(context.bx+6) = context.al;
 	context._cmp(context.al, context.al);
 notspeed:
 	return;
@@ -2430,7 +2430,7 @@ forcenext:
 }
 
 static void clearsprites(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768;
 	context.al = 255;
 	context.cx = 32*16;
@@ -2439,21 +2439,21 @@ static void clearsprites(Context & context) {
 }
 
 static void makesprite(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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);
+	context._cmp(context.ds.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;
+	context.ds.word(context.bx) = context.cx;
+	context.ds.word(context.bx+10) = context.si;
+	context.ds.word(context.bx+6) = context.dx;
+	context.ds.word(context.bx+8) = context.di;
+	context.ds.word(context.bx+2) = 0x0ffff;
+	context.ds.byte(context.bx+15) = 0;
+	context.ds.byte(context.bx+18) = 0;
 	return;
 }
 
@@ -2466,30 +2466,30 @@ static void delsprite(Context & context) {
 }
 
 static void spriteupdate(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.al = context.ds.byte(63);
+	context.ds.byte(context.bx+31) = context.al;
+	context.es = context.ds.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.ax = context.ds.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;
+	context.cx = context.ds.word(context.bx+2);
+	context.ds.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);
+	context._cmp(context.ds.byte(186), 1);
 	if (context.flags.z()) goto _tmp18b;
 	context._add(context.bx, 32);
 	if (--context.cx) goto _tmp18;
@@ -2498,23 +2498,23 @@ _tmp18b:
 }
 
 static void printsprites(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.cx = 0;
 priorityloop:
 	context.push(context.cx);
-	context.data.byte(182) = context.cl;
+	context.ds.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.ax = context.ds.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));
+	context.al = context.ds.byte(182);
+	context._cmp(context.al, context.ds.byte(context.bx+23));
 	if (!context.flags.z()) goto skipsprite;
-	context._cmp(context.data.byte(context.bx+31), 1);
+	context._cmp(context.ds.byte(context.bx+31), 1);
 	if (context.flags.z()) goto skipsprite;
 	printasprite(context);
 skipsprite:
@@ -2533,30 +2533,30 @@ static 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.ds = context.ds.word(context.si+6);
+	context.al = context.ds.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._add(context.bx, context.ds.word(119));
+	context.al = context.ds.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._add(context.di, context.ds.word(117));
+	context.al = context.ds.byte(context.si+15);
 	context.ah = 0;
-	context._cmp(context.data.byte(context.si+30), 0);
+	context._cmp(context.ds.byte(context.si+30), 0);
 	if (context.flags.z()) goto steadyframe;
 	context.ah = 8;
 steadyframe:
-	context._cmp(context.data.byte(182), 6);
+	context._cmp(context.ds.byte(182), 6);
 	if (!context.flags.z()) goto notquickp;
 notquickp:
 	showframe(context);
@@ -2591,7 +2591,7 @@ static void checkone(Context & context) {
 	context.cx = 3;
 	context._mul(context.cx);
 	context.si = context.ax;
-	context.ds = context.data.word(412);
+	context.ds = context.ds.word(412);
 	context._add(context.si, 0+(228*13)+32+60+(32*32));
 	context._lodsw();
 	context.cx = context.ax;
@@ -2601,90 +2601,90 @@ static void checkone(Context & context) {
 }
 
 static void findsource(Context & context) {
-	context.ax = context.data.word(160);
+	context.ax = context.ds.word(160);
 	context._cmp(context.ax, 160);
 	if (!context.flags.c()) goto over1000;
-	context.ds = context.data.word(430);
-	context.data.word(244) = 0;
+	context.ds = context.ds.word(430);
+	context.ds.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;
+	context.ds = context.ds.word(432);
+	context.ds.word(244) = 160;
 	return;
 over1001:
-	context.ds = context.data.word(434);
-	context.data.word(244) = 320;
+	context.ds = context.ds.word(434);
+	context.ds.word(244) = 320;
 	return;
 }
 
 static void initman(Context & context) {
-	context.al = context.data.byte(151);
-	context.ah = context.data.byte(152);
+	context.al = context.ds.byte(151);
+	context.ah = context.ds.byte(152);
 	context.si = context.ax;
 	context.cx = 49464;
-	context.dx = context.data.word(414);
+	context.dx = context.ds.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;
+	context.ds.byte(context.bx+23) = 4;
+	context.ds.byte(context.bx+22) = 0;
+	context.ds.byte(context.bx+29) = 0;
 	return;
 }
 
 static void mainman(Context & context) {
-	context._cmp(context.data.byte(187), 1);
+	context._cmp(context.ds.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;
+	context.ds.byte(187) = 0;
+	context.al = context.ds.byte(151);
+	context.ah = context.ds.byte(152);
+	context.ds.word(context.bx+10) = context.ax;
+	context.ds.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);
+	context._sub(context.ds.byte(context.bx+22), 1);
+	context._cmp(context.ds.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));
+	context.ds.byte(context.bx+22) = 0;
+	context.al = context.ds.byte(135);
+	context._cmp(context.al, context.ds.byte(133));
 	if (context.flags.z()) goto facingok;
 	aboutturn(context);
 	goto notwalk;
 facingok:
-	context._cmp(context.data.byte(136), 0);
+	context._cmp(context.ds.byte(136), 0);
 	if (context.flags.z()) goto alreadyturned;
-	context._cmp(context.data.byte(492), 254);
+	context._cmp(context.ds.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));
+	context.ds.byte(473) = 1;
+	context.al = context.ds.byte(133);
+	context._cmp(context.al, context.ds.byte(134));
 	if (!context.flags.z()) goto alreadyturned;
 	checkforexit(context);
 alreadyturned:
-	context.data.byte(136) = 0;
-	context._cmp(context.data.byte(492), 254);
+	context.ds.byte(136) = 0;
+	context._cmp(context.ds.byte(492), 254);
 	if (!context.flags.z()) goto walkman;
-	context.data.byte(context.bx+29) = 0;
+	context.ds.byte(context.bx+29) = 0;
 	goto notwalk;
 walkman:
-	context.al = context.data.byte(context.bx+29);
+	context.al = context.ds.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;
+	context.ds.byte(context.bx+29) = context.al;
 	walking(context);
-	context._cmp(context.data.byte(492), 254);
+	context._cmp(context.ds.byte(492), 254);
 	if (context.flags.z()) goto afterwalk;
-	context.al = context.data.byte(133);
+	context.al = context.ds.byte(133);
 	context._and(context.al, 1);
 	if (context.flags.z()) goto isdouble;
-	context.al = context.data.byte(context.bx+29);
+	context.al = context.ds.byte(context.bx+29);
 	context._cmp(context.al, 2);
 	if (context.flags.z()) goto afterwalk;
 	context._cmp(context.al, 7);
@@ -2692,37 +2692,37 @@ notanimend1:
 isdouble:
 	walking(context);
 afterwalk:
-	context._cmp(context.data.byte(492), 254);
+	context._cmp(context.ds.byte(492), 254);
 	if (!context.flags.z()) goto notwalk;
-	context.al = context.data.byte(135);
-	context._cmp(context.al, context.data.byte(133));
+	context.al = context.ds.byte(135);
+	context._cmp(context.al, context.ds.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));
+	context.ds.byte(473) = 1;
+	context.al = context.ds.byte(133);
+	context._cmp(context.al, context.ds.byte(134));
 	if (!context.flags.z()) goto notwalk;
 	checkforexit(context);
 notwalk:
-	context.al = context.data.byte(133);
+	context.al = context.ds.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;
+	context.al = context.ds.byte(context.di);
+	context._add(context.al, context.ds.byte(context.bx+29));
+	context.ds.byte(context.bx+15) = context.al;
+	context.ax = context.ds.word(context.bx+10);
+	context.ds.byte(151) = context.al;
+	context.ds.byte(152) = context.ah;
 	return;
 }
 
 static void aboutturn(Context & context) {
-	context._cmp(context.data.byte(136), 1);
+	context._cmp(context.ds.byte(136), 1);
 	if (context.flags.z()) goto incdir;
-	context._cmp(context.data.byte(136), -1);
+	context._cmp(context.ds.byte(136), -1);
 	if (context.flags.z()) goto decdir;
-	context.al = context.data.byte(133);
-	context._sub(context.al, context.data.byte(135));
+	context.al = context.ds.byte(133);
+	context._sub(context.al, context.ds.byte(135));
 	if (!context.flags.c()) goto higher;
 	context._neg(context.al);
 	context._cmp(context.al, 4);
@@ -2733,37 +2733,37 @@ higher:
 	if (!context.flags.c()) goto incdir;
 	goto decdir;
 incdir:
-	context.data.byte(136) = 1;
-	context.al = context.data.byte(133);
+	context.ds.byte(136) = 1;
+	context.al = context.ds.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;
+	context.ds.byte(133) = context.al;
+	context.ds.byte(context.bx+29) = 0;
 	return;
 decdir:
-	context.data.byte(136) = -1;
-	context.al = context.data.byte(133);
+	context.ds.byte(136) = -1;
+	context.al = context.ds.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;
+	context.ds.byte(133) = context.al;
+	context.ds.byte(context.bx+29) = 0;
 	return;
 }
 
 static void walking(Context & context) {
-	context._cmp(context.data.byte(493), 0);
+	context._cmp(context.ds.byte(493), 0);
 	if (context.flags.z()) goto normalwalk;
-	context.al = context.data.byte(492);
+	context.al = context.ds.byte(492);
 	context._sub(context.al, 1);
-	context.data.byte(492) = context.al;
+	context.ds.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.al = context.ds.byte(492);
 	context._add(context.al, 1);
-	context.data.byte(492) = context.al;
-	context._cmp(context.al, context.data.byte(494));
+	context.ds.byte(492) = context.al;
+	context._cmp(context.al, context.ds.byte(494));
 	if (!context.flags.c()) goto endofline;
 continuewalk:
 	context.ah = 0;
@@ -2774,20 +2774,20 @@ continuewalk:
 	context.es = context.dx;
 	context.bx = 8344;
 	context._add(context.bx, context.ax);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.word(context.bx);
 	context.bx = context.pop();
 	context.es = context.pop();
 stillline:
-	context.data.word(context.bx+10) = context.ax;
+	context.ds.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));
+	context.ds.byte(492) = 254;
+	context.al = context.ds.byte(478);
+	context.ds.byte(475) = context.al;
+	context._cmp(context.al, context.ds.byte(477));
 	if (context.flags.z()) goto finishedwalk;
-	context.al = context.data.byte(477);
-	context.data.byte(478) = context.al;
+	context.al = context.ds.byte(477);
+	context.ds.byte(478) = context.al;
 	context.push(context.es);
 	context.push(context.bx);
 	autosetwalk(context);
@@ -2803,42 +2803,42 @@ static void facerightway(Context & context) {
 	context.push(context.es);
 	context.push(context.bx);
 	getroomspaths(context);
-	context.al = context.data.byte(475);
+	context.al = context.ds.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.al = context.ds.byte(context.bx+7);
+	context.ds.byte(135) = context.al;
+	context.ds.byte(134) = context.al;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
 }
 
 static void checkforexit(Context & context) {
-	context.cl = context.data.byte(151);
+	context.cl = context.ds.byte(151);
 	context._add(context.cl, 12);
-	context.ch = context.data.byte(152);
+	context.ch = context.ds.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.ds.byte(153) = context.cl;
+	context.ds.byte(154) = context.ch;
+	context.ds.byte(155) = context.dl;
+	context.ds.byte(156) = context.dh;
+	context.al = context.ds.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;
+	context.al = context.ds.byte(154);
+	context.ds.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);
+	context._cmp(context.ds.byte(184), 2);
 	if (!context.flags.z()) goto notlouis;
 	context.bl = 0;
 	context.push(context.bx);
@@ -2873,17 +2873,17 @@ notravmessage:
 	context.bl = 68;
 	context.bh = 64;
 	setuptimeduse(context);
-	context.al = context.data.byte(133);
+	context.al = context.ds.byte(133);
 	context._add(context.al, 4);
 	context._and(context.al, 7);
-	context.data.byte(135) = context.al;
+	context.ds.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;
+	context.ds.byte(60) = 1;
 	return;
 notleave:
 	context._test(context.al, 4);
@@ -2912,12 +2912,12 @@ notanup:
 static 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._add(context.ds.byte(149), 10);
+	context.al = context.ds.byte(154);
 	context.cl = 16;
 	context._mul(context.cl);
-	context.data.byte(context.bx+11) = context.al;
-	context.data.byte(186) = 1;
+	context.ds.byte(context.bx+11) = context.al;
+	context.ds.byte(186) = 1;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
@@ -2926,12 +2926,12 @@ static void adjustdown(Context & context) {
 static 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._sub(context.ds.byte(149), 10);
+	context.al = context.ds.byte(154);
 	context.cl = 16;
 	context._mul(context.cl);
-	context.data.byte(context.bx+11) = context.al;
-	context.data.byte(186) = 1;
+	context.ds.byte(context.bx+11) = context.al;
+	context.ds.byte(186) = 1;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
@@ -2940,13 +2940,13 @@ static void adjustup(Context & context) {
 static 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.ds.byte(153) = 0;
+	context._sub(context.ds.byte(148), 11);
+	context.al = context.ds.byte(154);
 	context.cl = 16;
 	context._mul(context.cl);
-	context.data.byte(context.bx+10) = context.al;
-	context.data.byte(186) = 1;
+	context.ds.byte(context.bx+10) = context.al;
+	context.ds.byte(186) = 1;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
@@ -2955,24 +2955,24 @@ static void adjustleft(Context & context) {
 static 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._add(context.ds.byte(148), 11);
+	context.al = context.ds.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.ds.byte(context.bx+10) = context.al;
+	context.ds.byte(186) = 1;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
 }
 
 static void reminders(Context & context) {
-	context._cmp(context.data.byte(184), 24);
+	context._cmp(context.ds.byte(184), 24);
 	if (!context.flags.z()) goto notinedenslift;
-	context._cmp(context.data.byte(148), 44);
+	context._cmp(context.ds.byte(148), 44);
 	if (!context.flags.z()) goto notinedenslift;
-	context._cmp(context.data.byte(2), 0);
+	context._cmp(context.ds.byte(2), 0);
 	if (!context.flags.z()) goto notfirst;
 	context.al = 'D';
 	context.ah = 'K';
@@ -2987,7 +2987,7 @@ static void reminders(Context & context) {
 	findexobject(context);
 	context._cmp(context.al, 114);
 	if (context.flags.z()) goto forgotone;
-	context.ax = context.data.word(context.bx+2);
+	context.ax = context.ds.word(context.bx+2);
 	context._cmp(context.al, 4);
 	if (!context.flags.z()) goto forgotone;
 	context._cmp(context.ah, 255);
@@ -3000,7 +3000,7 @@ static void reminders(Context & context) {
 	compare(context);
 	if (!context.flags.z()) goto forgotone;
 havegotcard:
-	context._add(context.data.byte(2), 1);
+	context._add(context.ds.byte(2), 1);
 notfirst:
 	return;
 forgotone:
@@ -3016,23 +3016,23 @@ notinedenslift:
 }
 
 static void initrain(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.al = context.ds.byte(context.bx);
 	context._cmp(context.al, 255);
 	if (context.flags.z()) goto finishinitrain;
-	context._cmp(context.al, context.data.byte(184));
+	context._cmp(context.al, context.ds.byte(184));
 	if (!context.flags.z()) goto checkrain;
-	context.al = context.data.byte(context.bx+1);
-	context._cmp(context.al, context.data.byte(148));
+	context.al = context.ds.byte(context.bx+1);
+	context._cmp(context.al, context.ds.byte(148));
 	if (!context.flags.z()) goto checkrain;
-	context.al = context.data.byte(context.bx+2);
-	context._cmp(context.al, context.data.byte(149));
+	context.al = context.ds.byte(context.bx+2);
+	context._cmp(context.al, context.ds.byte(149));
 	if (!context.flags.z()) goto checkrain;
-	context.al = context.data.byte(context.bx+3);
-	context.data.byte(132) = context.al;
+	context.al = context.ds.byte(context.bx+3);
+	context.ds.byte(132) = context.al;
 	goto dorain;
 checkrain:
 	context._add(context.bx, 4);
@@ -3043,26 +3043,26 @@ initraintop:
 	randomnumber(context);
 	context._and(context.al, 31);
 	context._add(context.al, 3);
-	context._cmp(context.al, context.data.byte(132));
+	context._cmp(context.al, context.ds.byte(132));
 	if (!context.flags.c()) goto initraintop;
 	context._add(context.cl, context.al);
-	context._cmp(context.cl, context.data.byte(128));
+	context._cmp(context.cl, context.ds.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.cl = context.ds.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));
+	context._cmp(context.al, context.ds.byte(132));
 	if (!context.flags.c()) goto initrainside2;
 	context._add(context.ch, context.al);
-	context._cmp(context.ch, context.data.byte(129));
+	context._cmp(context.ch, context.ds.byte(129));
 	if (!context.flags.c()) goto finishinitrain;
 	context.push(context.cx);
 	splitintolines(context);
@@ -3083,11 +3083,11 @@ lookforlinestart:
 	context._add(context.ch, 1);
 	context._cmp(context.cl, 0);
 	if (context.flags.z()) goto endofthisline;
-	context._cmp(context.ch, context.data.byte(129));
+	context._cmp(context.ch, context.ds.byte(129));
 	if (!context.flags.c()) goto endofthisline;
 	goto lookforlinestart;
 foundlinestart:
-	context.data.word(context.di) = context.cx;
+	context.ds.word(context.di) = context.cx;
 	context.bh = 1;
 lookforlineend:
 	getblockofpixel(context);
@@ -3097,26 +3097,26 @@ lookforlineend:
 	context._add(context.ch, 1);
 	context._cmp(context.cl, 0);
 	if (context.flags.z()) goto foundlineend;
-	context._cmp(context.ch, context.data.byte(129));
+	context._cmp(context.ch, context.ds.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;
+	context.ds.byte(context.di+2) = context.bh;
 	randomnumber(context);
-	context.data.byte(context.di+3) = context.al;
+	context.ds.byte(context.di+3) = context.al;
 	randomnumber(context);
-	context.data.byte(context.di+4) = context.al;
+	context.ds.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.ds.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));
+	context._cmp(context.ch, context.ds.byte(129));
 	if (!context.flags.c()) goto endofthisline;
 	goto lookforlinestart;
 endofthisline:
@@ -3127,9 +3127,9 @@ static void getblockofpixel(Context & context) {
 	context.push(context.cx);
 	context.push(context.es);
 	context.push(context.di);
-	context.ax = context.data.word(125);
+	context.ax = context.ds.word(125);
 	context._add(context.cl, context.al);
-	context.ax = context.data.word(127);
+	context.ax = context.ds.word(127);
 	context._add(context.ch, context.al);
 	checkone(context);
 	context._and(context.cl, 1);
@@ -3147,43 +3147,43 @@ failrain:
 }
 
 static void showrain(Context & context) {
-	context.ds = context.data.word(414);
+	context.ds = context.ds.word(414);
 	context.si = 6*58;
-	context.ax = context.data.word(context.si+2);
+	context.ax = context.ds.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);
+	context.es = context.ds.word(412);
+	context._cmp(context.ds.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);
+	context.es = context.ds.word(412);
+	context._cmp(context.ds.byte(context.bx), 255);
 	if (context.flags.z()) goto finishrain;
-	context.al = context.data.byte(context.bx+1);
+	context.al = context.ds.byte(context.bx+1);
 	context.ah = 0;
-	context._add(context.ax, context.data.word(119));
-	context._add(context.ax, context.data.word(127));
+	context._add(context.ax, context.ds.word(119));
+	context._add(context.ax, context.ds.word(127));
 	context.cx = 320;
 	context._mul(context.cx);
-	context.cl = context.data.byte(context.bx);
+	context.cl = context.ds.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._add(context.ax, context.ds.word(117));
+	context._add(context.ax, context.ds.word(125));
 	context.di = context.ax;
-	context.cl = context.data.byte(context.bx+2);
+	context.cl = context.ds.byte(context.bx+2);
 	context.ch = 0;
-	context.ax = context.data.word(context.bx+3);
-	context.dl = context.data.byte(context.bx+5);
+	context.ax = context.ds.word(context.bx+3);
+	context.dl = context.ds.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.ds.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.es = context.ds.word(400);
 	context.ah = 0;
 	context.dx = 320-2;
 rainloop:
@@ -3201,20 +3201,20 @@ noplot:
 	context.si = context.pop();
 	goto morerain;
 finishrain:
-	context._cmp(context.data.word(521), 0);
+	context._cmp(context.ds.word(521), 0);
 	if (!context.flags.z()) goto nothunder;
-	context._cmp(context.data.byte(184), 2);
+	context._cmp(context.ds.byte(184), 2);
 	if (!context.flags.z()) goto notlouisthund;
-	context._cmp(context.data.byte(45), 1);
+	context._cmp(context.ds.byte(45), 1);
 	if (!context.flags.z()) goto nothunder;
 notlouisthund:
-	context._cmp(context.data.byte(184), 55);
+	context._cmp(context.ds.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);
+	context._cmp(context.ds.byte(507), 6);
 	if (context.flags.z()) goto isthunder1;
 	context.al = 4;
 isthunder1:
@@ -3224,18 +3224,18 @@ nothunder:
 }
 
 static 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.ds = context.ds.word(428);
+	context.di = context.ds.word(context.bx+20);
+	context.al = context.ds.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;
+	context.ds.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.al = context.ds.byte(context.di+7);
+	context.ds.byte(context.bx+18) = context.al;
+	context.al = context.ds.byte(context.di+8);
 	context._cmp(context.al, 6);
 	if (!context.flags.z()) goto notwidedoor;
 	widedoor(context);
@@ -3272,14 +3272,14 @@ finishback:
 }
 
 static void liftsprite(Context & context) {
-	context.al = context.data.byte(35);
+	context.al = context.ds.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.al = context.ds.byte(context.bx+19);
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto finishclose;
 	context._sub(context.al, 1);
@@ -3291,10 +3291,10 @@ static void liftsprite(Context & context) {
 	context.ax = context.pop();
 	goto pokelift;
 finishclose:
-	context.data.byte(35) = 0;
+	context.ds.byte(35) = 0;
 	return;
 openlift:
-	context.al = context.data.byte(context.bx+19);
+	context.al = context.ds.byte(context.bx+19);
 	context._cmp(context.al, 12);
 	if (context.flags.z()) goto endoflist;
 	context._add(context.al, 1);
@@ -3305,56 +3305,56 @@ openlift:
 	liftnoise(context);
 	context.ax = context.pop();
 pokelift:
-	context.data.byte(context.bx+19) = context.al;
+	context.ds.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.al = context.ds.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.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
 	return;
 endoflist:
-	context.data.byte(35) = 1;
+	context.ds.byte(35) = 1;
 	return;
 liftopen:
-	context.al = context.data.byte(36);
+	context.al = context.ds.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);
+	context._cmp(context.ds.byte(40), 0);
 	if (context.flags.z()) goto nocountclose;
-	context._sub(context.data.byte(40), 1);
-	context._cmp(context.data.byte(40), 0);
+	context._sub(context.ds.byte(40), 1);
+	context._cmp(context.ds.byte(40), 0);
 	if (!context.flags.z()) goto nocountclose;
-	context.data.byte(35) = 2;
+	context.ds.byte(35) = 2;
 nocountclose:
 	context.al = 12;
 	goto pokelift;
 liftclosed:
-	context.al = context.data.byte(36);
+	context.al = context.ds.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);
+	context._cmp(context.ds.byte(39), 0);
 	if (context.flags.z()) goto nocountopen;
-	context._sub(context.data.byte(39), 1);
-	context._cmp(context.data.byte(39), 0);
+	context._sub(context.ds.byte(39), 1);
+	context._cmp(context.ds.byte(39), 0);
 	if (!context.flags.z()) goto nocountopen;
-	context.data.byte(35) = 3;
+	context.ds.byte(35) = 3;
 nocountopen:
 	context.al = 0;
 	goto pokelift;
 }
 
 static void liftnoise(Context & context) {
-	context._cmp(context.data.byte(184), 5);
+	context._cmp(context.ds.byte(184), 5);
 	if (context.flags.z()) goto hissnoise;
-	context._cmp(context.data.byte(184), 21);
+	context._cmp(context.ds.byte(184), 21);
 	if (context.flags.z()) goto hissnoise;
 	playchannel1(context);
 	return;
@@ -3370,84 +3370,84 @@ static void random(Context & context) {
 	context._and(context.ax, 7);
 	context._add(context.di, 18);
 	context._add(context.di, context.ax);
-	context.al = context.data.byte(context.di);
+	context.al = context.ds.byte(context.di);
 	context.di = context.pop();
-	context.data.byte(context.bx+15) = context.al;
+	context.ds.byte(context.bx+15) = context.al;
 	return;
 }
 
 static 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;
+	context.al = context.ds.byte(context.di+18);
+	context.ds.byte(context.di+17) = context.al;
+	context.ds.byte(context.bx+15) = context.al;
 	return;
 }
 
 static void constant(Context & context) {
-	context._add(context.data.byte(context.bx+19), 1);
-	context.cl = context.data.byte(context.bx+19);
+	context._add(context.ds.byte(context.bx+19), 1);
+	context.cl = context.ds.byte(context.bx+19);
 	context.ch = 0;
 	context._add(context.di, context.cx);
-	context._cmp(context.data.byte(context.di+18), 255);
+	context._cmp(context.ds.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;
+	context.ds.byte(context.bx+19) = context.cl;
 gotconst:
-	context.al = context.data.byte(context.di+18);
+	context.al = context.ds.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;
+	context.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
 	return;
 }
 
 static void doorway(Context & context) {
-	context.data.byte(193) = -24;
-	context.data.byte(194) = 10;
-	context.data.byte(195) = -30;
-	context.data.byte(196) = 10;
+	context.ds.byte(193) = -24;
+	context.ds.byte(194) = 10;
+	context.ds.byte(195) = -30;
+	context.ds.byte(196) = 10;
 	dodoor(context);
 	return;
 }
 
 static void widedoor(Context & context) {
-	context.data.byte(193) = -24;
-	context.data.byte(194) = 24;
-	context.data.byte(195) = -30;
-	context.data.byte(196) = 24;
+	context.ds.byte(193) = -24;
+	context.ds.byte(194) = 24;
+	context.ds.byte(195) = -30;
+	context.ds.byte(196) = 24;
 	dodoor(context);
 	return;
 }
 
 static 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.al = context.ds.byte(151);
+	context.ah = context.ds.byte(152);
+	context.cl = context.ds.byte(context.bx+10);
+	context.ch = context.ds.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));
+	context._cmp(context.al, context.ds.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));
+	context._cmp(context.al, context.ds.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));
+	context._cmp(context.ah, context.ds.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));
+	context._cmp(context.ah, context.ds.byte(196));
 	if (!context.flags.c()) goto shutdoor;
 opendoor:
-	context.cl = context.data.byte(context.bx+19);
-	context._cmp(context.data.byte(61), 1);
+	context.cl = context.ds.byte(context.bx+19);
+	context._cmp(context.ds.byte(61), 1);
 	if (!context.flags.z()) goto notthrough;
 	context._cmp(context.cl, 0);
 	if (!context.flags.z()) goto notthrough;
@@ -3457,7 +3457,7 @@ notthrough:
 	context._cmp(context.cl, 1);
 	if (!context.flags.z()) goto notdoorsound2;
 	context.al = 0;
-	context._cmp(context.data.byte(184), 5);
+	context._cmp(context.ds.byte(184), 5);
 	if (!context.flags.z()) goto nothoteldoor2;
 	context.al = 13;
 nothoteldoor2:
@@ -3466,25 +3466,25 @@ notdoorsound2:
 	context.ch = 0;
 	context.push(context.di);
 	context._add(context.di, context.cx);
-	context.al = context.data.byte(context.di+18);
+	context.al = context.ds.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.ds.byte(context.bx+19) = context.cl;
+	context.al = context.ds.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;
+	context.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
+	context.ds.byte(61) = 1;
 	return;
 shutdoor:
-	context.cl = context.data.byte(context.bx+19);
+	context.cl = context.ds.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);
+	context._cmp(context.ds.byte(184), 5);
 	if (!context.flags.z()) goto nothoteldoor1;
 	context.al = 13;
 nothoteldoor1:
@@ -3493,27 +3493,27 @@ 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;
+	context.ds.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.al = context.ds.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.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
 	context._cmp(context.cl, 5);
 	if (!context.flags.z()) goto notnearly;
-	context.data.byte(61) = 0;
+	context.ds.byte(61) = 0;
 notnearly:
 	return;
 }
 
 static 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.al = context.ds.byte(151);
+	context.ah = context.ds.byte(152);
+	context.cl = context.ds.byte(context.bx+10);
+	context.ch = context.ds.byte(context.bx+11);
 	context._cmp(context.al, context.cl);
 	if (!context.flags.c()) goto rtofdoor2;
 	context._sub(context.al, context.cl);
@@ -3536,12 +3536,12 @@ botofdoor2:
 	context._cmp(context.ah, 12);
 	if (!context.flags.c()) goto shutdoor2;
 opendoor2:
-	context._cmp(context.data.byte(61), 1);
+	context._cmp(context.ds.byte(61), 1);
 	if (context.flags.z()) goto mustbeopen;
-	context._cmp(context.data.byte(37), 1);
+	context._cmp(context.ds.byte(37), 1);
 	if (context.flags.z()) goto shutdoor;
 mustbeopen:
-	context.cl = context.data.byte(context.bx+19);
+	context.cl = context.ds.byte(context.bx+19);
 	context._cmp(context.cl, 1);
 	if (!context.flags.z()) goto notdoorsound4;
 	context.al = 0;
@@ -3549,15 +3549,15 @@ mustbeopen:
 notdoorsound4:
 	context._cmp(context.cl, 6);
 	if (!context.flags.z()) goto noturnonyet;
-	context.al = context.data.byte(38);
+	context.al = context.ds.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);
+	context.cl = context.ds.byte(context.bx+19);
+	context._cmp(context.ds.byte(61), 1);
 	if (!context.flags.z()) goto notthrough2;
 	context._cmp(context.cl, 0);
 	if (!context.flags.z()) goto notthrough2;
@@ -3567,24 +3567,24 @@ notthrough2:
 	context.ch = 0;
 	context.push(context.di);
 	context._add(context.di, context.cx);
-	context.al = context.data.byte(context.di+18);
+	context.al = context.ds.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.ds.byte(context.bx+19) = context.cl;
+	context.al = context.ds.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.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
 	context._cmp(context.cl, 5);
 	if (!context.flags.z()) goto justshutting;
-	context.data.byte(61) = 1;
+	context.ds.byte(61) = 1;
 justshutting:
 	return;
 shutdoor2:
-	context.cl = context.data.byte(context.bx+19);
+	context.cl = context.ds.byte(context.bx+19);
 	context._cmp(context.cl, 5);
 	if (!context.flags.z()) goto notdoorsound3;
 	context.al = 1;
@@ -3593,34 +3593,34 @@ 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;
+	context.ds.byte(context.bx+19) = context.cl;
 atlast4:
 	context.ch = 0;
-	context.data.byte(61) = 0;
+	context.ds.byte(61) = 0;
 	context.push(context.di);
 	context._add(context.di, context.cx);
-	context.al = context.data.byte(context.di+18);
+	context.al = context.ds.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.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
 	context._cmp(context.cl, 0);
 	if (!context.flags.z()) goto notlocky;
-	context.al = context.data.byte(38);
+	context.al = context.ds.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;
+	context.ds.byte(37) = 1;
 notlocky:
 	return;
 /*continuing to unbounded code: shutdoor from dodoor:60-87*/
 shutdoor:
-	context.cl = context.data.byte(context.bx+19);
+	context.cl = context.ds.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);
+	context._cmp(context.ds.byte(184), 5);
 	if (!context.flags.z()) goto nothoteldoor1;
 	context.al = 13;
 nothoteldoor1:
@@ -3629,47 +3629,47 @@ 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;
+	context.ds.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.al = context.ds.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.ds.byte(context.bx+15) = context.al;
+	context.ds.byte(context.di+17) = context.al;
 	context._cmp(context.cl, 5);
 	if (!context.flags.z()) goto notnearly;
-	context.data.byte(61) = 0;
+	context.ds.byte(61) = 0;
 notnearly:
 	return;
 	return;
 }
 
 static void updatepeople(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.ds.word(18) = context.di;
 	context.cx = 12*5;
 	context.al = 255;
 	while(--context.cx) 	context._stosb();
-	context._add(context.data.word(138), 1);
+	context._add(context.ds.word(138), 1);
 	context.es = context.cs;
 	context.bx = 537;
 	context.di = 1003;
 updateloop:
-	context.al = context.data.byte(context.bx);
+	context.al = context.ds.byte(context.bx);
 	context._cmp(context.al, 255);
 	if (context.flags.z()) goto endupdate;
-	context._cmp(context.al, context.data.byte(184));
+	context._cmp(context.al, context.ds.byte(184));
 	if (!context.flags.z()) goto notinthisroom;
-	context.cx = context.data.word(context.bx+1);
-	context._cmp(context.cl, context.data.byte(148));
+	context.cx = context.ds.word(context.bx+1);
+	context._cmp(context.cl, context.ds.byte(148));
 	if (!context.flags.z()) goto notinthisroom;
-	context._cmp(context.ch, context.data.byte(149));
+	context._cmp(context.ch, context.ds.byte(149));
 	if (!context.flags.z()) goto notinthisroom;
 	context.push(context.di);
-	context.ax = context.data.word(context.di);
+	context.ax = context.ds.word(context.di);
 	__dispatch_call(context, context.ax);
 	context.di = context.pop();
 notinthisroom:
@@ -3682,12 +3682,12 @@ endupdate:
 
 static void getreelframeax(Context & context) {
 	context.push(context.ds);
-	context.data.word(160) = context.ax;
+	context.ds.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.ax = context.ds.word(160);
+	context._sub(context.ax, context.ds.word(244));
 	context._add(context.ax, context.ax);
 	context.cx = context.ax;
 	context._add(context.ax, context.ax);
@@ -3710,13 +3710,13 @@ static void plotreel(Context & context) {
 retryreel:
 	context.push(context.es);
 	context.push(context.si);
-	context.ax = context.data.word(context.si+2);
+	context.ax = context.ds.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._add(context.ds.word(239), 1);
 	context.si = context.pop();
 	context.es = context.pop();
 	context._add(context.si, 40);
@@ -3727,7 +3727,7 @@ plotloop:
 	context.push(context.cx);
 	context.push(context.es);
 	context.push(context.si);
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.word(context.si);
 	context._cmp(context.ax, 0x0ffff);
 	if (context.flags.z()) goto notplot;
 	showreelframe(context);
@@ -3744,22 +3744,22 @@ notplot:
 }
 
 static void soundonreels(Context & context) {
-	context.bl = context.data.byte(184);
+	context.bl = context.ds.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);
+	context.si = context.ds.word(context.bx);
 reelsoundloop:
-	context.al = context.data.byte(context.si);
+	context.al = context.ds.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));
+	context.ax = context.ds.word(context.si+1);
+	context._cmp(context.ax, context.ds.word(239));
 	if (!context.flags.z()) goto skipreelsound;
-	context._cmp(context.ax, context.data.word(351));
+	context._cmp(context.ax, context.ds.word(351));
 	if (context.flags.z()) goto skipreelsound;
-	context.data.word(351) = context.ax;
-	context.al = context.data.byte(context.si);
+	context.ds.word(351) = context.ax;
+	context.al = context.ds.byte(context.si);
 	context._cmp(context.al, 64);
 	if (context.flags.c()) { playchannel1(context); return; };
 	context._cmp(context.al, 128);
@@ -3775,26 +3775,26 @@ skipreelsound:
 	context._add(context.si, 3);
 	goto reelsoundloop;
 endreelsound:
-	context.ax = context.data.word(351);
-	context._cmp(context.ax, context.data.word(239));
+	context.ax = context.ds.word(351);
+	context._cmp(context.ax, context.ds.word(239));
 	if (context.flags.z()) goto nochange2;
-	context.data.word(351) = -1;
+	context.ds.word(351) = -1;
 nochange2:
 	return;
 }
 
 static void reconstruct(Context & context) {
-	context._cmp(context.data.byte(130), 0);
+	context._cmp(context.ds.byte(130), 0);
 	if (context.flags.z()) goto noneedtorecon;
-	context.data.byte(62) = 1;
+	context.ds.byte(62) = 1;
 	drawfloor(context);
 	spriteupdate(context);
 	printsprites(context);
-	context._cmp(context.data.byte(184), 20);
+	context._cmp(context.ds.byte(184), 20);
 	if (!context.flags.z()) goto notfudge;
 	undertextline(context);
 notfudge:
-	context.data.byte(130) = 0;
+	context.ds.byte(130) = 0;
 noneedtorecon:
 	return;
 }
@@ -3805,28 +3805,28 @@ static void dealwithspecial(Context & context) {
 	if (!context.flags.z()) goto notplset;
 	context.al = context.ah;
 	placesetobject(context);
-	context.data.byte(130) = 1;
+	context.ds.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;
+	context.ds.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;
+	context.ds.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;
+	context.ds.byte(130) = 1;
 	return;
 notremfree:
 	context._cmp(context.al, 4);
@@ -3836,14 +3836,14 @@ notremfree:
 notryanoff:
 	context._cmp(context.al, 5);
 	if (!context.flags.z()) goto notryanon;
-	context.data.byte(135) = context.ah;
-	context.data.byte(133) = context.ah;
+	context.ds.byte(135) = context.ah;
+	context.ds.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;
+	context.ds.byte(188) = context.ah;
 	return;
 notchangeloc:
 	movemap(context);
@@ -3853,87 +3853,87 @@ notchangeloc:
 static 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;
+	context._sub(context.ds.byte(149), 20);
+	context.ds.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;
+	context._sub(context.ds.byte(149), 10);
+	context.ds.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;
+	context._add(context.ds.byte(149), 10);
+	context.ds.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;
+	context._add(context.ds.byte(148), 11);
+	context.ds.byte(186) = 1;
 	return;
 notmaprightspec:
-	context._sub(context.data.byte(148), 11);
-	context.data.byte(186) = 1;
+	context._sub(context.ds.byte(148), 11);
+	context.ds.byte(186) = 1;
 	return;
 }
 
 static void getreelstart(Context & context) {
-	context.ax = context.data.word(239);
+	context.ax = context.ds.word(239);
 	context.cx = 40;
 	context._mul(context.cx);
-	context.es = context.data.word(450);
+	context.es = context.ds.word(450);
 	context.si = context.ax;
 	context._add(context.si, 0+(36*144));
 	return;
 }
 
 static void showreelframe(Context & context) {
-	context.al = context.data.byte(context.si+2);
+	context.al = context.ds.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._add(context.di, context.ds.word(117));
+	context.al = context.ds.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;
+	context._add(context.bx, context.ds.word(119));
+	context.ax = context.ds.word(context.si);
+	context.ds.word(160) = context.ax;
 	findsource(context);
-	context.ax = context.data.word(160);
-	context._sub(context.ax, context.data.word(244));
+	context.ax = context.ds.word(160);
+	context._sub(context.ax, context.ds.word(244));
 	context.ah = 8;
 	showframe(context);
 	return;
 }
 
 static void deleverything(Context & context) {
-	context.al = context.data.byte(129);
+	context.al = context.ds.byte(129);
 	context.ah = 0;
-	context._add(context.ax, context.data.word(123));
+	context._add(context.ax, context.ds.word(123));
 	context._cmp(context.ax, 182);
 	if (!context.flags.c()) goto bigroom;
 	maptopanel(context);
 	return;
 bigroom:
-	context._sub(context.data.byte(129), 8);
+	context._sub(context.ds.byte(129), 8);
 	maptopanel(context);
-	context._add(context.data.byte(129), 8);
+	context._add(context.ds.byte(129), 8);
 	return;
 }
 
 static void dumpeverything(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.ax = context.ds.word(context.bx);
+	context.cx = context.ds.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)));
+	context._cmp(context.ax, context.ds.word(context.bx+(40*5)));
 	if (!context.flags.z()) goto notskip1;
-	context._cmp(context.cx, context.data.word(context.bx+(40*5)+2));
+	context._cmp(context.cx, context.ds.word(context.bx+(40*5)+2));
 	if (context.flags.z()) goto skip1;
 notskip1:
 	context.push(context.bx);
@@ -3943,8 +3943,8 @@ notskip1:
 	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));
+	context._add(context.di, context.ds.word(117));
+	context._add(context.bx, context.ds.word(119));
 	multidump(context);
 	context.ds = context.pop();
 	context.es = context.pop();
@@ -3955,8 +3955,8 @@ skip1:
 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.ax = context.ds.word(context.bx);
+	context.cx = context.ds.word(context.bx+2);
 	context._cmp(context.ax, 0x0ffff);
 	if (context.flags.z()) goto finishevery2;
 	context.push(context.bx);
@@ -3966,8 +3966,8 @@ dumpevery2:
 	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));
+	context._add(context.di, context.ds.word(117));
+	context._add(context.bx, context.ds.word(119));
 	multidump(context);
 	context.ds = context.pop();
 	context.es = context.pop();
@@ -3981,7 +3981,7 @@ finishevery2:
 static void allocatework(Context & context) {
 	context.bx = 0x1000;
 	allocatemem(context);
-	context.data.word(400) = context.ax;
+	context.ds.word(400) = context.ax;
 	return;
 }
 
@@ -4009,20 +4009,20 @@ static void loadpalfromiff(Context & context) {
 	context.dx = 2494;
 	openfile(context);
 	context.cx = 2000;
-	context.ds = context.data.word(402);
+	context.ds = context.ds.word(402);
 	context.dx = 0;
 	readfromfile(context);
 	closefile(context);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768;
-	context.ds = context.data.word(402);
+	context.ds = context.ds.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);
+	context._cmp(context.ds.byte(73), 1);
 	if (!context.flags.z()) goto nought;
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto nought;
@@ -4053,7 +4053,7 @@ static void cls(Context & context) {
 static void printundermon(Context & context) {
 	context.si = (320*43)+76;
 	context.di = context.si;
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context._add(context.si, 8*320);
 	context.dx = 0x0a000;
 	context.ds = context.dx;
@@ -4089,7 +4089,7 @@ static void worktoscreen(Context & context) {
 	context.si = 0;
 	context.di = 0;
 	context.cx = 25;
-	context.ds = context.data.word(400);
+	context.ds = context.ds.word(400);
 	context.dx = 0x0a000;
 	context.es = context.dx;
 dumpallloop:
@@ -4106,54 +4106,54 @@ dumpallloop:
 }
 
 static 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.di = context.ds.word(125);
+	context._add(context.di, context.ds.word(117));
+	context.bx = context.ds.word(127);
+	context._add(context.bx, context.ds.word(119));
+	context.ds = context.ds.word(402);
 	context.si = 0;
-	context.cl = context.data.byte(128);
-	context.ch = context.data.byte(129);
+	context.cl = context.ds.byte(128);
+	context.ch = context.ds.byte(129);
 	multiget(context);
 	return;
 }
 
 static 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.di = context.ds.word(125);
+	context._add(context.di, context.ds.word(117));
+	context.bx = context.ds.word(127);
+	context._add(context.bx, context.ds.word(119));
+	context.ds = context.ds.word(402);
 	context.si = 0;
-	context.cl = context.data.byte(128);
-	context.ch = context.data.byte(129);
+	context.cl = context.ds.byte(128);
+	context.ch = context.ds.byte(129);
 	multiput(context);
 	return;
 }
 
 static 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);
+	context.di = context.ds.word(125);
+	context._add(context.di, context.ds.word(117));
+	context.bx = context.ds.word(127);
+	context._add(context.bx, context.ds.word(119));
+	context.cl = context.ds.byte(128);
+	context.ch = context.ds.byte(129);
 	multidump(context);
 	return;
 }
 
 static 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._sub(context.al, context.ds.byte(context.bx));
+	context._sub(context.ah, context.ds.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);
+	context.al = context.ds.byte(context.bx+4);
 	getsetad(context);
-	context.al = context.data.byte(context.bx+17);
-	context.es = context.data.word(444);
+	context.al = context.ds.byte(context.bx+17);
+	context.es = context.ds.word(444);
 	context.bx = 0;
 	context.ah = 0;
 	context.cx = 6;
@@ -4163,16 +4163,16 @@ static void pixelcheckset(Context & context) {
 	context.push(context.ax);
 	context.al = context.ah;
 	context.ah = 0;
-	context.cl = context.data.byte(context.bx);
+	context.cl = context.ds.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._add(context.ax, context.ds.word(context.bx+2));
 	context.bx = context.ax;
 	context._add(context.bx, 0+2080);
-	context.al = context.data.byte(context.bx);
+	context.al = context.ds.byte(context.bx);
 	context.dl = context.al;
 	context.cx = context.pop();
 	context.bx = context.pop();
@@ -4185,25 +4185,25 @@ static void pixelcheckset(Context & context) {
 static void createpanel(Context & context) {
 	context.di = 0;
 	context.bx = 8;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.al = 0;
 	context.ah = 2;
 	showframe(context);
 	context.di = 160;
 	context.bx = 8;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.al = 0;
 	context.ah = 2;
 	showframe(context);
 	context.di = 0;
 	context.bx = 104;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.al = 0;
 	context.ah = 2;
 	showframe(context);
 	context.di = 160;
 	context.bx = 104;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.al = 0;
 	context.ah = 2;
 	showframe(context);
@@ -4214,13 +4214,13 @@ static void createpanel2(Context & context) {
 	createpanel(context);
 	context.di = 0;
 	context.bx = 0;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.al = 5;
 	context.ah = 2;
 	showframe(context);
 	context.di = 160;
 	context.bx = 0;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.al = 5;
 	context.ah = 2;
 	showframe(context);
@@ -4229,7 +4229,7 @@ static void createpanel2(Context & context) {
 
 static void clearwork(Context & context) {
 	context.ax = 0x0;
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.di = 0;
 	context.cx = (200*320)/64;
 clearloop:
@@ -4270,24 +4270,24 @@ clearloop:
 }
 
 static void zoom(Context & context) {
-	context._cmp(context.data.word(21), 0);
+	context._cmp(context.ds.word(21), 0);
 	if (!context.flags.z()) goto inwatching;
-	context._cmp(context.data.byte(8), 1);
+	context._cmp(context.ds.byte(8), 1);
 	if (context.flags.z()) goto zoomswitch;
 inwatching:
 	return;
 zoomswitch:
-	context._cmp(context.data.byte(100), 199);
+	context._cmp(context.ds.byte(100), 199);
 	if (context.flags.c()) goto zoomit;
 cantzoom:
 	putunderzoom(context);
 	return;
 zoomit:
-	context.ax = context.data.word(222);
+	context.ax = context.ds.word(222);
 	context._sub(context.ax, 9);
 	context.cx = 320;
 	context._mul(context.cx);
-	context._add(context.ax, context.data.word(220));
+	context._add(context.ax, context.ds.word(220));
 	context._sub(context.ax, 11);
 	context.si = context.ax;
 	context.ax = 132+4;
@@ -4295,8 +4295,8 @@ zoomit:
 	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.es = context.ds.word(400);
+	context.ds = context.ds.word(400);
 	context.cx = 20;
 zoomloop:
 	context.push(context.cx);
@@ -4305,14 +4305,14 @@ zoomloop2:
 	context._lodsb();
 	context.ah = context.al;
 	context._stosw();
-	context.data.word(context.di+320-2) = context.ax;
+	context.ds.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;
+	context.ds.byte(75) = 1;
 	return;
 }
 
@@ -4321,12 +4321,12 @@ static void delthisone(Context & context) {
 	context.push(context.ax);
 	context.al = context.ah;
 	context.ah = 0;
-	context._add(context.ax, context.data.word(119));
+	context._add(context.ax, context.ds.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.bx, context.ds.word(117));
 	context._add(context.ax, context.bx);
 	context.di = context.ax;
 	context.ax = context.pop();
@@ -4339,8 +4339,8 @@ static void delthisone(Context & context) {
 	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.es = context.ds.word(400);
+	context.ds = context.ds.word(402);
 	context.dl = context.cl;
 	context.dh = 0;
 	context.ax = 320;
@@ -4364,7 +4364,7 @@ static void multiget(Context & context) {
 	context.bx = 320;
 	context._mul(context.bx);
 	context._add(context.di, context.ax);
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.es = context.ds;
 	context.ds = context.es;
 	context._xchg(context.di, context.si);
@@ -4408,7 +4408,7 @@ static void multiput(Context & context) {
 	context.bx = 320;
 	context._mul(context.bx);
 	context._add(context.di, context.ax);
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.al = context.cl;
 	context.ah = 0;
 	context.dx = 320;
@@ -4447,7 +4447,7 @@ multiloop6:
 static void multidump(Context & context) {
 	context.dx = 0x0a000;
 	context.es = context.dx;
-	context.ds = context.data.word(400);
+	context.ds = context.ds.word(400);
 	context.ax = context.bx;
 	context.bx = 320;
 	context._mul(context.bx);
@@ -4729,17 +4729,17 @@ static void width160(Context & context) {
 }
 
 static void doblocks(Context & context) {
-	context.es = context.data.word(400);
-	context.ax = context.data.word(119);
+	context.es = context.ds.word(400);
+	context.ax = context.ds.word(119);
 	context.cx = 320;
 	context._mul(context.cx);
-	context.di = context.data.word(117);
+	context.di = context.ds.word(117);
 	context._add(context.di, context.ax);
-	context.al = context.data.byte(149);
+	context.al = context.ds.byte(149);
 	context.ah = 0;
 	context.bx = 66;
 	context._mul(context.bx);
-	context.bl = context.data.byte(148);
+	context.bl = context.ds.byte(148);
 	context.bh = 0;
 	context._add(context.ax, context.bx);
 	context.si = 0;
@@ -4752,9 +4752,9 @@ loop120:
 loop124:
 	context.push(context.cx);
 	context.push(context.di);
-	context.ds = context.data.word(418);
+	context.ds = context.ds.word(418);
 	context._lodsb();
-	context.ds = context.data.word(416);
+	context.ds = context.ds.word(416);
 	context.push(context.si);
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto zeroblock;
@@ -4852,22 +4852,22 @@ static void showframe(Context & context) {
 	context.si = context.cx;
 	context._add(context.cx, context.cx);
 	context._add(context.si, context.cx);
-	context._cmp(context.data.word(context.si), 0);
+	context._cmp(context.ds.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.al = context.ds.byte(context.si+4);
 	context.ah = 0;
 	context._add(context.di, context.ax);
-	context.al = context.data.byte(context.si+5);
+	context.al = context.ds.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.cx = context.ds.word(context.si+0);
+	context.ax = context.ds.word(context.si+2);
 	context._add(context.ax, 2080);
 	context.si = context.ax;
 	context.ax = context.pop();
@@ -4898,9 +4898,9 @@ notdiffdest:
 	if (context.flags.z()) goto notprintlist;
 	context.push(context.ax);
 	context.ax = context.di;
-	context._sub(context.ax, context.data.word(117));
+	context._sub(context.ax, context.ds.word(117));
 	context.push(context.bx);
-	context._sub(context.bx, context.data.word(119));
+	context._sub(context.bx, context.ds.word(119));
 	context.ah = context.bl;
 	context.bx = context.pop();
 	context.ax = context.pop();
@@ -4908,7 +4908,7 @@ notprintlist:
 	context._test(context.ah, 4);
 	if (context.flags.z()) goto notflippedx;
 	context.dx = 320;
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.push(context.cx);
 	frameoutfx(context);
 	context.cx = context.pop();
@@ -4917,7 +4917,7 @@ notflippedx:
 	context._test(context.ah, 2);
 	if (context.flags.z()) goto notnomask;
 	context.dx = 320;
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.push(context.cx);
 	frameoutnm(context);
 	context.cx = context.pop();
@@ -4926,14 +4926,14 @@ notnomask:
 	context._test(context.ah, 32);
 	if (context.flags.z()) goto noeffects;
 	context.dx = 320;
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.push(context.cx);
 	frameoutbh(context);
 	context.cx = context.pop();
 	return;
 noeffects:
 	context.dx = 320;
-	context.es = context.data.word(400);
+	context.es = context.ds.word(400);
 	context.push(context.cx);
 	frameoutv(context);
 	context.cx = context.pop();
@@ -5038,7 +5038,7 @@ bhloop2:
 	context.ch = 0;
 	context.ah = 255;
 bhloop1:
-	context._cmp(context.data.byte(context.di), context.ah);
+	context._cmp(context.ds.byte(context.di), context.ah);
 	if (!context.flags.z()) goto nofill;
 	context._movsb();
  	if (--context.cx) goto bhloop1;
@@ -5086,7 +5086,7 @@ frameloopfx3:
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto backtootherfx;
 backtosolidfx:
-	context.data.byte(context.di) = context.al;
+	context.ds.byte(context.di) = context.al;
 	context._sub(context.di, 1);
 	if (--context.cx) goto frameloopfx3;
 	context.cx = context.pop();
@@ -5097,9 +5097,9 @@ backtosolidfx:
 }
 
 static void transferinv(Context & context) {
-	context.di = context.data.word(12);
+	context.di = context.ds.word(12);
 	context.push(context.di);
-	context.al = context.data.byte(10);
+	context.al = context.ds.byte(10);
 	context.ah = 0;
 	context.bx = context.ax;
 	context._add(context.ax, context.ax);
@@ -5107,12 +5107,12 @@ static void transferinv(Context & context) {
 	context._add(context.ax, 1);
 	context.cx = 6;
 	context._mul(context.cx);
-	context.es = context.data.word(398);
+	context.es = context.ds.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.al = context.ds.byte(90);
 	context.ah = 0;
 	context.bx = context.ax;
 	context._add(context.ax, context.ax);
@@ -5120,94 +5120,94 @@ static void transferinv(Context & context) {
 	context._add(context.ax, 1);
 	context.cx = 6;
 	context._mul(context.cx);
-	context.ds = context.data.word(446);
+	context.ds = context.ds.word(446);
 	context.bx = 0;
 	context._add(context.bx, context.ax);
 	context.si = 0+2080;
-	context.al = context.data.byte(context.bx);
+	context.al = context.ds.byte(context.bx);
 	context.ah = 0;
-	context.cl = context.data.byte(context.bx+1);
+	context.cl = context.ds.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._add(context.si, context.ds.word(context.bx+2));
+	context.dx = context.ds.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.ds.byte(context.bx+0) = context.al;
+	context.ds.byte(context.bx+1) = context.cl;
+	context.ds.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);
+	context.ds.word(context.bx+2) = context.ax;
+	context._add(context.ds.word(12), context.cx);
 	return;
 }
 
 static void transfermap(Context & context) {
-	context.di = context.data.word(12);
+	context.di = context.ds.word(12);
 	context.push(context.di);
-	context.al = context.data.byte(10);
+	context.al = context.ds.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.es = context.ds.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.al = context.ds.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.ds = context.ds.word(446);
 	context.bx = 0;
 	context._add(context.bx, context.ax);
 	context.si = 0+2080;
-	context.al = context.data.byte(context.bx);
+	context.al = context.ds.byte(context.bx);
 	context.ah = 0;
-	context.cl = context.data.byte(context.bx+1);
+	context.cl = context.ds.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._add(context.si, context.ds.word(context.bx+2));
+	context.dx = context.ds.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.ds.byte(context.bx+0) = context.al;
+	context.ds.byte(context.bx+1) = context.cl;
+	context.ds.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);
+	context.ds.word(context.bx+2) = context.ax;
+	context._add(context.ds.word(12), context.cx);
 	return;
 }
 
 static void dofade(Context & context) {
-	context._cmp(context.data.byte(344), 0);
+	context._cmp(context.ds.byte(344), 0);
 	if (context.flags.z()) goto finishfade;
-	context.cl = context.data.byte(345);
+	context.cl = context.ds.byte(345);
 	context.ch = 0;
-	context.al = context.data.byte(343);
+	context.al = context.ds.byte(343);
 	context.ah = 0;
-	context.ds = context.data.word(412);
+	context.ds = context.ds.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.al = context.ds.byte(345);
+	context._add(context.al, context.ds.byte(343));
+	context.ds.byte(343) = context.al;
 	context._cmp(context.al, 0);
 	if (!context.flags.z()) goto finishfade;
 	fadecalculation(context);
@@ -5216,7 +5216,7 @@ finishfade:
 }
 
 static void clearendpal(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
 	context.cx = 768;
 	context.al = 0;
@@ -5225,7 +5225,7 @@ static void clearendpal(Context & context) {
 }
 
 static void clearpalette(Context & context) {
-	context.data.byte(344) = 0;
+	context.ds.byte(344) = 0;
 	clearstartpal(context);
 	dumpcurrent(context);
 	return;
@@ -5234,15 +5234,15 @@ static void clearpalette(Context & context) {
 static 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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	return;
 }
 
 static void fadetowhite(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
 	context.cx = 768;
 	context.al = 63;
@@ -5253,15 +5253,15 @@ static void fadetowhite(Context & context) {
 	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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	return;
 }
 
 static void fadefromwhite(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
 	context.cx = 768;
 	context.al = 63;
@@ -5272,20 +5272,20 @@ static void fadefromwhite(Context & context) {
 	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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	return;
 }
 
 static 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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 64;
 	return;
 }
 
@@ -5293,16 +5293,16 @@ static void fadescreendownhalf(Context & context) {
 	paltostartpal(context);
 	paltoendpal(context);
 	context.cx = 768;
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768;
 halfend:
-	context.al = context.data.byte(context.bx);
+	context.al = context.ds.byte(context.bx);
 	context._shr(context.al, 1);
-	context.data.byte(context.bx) = context.al;
+	context.ds.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.ds = context.ds.word(412);
+	context.es = context.ds.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;
@@ -5311,45 +5311,45 @@ halfend:
 	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;
+ 	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 31;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 32;
 	return;
 }
 
 static 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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 31;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 32;
 	return;
 }
 
 static 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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	return;
 }
 
 static 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;
+	context.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 64;
 	return;
 }
 
 static void clearstartpal(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3);
 	context.cx = 256;
 wholeloop1:
@@ -5362,39 +5362,39 @@ wholeloop1:
 }
 
 static void showgun(Context & context) {
-	context.data.byte(348) = 0;
-	context.data.byte(347) = 0;
-	context.data.byte(349) = 0;
+	context.ds.byte(348) = 0;
+	context.ds.byte(347) = 0;
+	context.ds.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.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.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.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	context.cx = 200;
 	hangon(context);
-	context.data.byte(531) = 34;
+	context.ds.byte(531) = 34;
 	loadroomssample(context);
-	context.data.byte(386) = 0;
+	context.ds.byte(386) = 0;
 	context.dx = 2364;
 	loadintotemp(context);
 	createpanel2(context);
-	context.ds = context.data.word(458);
+	context.ds = context.ds.word(458);
 	context.al = 0;
 	context.ah = 0;
 	context.di = 100;
 	context.bx = 4;
 	showframe(context);
-	context.ds = context.data.word(458);
+	context.ds = context.ds.word(458);
 	context.al = 1;
 	context.ah = 0;
 	context.di = 158;
@@ -5425,19 +5425,19 @@ static void rollem(Context & context) {
 	context.ch = 160;
 	context.di = 25;
 	context.bx = 20;
-	context.ds = context.data.word(402);
+	context.ds = context.ds.word(402);
 	context.si = 0;
 	multiget(context);
-	context.es = context.data.word(466);
+	context.es = context.ds.word(466);
 	context.si = 49*2;
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.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);
+	context.cx = context.ds.word(77);
 endcredits22:
 	context.push(context.cx);
 	context.push(context.si);
@@ -5449,7 +5449,7 @@ endcredits22:
 	context.ch = 160;
 	context.di = 25;
 	context.bx = 20;
-	context.ds = context.data.word(402);
+	context.ds = context.ds.word(402);
 	context.si = 0;
 	multiput(context);
 	vsync(context);
@@ -5468,7 +5468,7 @@ onelot2:
 	context.dx = 161;
 	context.ax = 0;
 	printdirect(context);
-	context._add(context.bx, context.data.word(77));
+	context._add(context.bx, context.ds.word(77));
 	context.cx = context.pop();
 	if (--context.cx) goto onelot2;
 	vsync(context);
@@ -5482,13 +5482,13 @@ onelot2:
 	context.di = context.pop();
 	context.si = context.pop();
 	context.cx = context.pop();
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.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.al = context.ds.byte(context.si);
 	context._add(context.si, 1);
 	context._cmp(context.al, ':');
 	if (context.flags.z()) goto gotnext2;
@@ -5496,7 +5496,7 @@ looknext2:
 	if (context.flags.z()) goto gotnext2;
 	goto looknext2;
 gotnext2:
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.byte(392), 1);
 	if (context.flags.z()) goto endearly;
 	if (--context.cx) goto endcredits21;
 	context.cx = 120;
@@ -5509,57 +5509,57 @@ endearly:
 }
 
 static void fadecalculation(Context & context) {
-	context._cmp(context.data.byte(346), 0);
+	context._cmp(context.ds.byte(346), 0);
 	if (context.flags.z()) goto nomorefading;
-	context.bl = context.data.byte(346);
-	context.es = context.data.word(412);
+	context.bl = context.ds.byte(346);
+	context.es = context.ds.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.al = context.ds.byte(context.si);
+	context.ah = context.ds.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);
+	context._sub(context.ds.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);
+	context._add(context.ds.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);
+	context._sub(context.ds.byte(346), 1);
 	return;
 nomorefading:
-	context.data.byte(344) = 0;
+	context.ds.byte(344) = 0;
 	return;
 }
 
 static void greyscalesum(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.al = context.ds.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.al = context.ds.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.al = context.ds.byte(context.si+2);
 	context.ah = 0;
 	context.cx = 11;
 	context._mul(context.cx);
@@ -5571,19 +5571,19 @@ greysumloop2:
 	if (!context.flags.c()) goto greysumloop2;
 	context.bl = context.al;
 	context.al = context.bl;
-	context.ah = context.data.byte(348);
+	context.ah = context.ds.byte(348);
 	context._cmp(context.al, 0);
 	context._add(context.al, context.ah);
 noaddr:
 	context._stosb();
-	context.ah = context.data.byte(347);
+	context.ah = context.ds.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.ah = context.ds.byte(349);
 	context.al = context.bl;
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto noaddb;
@@ -5597,8 +5597,8 @@ noaddb:
 }
 
 static void paltostartpal(Context & context) {
-	context.es = context.data.word(412);
-	context.ds = context.data.word(412);
+	context.es = context.ds.word(412);
+	context.ds = context.ds.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;
@@ -5607,8 +5607,8 @@ static void paltostartpal(Context & context) {
 }
 
 static void endpaltostart(Context & context) {
-	context.es = context.data.word(412);
-	context.ds = context.data.word(412);
+	context.es = context.ds.word(412);
+	context.ds = context.ds.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;
@@ -5617,8 +5617,8 @@ static void endpaltostart(Context & context) {
 }
 
 static void startpaltoend(Context & context) {
-	context.es = context.data.word(412);
-	context.ds = context.data.word(412);
+	context.es = context.ds.word(412);
+	context.ds = context.ds.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;
@@ -5627,8 +5627,8 @@ static void startpaltoend(Context & context) {
 }
 
 static void paltoendpal(Context & context) {
-	context.es = context.data.word(412);
-	context.ds = context.data.word(412);
+	context.es = context.ds.word(412);
+	context.ds = context.ds.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;
@@ -5637,8 +5637,8 @@ static void paltoendpal(Context & context) {
 }
 
 static void allpalette(Context & context) {
-	context.es = context.data.word(412);
-	context.ds = context.data.word(412);
+	context.es = context.ds.word(412);
+	context.ds = context.ds.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;
@@ -5649,7 +5649,7 @@ static void allpalette(Context & context) {
 
 static void dumpcurrent(Context & context) {
 	context.si = 0+(228*13)+32+60+(32*32)+(11*10*3);
-	context.ds = context.data.word(412);
+	context.ds = context.ds.word(412);
 	vsync(context);
 	context.al = 0;
 	context.cx = 128;
@@ -5664,7 +5664,7 @@ static void dumpcurrent(Context & context) {
 static void fadedownmon(Context & context) {
 	paltostartpal(context);
 	paltoendpal(context);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(231*3);
 	context.cx = 3*8;
 	context.ax = 0;
@@ -5672,10 +5672,10 @@ static void fadedownmon(Context & context) {
 	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.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	context.cx = 64;
 	hangon(context);
 	return;
@@ -5684,7 +5684,7 @@ static void fadedownmon(Context & context) {
 static void fadeupmon(Context & context) {
 	paltostartpal(context);
 	paltoendpal(context);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(231*3);
 	context.cx = 3*8;
 	context.ax = 0;
@@ -5692,10 +5692,10 @@ static void fadeupmon(Context & context) {
 	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.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	context.cx = 128;
 	hangon(context);
 	return;
@@ -5704,7 +5704,7 @@ static void fadeupmon(Context & context) {
 static void fadeupmonfirst(Context & context) {
 	paltostartpal(context);
 	paltoendpal(context);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(231*3);
 	context.cx = 3*8;
 	context.ax = 0;
@@ -5712,10 +5712,10 @@ static void fadeupmonfirst(Context & context) {
 	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.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	context.cx = 64;
 	hangon(context);
 	context.al = 26;
@@ -5727,7 +5727,7 @@ static void fadeupmonfirst(Context & context) {
 
 static void fadeupyellows(Context & context) {
 	paltoendpal(context);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+(231*3);
 	context.cx = 3*8;
 	context.ax = 0;
@@ -5735,10 +5735,10 @@ static void fadeupyellows(Context & context) {
 	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.ds.byte(344) = 1;
+	context.ds.byte(346) = 63;
+	context.ds.byte(343) = 0;
+	context.ds.byte(345) = 128;
 	context.cx = 128;
 	hangon(context);
 	return;
@@ -5746,7 +5746,7 @@ static void fadeupyellows(Context & context) {
 
 static void initialmoncols(Context & context) {
 	paltostartpal(context);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+(230*3);
 	context.cx = 3*9;
 	context.ax = 0;
@@ -5754,7 +5754,7 @@ static void initialmoncols(Context & context) {
 	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.ds = context.ds.word(412);
 	context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+(230*3);
 	context.al = 230;
 	context.cx = 18;
@@ -5775,24 +5775,24 @@ static void endgame(Context & context) {
 	monkspeaking(context);
 	gettingshot(context);
 	getridoftemptext(context);
-	context.data.byte(387) = 7;
-	context.data.byte(388) = 1;
+	context.ds.byte(387) = 7;
+	context.ds.byte(388) = 1;
 	context.cx = 200;
 	hangon(context);
 	return;
 }
 
 static void monkspeaking(Context & context) {
-	context.data.byte(531) = 35;
+	context.ds.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.ds.byte(386) = 7;
+	context.ds.byte(388) = -1;
+	context.ds.byte(387) = 0;
 	context.al = 12;
 	context.ah = 255;
 	playchannel0(context);
@@ -5805,8 +5805,8 @@ nextmonkspeak:
 	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.es = context.ds.word(466);
+	context.ax = context.ds.word(context.si);
 	context._add(context.ax, 66*2);
 	context.si = context.ax;
 nextbit:
@@ -5831,8 +5831,8 @@ nextbit:
 	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;
+	context.ds.byte(388) = 1;
+	context.ds.byte(387) = 7;
 	fadescreendowns(context);
 	context.cx = 300;
 	hangon(context);
@@ -5845,18 +5845,18 @@ static void showmonk(Context & context) {
 	context.ah = 128;
 	context.di = 160;
 	context.bx = 72;
-	context.ds = context.data.word(458);
+	context.ds = context.ds.word(458);
 	showframe(context);
 	return;
 }
 
 static void gettingshot(Context & context) {
-	context.data.byte(188) = 55;
+	context.ds.byte(188) = 55;
 	clearpalette(context);
 	loadintroroom(context);
 	fadescreenups(context);
-	context.data.byte(387) = 0;
-	context.data.byte(388) = -1;
+	context.ds.byte(387) = 0;
+	context.ds.byte(388) = -1;
 	runendseq(context);
 	clearbeforeload(context);
 	return;
@@ -5889,7 +5889,7 @@ hangonloope:
 	context.push(context.cx);
 	vsync(context);
 	context.cx = context.pop();
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.byte(392), 1);
 	if (context.flags.z()) goto hangonearly;
 	if (--context.cx) goto hangonloope;
 	return;
@@ -5904,28 +5904,28 @@ static void intro(Context & context) {
 	loadtemptext(context);
 	loadpalfromiff(context);
 	setmode(context);
-	context.data.byte(188) = 50;
+	context.ds.byte(188) = 50;
 	clearpalette(context);
 	loadintroroom(context);
-	context.data.byte(386) = 7;
-	context.data.byte(388) = -1;
-	context.data.byte(387) = 0;
+	context.ds.byte(386) = 7;
+	context.ds.byte(388) = -1;
+	context.ds.byte(387) = 0;
 	context.al = 12;
 	context.ah = 255;
 	playchannel0(context);
 	fadescreenups(context);
 	runintroseq(context);
 	clearbeforeload(context);
-	context.data.byte(188) = 52;
+	context.ds.byte(188) = 52;
 	loadintroroom(context);
 	runintroseq(context);
 	clearbeforeload(context);
-	context.data.byte(188) = 53;
+	context.ds.byte(188) = 53;
 	loadintroroom(context);
 	runintroseq(context);
 	clearbeforeload(context);
 	allpalette(context);
-	context.data.byte(188) = 54;
+	context.ds.byte(188) = 54;
 	loadintroroom(context);
 	runintroseq(context);
 	getridoftemptext(context);
@@ -5934,14 +5934,14 @@ static void intro(Context & context) {
 }
 
 static void runintroseq(Context & context) {
-	context.data.byte(103) = 0;
+	context.ds.byte(103) = 0;
 moreintroseq:
 	vsync(context);
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.byte(392), 1);
 	if (context.flags.z()) goto earlyendrun;
 	spriteupdate(context);
 	vsync(context);
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.byte(392), 1);
 	if (context.flags.z()) goto earlyendrun;
 	deleverything(context);
 	printsprites(context);
@@ -5949,14 +5949,14 @@ moreintroseq:
 	afterintroroom(context);
 	usetimedtext(context);
 	vsync(context);
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.byte(392), 1);
 	if (context.flags.z()) goto earlyendrun;
 	dumpmap(context);
 	dumptimedtext(context);
 	vsync(context);
-	context._cmp(context.data.byte(392), 1);
+	context._cmp(context.ds.byte(392), 1);
 	if (context.flags.z()) goto earlyendrun;
-	context._cmp(context.data.byte(103), 1);
+	context._cmp(context.ds.byte(103), 1);
 	if (!context.flags.z()) goto moreintroseq;
 	return;
 earlyendrun:
@@ -5969,7 +5969,7 @@ earlyendrun:
 
 static void runendseq(Context & context) {
 	atmospheres(context);
-	context.data.byte(103) = 0;
+	context.ds.byte(103) = 0;
 moreendseq:
 	vsync(context);
 	spriteupdate(context);
@@ -5983,23 +5983,23 @@ moreendseq:
 	dumpmap(context);
 	dumptimedtext(context);
 	vsync(context);
-	context._cmp(context.data.byte(103), 1);
+	context._cmp(context.ds.byte(103), 1);
 	if (!context.flags.z()) goto moreendseq;
 	return;
 }
 
 static void loadintroroom(Context & context) {
-	context.data.byte(139) = 0;
-	context.data.byte(9) = 255;
+	context.ds.byte(139) = 0;
+	context.ds.byte(9) = 255;
 	loadroom(context);
-	context.data.word(121) = 72;
-	context.data.word(123) = 16;
+	context.ds.word(121) = 72;
+	context.ds.word(123) = 16;
 	clearsprites(context);
-	context.data.byte(61) = 0;
-	context.data.byte(142) = '0';
-	context.data.byte(105) = 0;
+	context.ds.byte(61) = 0;
+	context.ds.byte(142) = '0';
+	context.ds.byte(105) = 0;
 	clearwork(context);
-	context.data.byte(62) = 1;
+	context.ds.byte(62) = 1;
 	drawfloor(context);
 	reelsonscreen(context);
 	spriteupdate(context);
@@ -6009,9 +6009,9 @@ static void loadintroroom(Context & context) {
 }
 
 static void realcredits(Context & context) {
-	context.data.byte(531) = 33;
+	context.ds.byte(531) = 33;
 	loadroomssample(context);
-	context.data.byte(386) = 0;
+	context.ds.byte(386) = 0;
 	mode640x480(context);
 	context.cx = 35;
 	hangon(context);
@@ -6106,13 +6106,13 @@ static void printchar(Context & context) {
 	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.ds.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);
+	context._cmp(context.ds.byte(72), 0);
 	if (!context.flags.z()) goto nokern;
 	kernchars(context);
 nokern:
@@ -6148,9 +6148,9 @@ kernit:
 }
 
 static void printslow(Context & context) {
-	context.data.byte(231) = 1;
-	context.data.byte(234) = 3;
-	context.ds = context.data.word(404);
+	context.ds.byte(231) = 1;
+	context.ds.byte(234) = 3;
+	context.ds = context.ds.word(404);
 printloopslow6:
 	context.push(context.bx);
 	context.push(context.di);
@@ -6161,7 +6161,7 @@ printloopslow5:
 	context.push(context.cx);
 	context.push(context.si);
 	context.push(context.es);
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.word(context.si);
 	context.push(context.bx);
 	context.push(context.cx);
 	context.push(context.es);
@@ -6174,7 +6174,7 @@ printloopslow5:
 	context.es = context.pop();
 	context.cx = context.pop();
 	context.bx = context.pop();
-	context.ax = context.data.word(context.si+1);
+	context.ax = context.ds.word(context.si+1);
 	context._add(context.si, 1);
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto finishslow;
@@ -6189,9 +6189,9 @@ printloopslow5:
 	context.push(context.es);
 	context.push(context.si);
 	modifychar(context);
-	context.data.word(71) = 91;
+	context.ds.word(71) = 91;
 	printboth(context);
-	context.data.word(71) = 0;
+	context.ds.word(71) = 0;
 	context.si = context.pop();
 	context.es = context.pop();
 	context.cx = context.pop();
@@ -6201,14 +6201,14 @@ printloopslow5:
 	waitframes(context);
 	context._cmp(context.ax, 0);
 	if (context.flags.z()) goto keepgoing;
-	context._cmp(context.ax, context.data.word(212));
+	context._cmp(context.ax, context.ds.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));
+	context._cmp(context.ax, context.ds.word(212));
 	if (!context.flags.z()) goto finishslow2;
 afterslow:
 	context.es = context.pop();
@@ -6252,7 +6252,7 @@ static void waitframes(Context & context) {
 	vsync(context);
 	dumppointer(context);
 	delpointer(context);
-	context.ax = context.data.word(202);
+	context.ax = context.ds.word(202);
 	context.ds = context.pop();
 	context.si = context.pop();
 	context.es = context.pop();
@@ -6279,8 +6279,8 @@ static void printboth(Context & context) {
 }
 
 static void printdirect(Context & context) {
-	context.data.word(84) = context.di;
-	context.ds = context.data.word(268);
+	context.ds.word(84) = context.di;
+	context.ds = context.ds.word(268);
 printloop6:
 	context.push(context.bx);
 	context.push(context.di);
@@ -6288,7 +6288,7 @@ printloop6:
 	getnumber(context);
 	context.ch = 0;
 printloop5:
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.word(context.si);
 	context._add(context.si, 1);
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto finishdirct;
@@ -6298,14 +6298,14 @@ printloop5:
 	context.push(context.es);
 	modifychar(context);
 	printchar(context);
-	context.data.word(84) = context.di;
+	context.ds.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));
+	context._add(context.bx, context.ds.word(77));
 	goto printloop6;
 finishdirct:
 	context.dx = context.pop();
@@ -6315,12 +6315,12 @@ finishdirct:
 }
 
 static void monprint(Context & context) {
-	context.data.byte(72) = 1;
+	context.ds.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);
+	context.di = context.ds.word(318);
+	context.bx = context.ds.word(320);
+	context.ds = context.ds.word(406);
 printloop8:
 	context.push(context.bx);
 	context.push(context.di);
@@ -6328,7 +6328,7 @@ printloop8:
 	getnumber(context);
 	context.ch = 0;
 printloop7:
-	context.al = context.data.byte(context.si);
+	context.al = context.ds.byte(context.si);
 	context._add(context.si, 1);
 	context._cmp(context.al, ':');
 	if (context.flags.z()) goto finishmon2;
@@ -6340,7 +6340,7 @@ printloop7:
 	if (context.flags.z()) goto finishmon;
 	context._cmp(context.al, '%');
 	if (!context.flags.z()) goto nottrigger;
-	context.ah = context.data.byte(context.si);
+	context.ah = context.ds.byte(context.si);
 	context._add(context.si, 1);
 	context._add(context.si, 1);
 	goto finishmon;
@@ -6349,9 +6349,9 @@ nottrigger:
 	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;
+	context.ds.word(312) = context.di;
+	context.ds.word(314) = context.bx;
+	context.ds.word(138) = 1;
 	printcurs(context);
 	vsync(context);
 	context.push(context.si);
@@ -6376,7 +6376,7 @@ finishmon2:
 	context.di = context.pop();
 	context.bx = context.pop();
 	scrollmonitor(context);
-	context.data.word(312) = context.di;
+	context.ds.word(312) = context.di;
 	goto printloop8;
 finishmon:
 	context.dx = context.pop();
@@ -6384,12 +6384,12 @@ finishmon:
 	context.bx = context.pop();
 	context._cmp(context.al, '%');
 	if (!context.flags.z()) goto nottrigger2;
-	context.data.byte(55) = context.ah;
+	context.ds.byte(55) = context.ah;
 nottrigger2:
-	context.data.word(312) = context.di;
+	context.ds.word(312) = context.di;
 	scrollmonitor(context);
 	context.bx = context.si;
-	context.data.byte(72) = 0;
+	context.ds.byte(72) = 0;
 	return;
 }
 
@@ -6499,7 +6499,7 @@ notcent2:
 static void getnextword(Context & context) {
 	context.bx = 0;
 getloop:
-	context.ax = context.data.word(context.di);
+	context.ax = context.ds.word(context.di);
 	context._add(context.di, 1);
 	context._add(context.bh, 1);
 	context._cmp(context.al, ':');
@@ -6514,12 +6514,12 @@ 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.ds.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.cl = context.ds.byte(context.si+0);
 	context.ax = context.pop();
 	kernchars(context);
 	context._add(context.bl, context.cl);
@@ -6592,11 +6592,11 @@ nomod:
 }
 
 static void fillryan(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32;
 	findallryan(context);
 	context.si = 0+(228*13)+32;
-	context.al = context.data.byte(19);
+	context.al = context.ds.byte(19);
 	context.ah = 0;
 	context.cx = 20;
 	context._mul(context.cx);
@@ -6613,7 +6613,7 @@ ryanloop1:
 	context.push(context.cx);
 	context.push(context.di);
 	context.push(context.bx);
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.word(context.si);
 	context._add(context.si, 2);
 	context.push(context.si);
 	context.push(context.es);
@@ -6643,7 +6643,7 @@ static void fillopen(Context & context) {
 lessthanapage:
 	context.al = 1;
 	context.push(context.ax);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13);
 	findallopen(context);
 	context.si = 0+(228*13);
@@ -6654,7 +6654,7 @@ openloop1:
 	context.push(context.cx);
 	context.push(context.di);
 	context.push(context.bx);
-	context.ax = context.data.word(context.si);
+	context.ax = context.ds.word(context.si);
 	context._add(context.si, 2);
 	context.push(context.si);
 	context.push(context.es);
@@ -6682,15 +6682,15 @@ static void findallryan(Context & context) {
 	while(--context.cx) 	context._stosw();
 	context.di = context.pop();
 	context.cl = 4;
-	context.ds = context.data.word(398);
+	context.ds = context.ds.word(398);
 	context.bx = 0+2080+30000;
 	context.ch = 0;
 findryanloop:
-	context._cmp(context.data.byte(context.bx+2), context.cl);
+	context._cmp(context.ds.byte(context.bx+2), context.cl);
 	if (!context.flags.z()) goto notinryaninv;
-	context._cmp(context.data.byte(context.bx+3), 255);
+	context._cmp(context.ds.byte(context.bx+3), 255);
 	if (!context.flags.z()) goto notinryaninv;
-	context.al = context.data.byte(context.bx+4);
+	context.al = context.ds.byte(context.bx+4);
 	context.ah = 0;
 	context.push(context.di);
 	context._add(context.di, context.ax);
@@ -6713,23 +6713,23 @@ static void findallopen(Context & context) {
 	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.cl = context.ds.byte(110);
+	context.dl = context.ds.byte(111);
+	context.ds = context.ds.word(398);
 	context.bx = 0+2080+30000;
 	context.ch = 0;
 findopen1:
-	context._cmp(context.data.byte(context.bx+3), context.cl);
+	context._cmp(context.ds.byte(context.bx+3), context.cl);
 	if (!context.flags.z()) goto findopen2;
-	context._cmp(context.data.byte(context.bx+2), context.dl);
+	context._cmp(context.ds.byte(context.bx+2), context.dl);
 	if (!context.flags.z()) goto findopen2;
-	context._cmp(context.data.byte(111), 4);
+	context._cmp(context.ds.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));
+	context.al = context.ds.byte(context.bx+5);
+	context._cmp(context.al, context.ds.byte(184));
 	if (!context.flags.z()) goto findopen2;
 noloccheck:
-	context.al = context.data.byte(context.bx+4);
+	context.al = context.ds.byte(context.bx+4);
 	context.ah = 0;
 	context.push(context.di);
 	context._add(context.di, context.ax);
@@ -6743,19 +6743,19 @@ findopen2:
 	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.cl = context.ds.byte(110);
+	context.dl = context.ds.byte(111);
 	context.push(context.dx);
-	context.ds = context.data.word(426);
+	context.ds = context.ds.word(426);
 	context.dx = context.pop();
 	context.bx = 0;
 	context.ch = 0;
 findopen1a:
-	context._cmp(context.data.byte(context.bx+3), context.cl);
+	context._cmp(context.ds.byte(context.bx+3), context.cl);
 	if (!context.flags.z()) goto findopen2a;
-	context._cmp(context.data.byte(context.bx+2), context.dl);
+	context._cmp(context.ds.byte(context.bx+2), context.dl);
 	if (!context.flags.z()) goto findopen2a;
-	context.al = context.data.byte(context.bx+4);
+	context.al = context.ds.byte(context.bx+4);
 	context.ah = 0;
 	context.push(context.di);
 	context._add(context.di, context.ax);
@@ -6780,7 +6780,7 @@ static void obtoinv(Context & context) {
 	context.push(context.ax);
 	context.push(context.di);
 	context.push(context.bx);
-	context.ds = context.data.word(408);
+	context.ds = context.ds.word(408);
 	context._sub(context.di, 2);
 	context._sub(context.bx, 1);
 	context.al = 10;
@@ -6794,10 +6794,10 @@ static void obtoinv(Context & context) {
 	context.push(context.bx);
 	context.push(context.di);
 	context.push(context.ax);
-	context.ds = context.data.word(398);
+	context.ds = context.ds.word(398);
 	context._cmp(context.ah, 4);
 	if (context.flags.z()) goto isanextra;
-	context.ds = context.data.word(446);
+	context.ds = context.ds.word(446);
 isanextra:
 	context.cl = context.al;
 	context._add(context.al, context.al);
@@ -6815,7 +6815,7 @@ isanextra:
 	isitworn(context);
 	context.bx = context.pop();
 	if (!context.flags.z()) goto finishfill;
-	context.ds = context.data.word(408);
+	context.ds = context.ds.word(408);
 	context._sub(context.di, 3);
 	context._sub(context.bx, 2);
 	context.al = 7;
@@ -6830,34 +6830,34 @@ finishfill:
 }
 
 static void isitworn(Context & context) {
-	context.al = context.data.byte(context.bx+12);
+	context.al = context.ds.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.al = context.ds.byte(context.bx+13);
 	context._cmp(context.al, 'E'-'A');
 notworn:
 	return;
 }
 
 static void makeworn(Context & context) {
-	context.data.byte(context.bx+12) = 'W'-'A';
-	context.data.byte(context.bx+13) = 'E'-'A';
+	context.ds.byte(context.bx+12) = 'W'-'A';
+	context.ds.byte(context.bx+13) = 'E'-'A';
 	return;
 }
 
 static void examineob(Context & context) {
-	context.data.byte(234) = 0;
-	context.data.word(328) = 0;
+	context.ds.byte(234) = 0;
+	context.ds.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;
+	context.ds.byte(237) = 0;
+	context.ds.byte(108) = 0;
+	context.ds.byte(110) = 255;
+	context.ds.byte(111) = 255;
+	context.ds.byte(104) = 0;
+	context.al = context.ds.byte(100);
+	context.ds.byte(102) = context.al;
+	context.ds.byte(89) = 0;
+	context.ds.byte(231) = 0;
 	createpanel(context);
 	showpanel(context);
 	showman(context);
@@ -6866,7 +6866,7 @@ examineagain:
 	obpicture(context);
 	describeob(context);
 	undertextline(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	readmouse(context);
 	showpointer(context);
 	worktoscreen(context);
@@ -6878,41 +6878,41 @@ waitexam:
 	dumppointer(context);
 	dumptextline(context);
 	delpointer(context);
-	context.data.byte(103) = 0;
+	context.ds.byte(103) = 0;
 	context.bx = 2494;
-	context._cmp(context.data.byte(104), 0);
+	context._cmp(context.ds.byte(104), 0);
 	if (context.flags.z()) goto notuseinv;
 	context.bx = 2556;
-	context._cmp(context.data.byte(104), 1);
+	context._cmp(context.ds.byte(104), 1);
 	if (context.flags.z()) goto notuseinv;
 	context.bx = 2618;
 notuseinv:
 	checkcoords(context);
-	context._cmp(context.data.byte(108), 0);
+	context._cmp(context.ds.byte(108), 0);
 	if (context.flags.z()) goto norex;
 	goto examineagain;
 norex:
-	context._cmp(context.data.byte(103), 0);
+	context._cmp(context.ds.byte(103), 0);
 	if (context.flags.z()) goto waitexam;
-	context.data.byte(106) = 0;
-	context._cmp(context.data.word(21), 0);
+	context.ds.byte(106) = 0;
+	context._cmp(context.ds.word(21), 0);
 	if (!context.flags.z()) goto iswatching;
-	context._cmp(context.data.byte(188), 255);
+	context._cmp(context.ds.byte(188), 255);
 	if (!context.flags.z()) goto justgetback;
 iswatching:
 	makemainscreen(context);
-	context.data.byte(104) = 0;
-	context.data.byte(110) = 255;
+	context.ds.byte(104) = 0;
+	context.ds.byte(110) = 255;
 	return;
 justgetback:
-	context.data.byte(104) = 0;
-	context.data.byte(110) = 255;
+	context.ds.byte(104) = 0;
+	context.ds.byte(110) = 255;
 	return;
 }
 
 static void makemainscreen(Context & context) {
 	createpanel(context);
-	context.data.byte(62) = 1;
+	context.ds.byte(62) = 1;
 	drawfloor(context);
 	spriteupdate(context);
 	printsprites(context);
@@ -6920,16 +6920,16 @@ static void makemainscreen(Context & context) {
 	showicon(context);
 	getunderzoom(context);
 	undertextline(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	animpointer(context);
 	worktoscreenm(context);
-	context.data.byte(100) = 200;
-	context.data.byte(131) = 0;
+	context.ds.byte(100) = 200;
+	context.ds.byte(131) = 0;
 	return;
 }
 
 static void getbackfromob(Context & context) {
-	context._cmp(context.data.byte(106), 1);
+	context._cmp(context.ds.byte(106), 1);
 	if (!context.flags.z()) goto notheldob;
 	blank(context);
 	return;
@@ -6939,25 +6939,25 @@ notheldob:
 }
 
 static void incryanpage(Context & context) {
-	context._cmp(context.data.byte(100), 222);
+	context._cmp(context.ds.byte(100), 222);
 	if (context.flags.z()) goto alreadyincryan;
-	context.data.byte(100) = 222;
+	context.ds.byte(100) = 222;
 	context.al = 31;
 	commandonly(context);
 alreadyincryan:
-	context.ax = context.data.word(202);
-	context._cmp(context.ax, context.data.word(212));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.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.ax = context.ds.word(198);
 	context._sub(context.ax, 80+167);
-	context.data.byte(19) = -1;
+	context.ds.byte(19) = -1;
 findnewpage:
-	context._add(context.data.byte(19), 1);
+	context._add(context.ds.byte(19), 1);
 	context._sub(context.ax, 18);
 	if (!context.flags.c()) goto findnewpage;
 	delpointer(context);
@@ -6970,32 +6970,32 @@ findnewpage:
 }
 
 static void openinv(Context & context) {
-	context.data.byte(104) = 1;
+	context.ds.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;
+	context.ds.byte(100) = 255;
 	return;
 }
 
 static void showryanpage(Context & context) {
-	context.ds = context.data.word(408);
+	context.ds = context.ds.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._add(context.al, context.ds.byte(19));
 	context.push(context.ax);
-	context.al = context.data.byte(19);
+	context.al = context.ds.byte(19);
 	context.ah = 0;
 	context.cx = 18;
 	context._mul(context.cx);
-	context.ds = context.data.word(408);
+	context.ds = context.ds.word(408);
 	context.di = 80+167;
 	context._add(context.di, context.ax);
 	context.bx = 58-12;
@@ -7006,8 +7006,8 @@ static void showryanpage(Context & context) {
 }
 
 static void openob(Context & context) {
-	context.al = context.data.byte(110);
-	context.ah = context.data.byte(111);
+	context.al = context.ds.byte(110);
+	context.ah = context.ds.byte(111);
 	context.di = 5674;
 	copyname(context);
 	context.di = 80;
@@ -7015,7 +7015,7 @@ static void openob(Context & context) {
 	context.al = 62;
 	context.dl = 240;
 	printmessage(context);
-	context.di = context.data.word(84);
+	context.di = context.ds.word(84);
 	context._add(context.di, 5);
 	context.bx = 58+86;
 	context.es = context.cs;
@@ -7032,23 +7032,23 @@ static void openob(Context & context) {
 	context._mul(context.cx);
 	context._add(context.ax, 80);
 	context.bx = 2588;
-	context.data.word(context.bx) = context.ax;
+	context.ds.word(context.bx) = context.ax;
 	return;
 }
 
 static void obicons(Context & context) {
-	context.al = context.data.byte(99);
+	context.al = context.ds.byte(99);
 	getanyad(context);
 	context._cmp(context.al, 255);
 	if (context.flags.z()) goto cantopenit;
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.di = 210;
 	context.bx = 1;
 	context.al = 4;
 	context.ah = 0;
 	showframe(context);
 cantopenit:
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.di = 260;
 	context.bx = 1;
 	context.al = 1;
@@ -7058,7 +7058,7 @@ cantopenit:
 }
 
 static void examicon(Context & context) {
-	context.ds = context.data.word(410);
+	context.ds = context.ds.word(410);
 	context.di = 254;
 	context.bx = 5;
 	context.al = 3;
@@ -7068,13 +7068,13 @@ static void examicon(Context & context) {
 }
 
 static void obpicture(Context & context) {
-	context.al = context.data.byte(99);
-	context.ah = context.data.byte(102);
+	context.al = context.ds.byte(99);
+	context.ah = context.ds.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.ds = context.ds.word(446);
 	context.di = 160;
 	context.bx = 68;
 	context.cl = context.al;
@@ -7087,7 +7087,7 @@ static void obpicture(Context & context) {
 setframe:
 	return;
 exframe:
-	context.ds = context.data.word(398);
+	context.ds = context.ds.word(398);
 	context.di = 160;
 	context.bx = 68;
 	context.cl = context.al;
@@ -7103,18 +7103,18 @@ static void describeob(Context & context) {
 	getobtextstart(context);
 	context.di = 33;
 	context.bx = 92;
-	context._cmp(context.data.byte(102), 1);
+	context._cmp(context.ds.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;
+	context.ds.word(71) = 91+91;
 	printdirect(context);
-	context.data.word(71) = 0;
+	context.ds.word(71) = 0;
 	context.di = 36;
 	context.bx = 104;
-	context._cmp(context.data.byte(102), 1);
+	context._cmp(context.ds.byte(102), 1);
 	if (!context.flags.z()) goto notsetd2;
 	context.bx = 94;
 notsetd2:
@@ -7131,16 +7131,16 @@ notsetd2:
 static 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.al = context.ds.byte(99);
+	context.ah = context.ds.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.al = context.ds.byte(99);
+	context.ah = context.ds.byte(102);
 	context.cl = 'C';
 	context.ch = 'U';
 	context.dl = 'P';
@@ -7170,8 +7170,8 @@ fullcup:
 }
 
 static void obsthatdothings(Context & context) {
-	context.al = context.data.byte(99);
-	context.ah = context.data.byte(102);
+	context.al = context.ds.byte(99);
+	context.ah = context.ds.byte(102);
 	context.cl = 'M';
 	context.ch = 'E';
 	context.dl = 'M';
@@ -7192,35 +7192,35 @@ notlouiscard:
 }
 
 static void getobtextstart(Context & context) {
-	context.es = context.data.word(438);
+	context.es = context.ds.word(438);
 	context.si = 0;
 	context.cx = 0+(82*2);
-	context._cmp(context.data.byte(102), 2);
+	context._cmp(context.ds.byte(102), 2);
 	if (context.flags.z()) goto describe;
-	context.es = context.data.word(440);
+	context.es = context.ds.word(440);
 	context.si = 0;
 	context.cx = 0+(130*2);
-	context._cmp(context.data.byte(102), 1);
+	context._cmp(context.ds.byte(102), 1);
 	if (context.flags.z()) goto describe;
-	context.es = context.data.word(398);
+	context.es = context.ds.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.al = context.ds.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.ax = context.ds.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.al = context.ds.byte(context.si);
 	context.cx = context.si;
 	context.si = context.pop();
-	context._cmp(context.data.byte(102), 1);
+	context._cmp(context.ds.byte(102), 1);
 	if (!context.flags.z()) goto cantmakeoneup;
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto findsometext;
@@ -7238,9 +7238,9 @@ static void searchforsame(Context & context) {
 	context.si = context.cx;
 searchagain:
 	context._add(context.si, 1);
-	context.al = context.data.byte(context.bx);
+	context.al = context.ds.byte(context.bx);
 search:
-	context._cmp(context.data.byte(context.si), context.al);
+	context._cmp(context.ds.byte(context.si), context.al);
 	if (context.flags.z()) goto gotstartletter;
 	context._add(context.cx, 1);
 	context._add(context.si, 1);
@@ -7255,8 +7255,8 @@ gotstartletter:
 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.al = context.ds.byte(context.bx);
+	context.ah = context.ds.byte(context.si);
 	context._cmp(context.al, ':');
 	if (context.flags.z()) goto foundmatch;
 	context._cmp(context.al, 0);
@@ -7274,7 +7274,7 @@ foundmatch:
 
 static void findnextcolon(Context & context) {
 isntcolon:
-	context.al = context.data.byte(context.si);
+	context.al = context.ds.byte(context.si);
 	context._add(context.si, 1);
 	context._cmp(context.al, 0);
 	if (context.flags.z()) goto endofcolon;
@@ -7285,31 +7285,31 @@ endofcolon:
 }
 
 static void inventory(Context & context) {
-	context._cmp(context.data.byte(56), 1);
+	context._cmp(context.ds.byte(56), 1);
 	if (context.flags.z()) goto iswatchinv;
-	context._cmp(context.data.word(21), 0);
+	context._cmp(context.ds.word(21), 0);
 	if (context.flags.z()) goto notwatchinv;
 iswatchinv:
 	blank(context);
 	return;
 notwatchinv:
-	context._cmp(context.data.byte(100), 239);
+	context._cmp(context.ds.byte(100), 239);
 	if (context.flags.z()) goto alreadyopinv;
-	context.data.byte(100) = 239;
+	context.ds.byte(100) = 239;
 	context.al = 32;
 	commandonly(context);
 alreadyopinv:
-	context.ax = context.data.word(202);
-	context._cmp(context.ax, context.data.word(212));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.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;
+	context.ds.word(328) = 0;
+	context.ds.byte(234) = 0;
+	context.ds.byte(237) = 0;
 	animpointer(context);
 	createpanel(context);
 	showpanel(context);
@@ -7317,26 +7317,26 @@ doopeninv:
 	showman(context);
 	showexit(context);
 	undertextline(context);
-	context.data.byte(106) = 0;
-	context.data.byte(104) = 2;
+	context.ds.byte(106) = 0;
+	context.ds.byte(104) = 2;
 	openinv(context);
 	readmouse(context);
 	showpointer(context);
 	worktoscreen(context);
 	delpointer(context);
-	context.data.byte(110) = 255;
+	context.ds.byte(110) = 255;
 	goto waitexam;
 /*continuing to unbounded code: examineagain from examineob:3-66*/
 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;
+	context.ds.byte(237) = 0;
+	context.ds.byte(108) = 0;
+	context.ds.byte(110) = 255;
+	context.ds.byte(111) = 255;
+	context.ds.byte(104) = 0;
+	context.al = context.ds.byte(100);
+	context.ds.byte(102) = context.al;
+	context.ds.byte(89) = 0;
+	context.ds.byte(231) = 0;
 	createpanel(context);
 	showpanel(context);
 	showman(context);
@@ -7345,7 +7345,7 @@ examineagain:
 	obpicture(context);
 	describeob(context);
 	undertextline(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	readmouse(context);
 	showpointer(context);
 	worktoscreen(context);
@@ -7357,35 +7357,35 @@ waitexam:
 	dumppointer(context);
 	dumptextline(context);
 	delpointer(context);
-	context.data.byte(103) = 0;
+	context.ds.byte(103) = 0;
 	context.bx = 2494;
-	context._cmp(context.data.byte(104), 0);
+	context._cmp(context.ds.byte(104), 0);
 	if (context.flags.z()) goto notuseinv;
 	context.bx = 2556;
-	context._cmp(context.data.byte(104), 1);
+	context._cmp(context.ds.byte(104), 1);
 	if (context.flags.z()) goto notuseinv;
 	context.bx = 2618;
 notuseinv:
 	checkcoords(context);
-	context._cmp(context.data.byte(108), 0);
+	context._cmp(context.ds.byte(108), 0);
 	if (context.flags.z()) goto norex;
 	goto examineagain;
 norex:
-	context._cmp(context.data.byte(103), 0);
+	context._cmp(context.ds.byte(103), 0);
 	if (context.flags.z()) goto waitexam;
-	context.data.byte(106) = 0;
-	context._cmp(context.data.word(21), 0);
+	context.ds.byte(106) = 0;
+	context._cmp(context.ds.word(21), 0);
 	if (!context.flags.z()) goto iswatching;
-	context._cmp(context.data.byte(188), 255);
+	context._cmp(context.ds.byte(188), 255);
 	if (!context.flags.z()) goto justgetback;
 iswatching:
 	makemainscreen(context);
-	context.data.byte(104) = 0;
-	context.data.byte(110) = 255;
+	context.ds.byte(104) = 0;
+	context.ds.byte(110) = 255;
 	return;
 justgetback:
-	context.data.byte(104) = 0;
-	context.data.byte(110) = 255;
+	context.ds.byte(104) = 0;
+	context.ds.byte(110) = 255;
 	return;
 examlist:
 invlist1:
@@ -7395,30 +7395,30 @@ withlist1:
 }
 
 static void setpickup(Context & context) {
-	context._cmp(context.data.byte(102), 1);
+	context._cmp(context.ds.byte(102), 1);
 	if (context.flags.z()) goto cantpick;
-	context._cmp(context.data.byte(102), 3);
+	context._cmp(context.ds.byte(102), 3);
 	if (context.flags.z()) goto cantpick;
 	getanyad(context);
-	context.al = context.data.byte(context.bx+2);
+	context.al = context.ds.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);
+	context._cmp(context.ds.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.ds.byte(100) = 209;
+	context.bl = context.ds.byte(99);
+	context.bh = context.ds.byte(102);
 	context.al = 33;
 	commandwithob(context);
 alreadysp:
-	context.ax = context.data.word(202);
+	context.ax = context.ds.word(202);
 	context._cmp(context.ax, 1);
 	if (!context.flags.z()) goto nosetpick;
-	context._cmp(context.ax, context.data.word(212));
+	context._cmp(context.ax, context.ds.word(212));
 	if (!context.flags.z()) goto dosetpick;
 nosetpick:
 	return;
@@ -7428,39 +7428,39 @@ dosetpick:
 	showman(context);
 	showexit(context);
 	examicon(context);
-	context.data.byte(106) = 1;
-	context.data.byte(104) = 2;
-	context._cmp(context.data.byte(102), 4);
+	context.ds.byte(106) = 1;
+	context.ds.byte(104) = 2;
+	context._cmp(context.ds.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;
+	context.al = context.ds.byte(99);
+	context.ds.byte(89) = context.al;
+	context.ds.byte(110) = 255;
 	transfertoex(context);
-	context.data.byte(89) = context.al;
-	context.data.byte(102) = 4;
+	context.ds.byte(89) = context.al;
+	context.ds.byte(102) = 4;
 	geteitherad(context);
-	context.data.byte(context.bx+2) = 20;
-	context.data.byte(context.bx+3) = 255;
+	context.ds.byte(context.bx+2) = 20;
+	context.ds.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;
+	context.al = context.ds.byte(99);
+	context.ds.byte(89) = context.al;
+	context.ds.byte(110) = 255;
 	openinv(context);
 	worktoscreenm(context);
 	return;
 }
 
 static void examinventory(Context & context) {
-	context._cmp(context.data.byte(100), 249);
+	context._cmp(context.ds.byte(100), 249);
 	if (context.flags.z()) goto alreadyexinv;
-	context.data.byte(100) = 249;
+	context.ds.byte(100) = 249;
 	context.al = 32;
 	commandonly(context);
 alreadyexinv:
-	context.ax = context.data.word(202);
+	context.ax = context.ds.word(202);
 	context._and(context.ax, 1);
 	if (!context.flags.z()) goto doexinv;
 	return;
@@ -7470,8 +7470,8 @@ doexinv:
 	showman(context);
 	showexit(context);
 	examicon(context);
-	context.data.byte(106) = 0;
-	context.data.byte(104) = 2;
+	context.ds.byte(106) = 0;
+	context.ds.byte(104) = 2;
 	openinv(context);
 	worktoscreenm(context);
 	return;
@@ -7479,74 +7479,74 @@ doexinv:
 
 static 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;
+	context.ax = context.ds.word(context.bx);
+	context.ds.byte(100) = context.ah;
+	context.ds.byte(99) = context.al;
+	context.ds.byte(108) = 1;
+	context.ds.byte(234) = 0;
 	return;
 }
 
 static 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;
+	context.ax = context.ds.word(context.bx);
+	context.ds.byte(100) = context.ah;
+	context.ds.byte(99) = context.al;
+	context.ds.byte(108) = 1;
+	context.ds.byte(234) = 0;
 	return;
 }
 
 static void swapwithinv(Context & context) {
-	context.al = context.data.byte(89);
-	context.ah = context.data.byte(102);
-	context._cmp(context.ax, context.data.word(94));
+	context.al = context.ds.byte(89);
+	context.ah = context.ds.byte(102);
+	context._cmp(context.ax, context.ds.word(94));
 	if (!context.flags.z()) goto difsub7;
-	context._cmp(context.data.byte(100), 243);
+	context._cmp(context.ds.byte(100), 243);
 	if (context.flags.z()) goto alreadyswap1;
-	context.data.byte(100) = 243;
+	context.ds.byte(100) = 243;
 difsub7:
-	context.data.word(94) = context.ax;
+	context.ds.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));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.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.ah = context.ds.byte(102);
+	context.al = context.ds.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;
+	context.ax = context.ds.word(context.bx);
+	context.ds.byte(89) = context.al;
+	context.ds.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.ds.byte(context.bx+2) = 20;
+	context.ds.byte(context.bx+3) = 255;
+	context.bl = context.ds.byte(89);
+	context.bh = context.ds.byte(102);
 	context.ax = context.pop();
-	context.data.byte(102) = context.ah;
-	context.data.byte(89) = context.al;
+	context.ds.byte(102) = context.ah;
+	context.ds.byte(89) = context.al;
 	context.push(context.bx);
 	findinvpos(context);
 	delpointer(context);
-	context.al = context.data.byte(89);
+	context.al = context.ds.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.ds.byte(context.bx+2) = 4;
+	context.ds.byte(context.bx+3) = 255;
+	context.al = context.ds.byte(107);
+	context.ds.byte(context.bx+4) = context.al;
 	context.ax = context.pop();
-	context.data.byte(102) = context.ah;
-	context.data.byte(89) = context.al;
+	context.ds.byte(102) = context.ah;
+	context.ds.byte(89) = context.al;
 	fillryan(context);
 	readmouse(context);
 	showpointer(context);
@@ -7556,21 +7556,21 @@ doswap1:
 }
 
 static void swapwithopen(Context & context) {
-	context.al = context.data.byte(89);
-	context.ah = context.data.byte(102);
-	context._cmp(context.ax, context.data.word(94));
+	context.al = context.ds.byte(89);
+	context.ah = context.ds.byte(102);
+	context._cmp(context.ax, context.ds.word(94));
 	if (!context.flags.z()) goto difsub8;
-	context._cmp(context.data.byte(100), 242);
+	context._cmp(context.ds.byte(100), 242);
 	if (context.flags.z()) goto alreadyswap2;
-	context.data.byte(100) = 242;
+	context.ds.byte(100) = 242;
 difsub8:
-	context.data.word(94) = context.ax;
+	context.ds.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));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto cantswap2;
 	context._and(context.ax, 1);
 	if (!context.flags.z()) goto doswap2;
@@ -7584,11 +7584,11 @@ doswap2:
 	return;
 notwornswap:
 	delpointer(context);
-	context.al = context.data.byte(89);
-	context._cmp(context.al, context.data.byte(110));
+	context.al = context.ds.byte(89);
+	context._cmp(context.al, context.ds.byte(110));
 	if (!context.flags.z()) goto isntsame2;
-	context.al = context.data.byte(102);
-	context._cmp(context.al, context.data.byte(111));
+	context.al = context.ds.byte(102);
+	context._cmp(context.al, context.ds.byte(111));
 	if (!context.flags.z()) goto isntsame2;
 	errormessage1(context);
 	return;
@@ -7598,46 +7598,46 @@ isntsame2:
 	if (context.flags.z()) goto sizeok2;
 	return;
 sizeok2:
-	context.ah = context.data.byte(102);
-	context.al = context.data.byte(89);
+	context.ah = context.ds.byte(102);
+	context.al = context.ds.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.ax = context.ds.word(context.bx);
+	context.ds.byte(89) = context.al;
+	context.ds.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;
+	context.ds.byte(context.bx+2) = 20;
+	context.ds.byte(context.bx+3) = 255;
 	goto actuallyswap;
 makeswapex:
 	transfertoex(context);
-	context.data.byte(89) = context.al;
-	context.data.byte(102) = 4;
+	context.ds.byte(89) = context.al;
+	context.ds.byte(102) = 4;
 	geteitherad(context);
-	context.data.byte(context.bx+2) = 20;
-	context.data.byte(context.bx+3) = 255;
+	context.ds.byte(context.bx+2) = 20;
+	context.ds.byte(context.bx+3) = 255;
 actuallyswap:
-	context.bl = context.data.byte(89);
-	context.bh = context.data.byte(102);
+	context.bl = context.ds.byte(89);
+	context.bh = context.ds.byte(102);
 	context.ax = context.pop();
-	context.data.byte(102) = context.ah;
-	context.data.byte(89) = context.al;
+	context.ds.byte(102) = context.ah;
+	context.ds.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.al = context.ds.byte(111);
+	context.ds.byte(context.bx+2) = context.al;
+	context.al = context.ds.byte(110);
+	context.ds.byte(context.bx+3) = context.al;
+	context.al = context.ds.byte(107);
+	context.ds.byte(context.bx+4) = context.al;
+	context.al = context.ds.byte(184);
+	context.ds.byte(context.bx+5) = context.al;
 	context.ax = context.pop();
-	context.data.byte(102) = context.ah;
-	context.data.byte(89) = context.al;
+	context.ds.byte(102) = context.ah;
+	context.ds.byte(89) = context.al;
 	fillopen(context);
 	fillryan(context);
 	undertextline(context);
@@ -7650,33 +7650,33 @@ actuallyswap:
 }
 
 static void intoinv(Context & context) {
-	context._cmp(context.data.byte(106), 0);
+	context._cmp(context.ds.byte(106), 0);
 	if (!context.flags.z()) goto notout;
 	outofinv(context);
 	return;
 notout:
 	findinvpos(context);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.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));
+	context.al = context.ds.byte(89);
+	context.ah = context.ds.byte(102);
+	context._cmp(context.ax, context.ds.word(94));
 	if (!context.flags.z()) goto difsub1;
-	context._cmp(context.data.byte(100), 220);
+	context._cmp(context.ds.byte(100), 220);
 	if (context.flags.z()) goto alreadyplce;
-	context.data.byte(100) = 220;
+	context.ds.byte(100) = 220;
 difsub1:
-	context.data.word(94) = context.ax;
+	context.ds.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));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto notletgo2;
 	context._and(context.ax, 1);
 	if (!context.flags.z()) goto doplace;
@@ -7684,13 +7684,13 @@ notletgo2:
 	return;
 doplace:
 	delpointer(context);
-	context.al = context.data.byte(89);
+	context.al = context.ds.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;
+	context.ds.byte(context.bx+2) = 4;
+	context.ds.byte(context.bx+3) = 255;
+	context.al = context.ds.byte(107);
+	context.ds.byte(context.bx+4) = context.al;
+	context.ds.byte(106) = 0;
 	fillryan(context);
 	readmouse(context);
 	showpointer(context);
@@ -7701,22 +7701,22 @@ doplace:
 }
 
 static void deletetaken(Context & context) {
-	context.es = context.data.word(426);
-	context.ah = context.data.byte(184);
-	context.ds = context.data.word(398);
+	context.es = context.ds.word(426);
+	context.ah = context.ds.byte(184);
+	context.ds = context.ds.word(398);
 	context.si = 0+2080+30000;
 	context.cx = 114;
 takenloop:
-	context.al = context.data.byte(context.si+11);
+	context.al = context.ds.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.bl = context.ds.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;
+	context.ds.byte(context.bx+2) = 254;
 notinhere:
 	context._add(context.si, 16);
 	if (--context.cx) goto takenloop;
@@ -7725,31 +7725,31 @@ notinhere:
 
 static void outofinv(Context & context) {
 	findinvpos(context);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.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.bx = context.ds.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));
+	context._cmp(context.ax, context.ds.word(94));
 	if (!context.flags.z()) goto difsub3;
-	context._cmp(context.data.byte(100), 221);
+	context._cmp(context.ds.byte(100), 221);
 	if (context.flags.z()) goto alreadygrab;
-	context.data.byte(100) = 221;
+	context.ds.byte(100) = 221;
 difsub3:
-	context.data.word(94) = context.ax;
+	context.ds.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));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto notletgo;
 	context._and(context.ax, 1);
 	if (!context.flags.z()) goto dograb;
@@ -7757,14 +7757,14 @@ notletgo:
 	return;
 dograb:
 	delpointer(context);
-	context.data.byte(106) = 1;
+	context.ds.byte(106) = 1;
 	findinvpos(context);
-	context.ax = context.data.word(context.bx);
-	context.data.byte(89) = context.al;
-	context.data.byte(102) = context.ah;
+	context.ax = context.ds.word(context.bx);
+	context.ds.byte(89) = context.al;
+	context.ds.byte(102) = context.ah;
 	getexad(context);
-	context.data.byte(context.bx+2) = 20;
-	context.data.byte(context.bx+3) = 255;
+	context.ds.byte(context.bx+2) = 20;
+	context.ds.byte(context.bx+3) = 255;
 	fillryan(context);
 	readmouse(context);
 	showpointer(context);
@@ -7779,7 +7779,7 @@ static void getfreead(Context & context) {
 	context.cl = 4;
 	context._shl(context.ax, context.cl);
 	context.bx = context.ax;
-	context.es = context.data.word(426);
+	context.es = context.ds.word(426);
 	return;
 }
 
@@ -7788,41 +7788,41 @@ static void getexad(Context & context) {
 	context.bx = 16;
 	context._mul(context.bx);
 	context.bx = context.ax;
-	context.es = context.data.word(398);
+	context.es = context.ds.word(398);
 	context._add(context.bx, 0+2080+30000);
 	return;
 }
 
 static void geteitherad(Context & context) {
-	context._cmp(context.data.byte(102), 4);
+	context._cmp(context.ds.byte(102), 4);
 	if (context.flags.z()) goto isinexlist;
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	getfreead(context);
 	return;
 isinexlist:
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	getexad(context);
 	return;
 }
 
 static void getanyad(Context & context) {
-	context._cmp(context.data.byte(102), 4);
+	context._cmp(context.ds.byte(102), 4);
 	if (context.flags.z()) goto isex;
-	context._cmp(context.data.byte(102), 2);
+	context._cmp(context.ds.byte(102), 2);
 	if (context.flags.z()) goto isfree;
-	context.al = context.data.byte(99);
+	context.al = context.ds.byte(99);
 	getsetad(context);
-	context.ax = context.data.word(context.bx+4);
+	context.ax = context.ds.word(context.bx+4);
 	return;
 isfree:
-	context.al = context.data.byte(99);
+	context.al = context.ds.byte(99);
 	getfreead(context);
-	context.ax = context.data.word(context.bx+7);
+	context.ax = context.ds.word(context.bx+7);
 	return;
 isex:
-	context.al = context.data.byte(99);
+	context.al = context.ds.byte(99);
 	getexad(context);
-	context.ax = context.data.word(context.bx+7);
+	context.ax = context.ds.word(context.bx+7);
 	return;
 }
 
@@ -7842,23 +7842,23 @@ isex3:
 }
 
 static void getopenedsize(Context & context) {
-	context._cmp(context.data.byte(111), 4);
+	context._cmp(context.ds.byte(111), 4);
 	if (context.flags.z()) goto isex2;
-	context._cmp(context.data.byte(111), 2);
+	context._cmp(context.ds.byte(111), 2);
 	if (context.flags.z()) goto isfree2;
-	context.al = context.data.byte(110);
+	context.al = context.ds.byte(110);
 	getsetad(context);
-	context.ax = context.data.word(context.bx+3);
+	context.ax = context.ds.word(context.bx+3);
 	return;
 isfree2:
-	context.al = context.data.byte(110);
+	context.al = context.ds.byte(110);
 	getfreead(context);
-	context.ax = context.data.word(context.bx+7);
+	context.ax = context.ds.word(context.bx+7);
 	return;
 isex2:
-	context.al = context.data.byte(110);
+	context.al = context.ds.byte(110);
 	getexad(context);
-	context.ax = context.data.word(context.bx+7);
+	context.ax = context.ds.word(context.bx+7);
 	return;
 }
 
@@ -7867,40 +7867,40 @@ static void getsetad(Context & context) {
 	context.bx = 64;
 	context._mul(context.bx);
 	context.bx = context.ax;
-	context.es = context.data.word(428);
+	context.es = context.ds.word(428);
 	return;
 }
 
 static void findinvpos(Context & context) {
-	context.cx = context.data.word(198);
+	context.cx = context.ds.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.cx = context.ds.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.al = context.ds.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.ds.byte(107) = context.al;
 	context._add(context.bx, context.bx);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context._add(context.bx, 0+(228*13)+32);
 	return;
 }
 
 static void findopenpos(Context & context) {
-	context.cx = context.data.word(198);
+	context.cx = context.ds.word(198);
 	context._sub(context.cx, 80);
 	context.bx = -1;
 findopenp1:
@@ -7908,26 +7908,26 @@ findopenp1:
 	context._sub(context.cx, 44);
 	if (!context.flags.c()) goto findopenp1;
 	context.al = context.bl;
-	context.data.byte(107) = context.al;
+	context.ds.byte(107) = context.al;
 	context._add(context.bx, context.bx);
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context._add(context.bx, 0+(228*13));
 	return;
 }
 
 static void dropobject(Context & context) {
-	context._cmp(context.data.byte(100), 223);
+	context._cmp(context.ds.byte(100), 223);
 	if (context.flags.z()) goto alreadydrop;
-	context.data.byte(100) = 223;
-	context._cmp(context.data.byte(106), 0);
+	context.ds.byte(100) = 223;
+	context._cmp(context.ds.byte(106), 0);
 	if (context.flags.z()) { blank(context); return; };
-	context.bl = context.data.byte(89);
-	context.bh = context.data.byte(102);
+	context.bl = context.ds.byte(89);
+	context.bh = context.ds.byte(102);
 	context.al = 37;
 	commandwithob(context);
 alreadydrop:
-	context.ax = context.data.word(202);
-	context._cmp(context.ax, context.data.word(212));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto nodrop;
 	context._and(context.ax, 1);
 	if (!context.flags.z()) goto dodrop;
@@ -7940,11 +7940,11 @@ dodrop:
 	wornerror(context);
 	return;
 nowornerror:
-	context._cmp(context.data.byte(184), 47);
+	context._cmp(context.ds.byte(184), 47);
 	if (context.flags.z()) goto nodrop2;
-	context.cl = context.data.byte(151);
+	context.cl = context.ds.byte(151);
 	context._add(context.cl, 12);
-	context.ch = context.data.byte(152);
+	context.ch = context.ds.byte(152);
 	context._add(context.ch, 12);
 	checkone(context);
 	context._cmp(context.cl, 2);
@@ -7953,14 +7953,14 @@ nodrop2:
 	droperror(context);
 	return;
 nodroperror:
-	context._cmp(context.data.byte(128), 64);
+	context._cmp(context.ds.byte(128), 64);
 	if (!context.flags.z()) goto notinlift;
-	context._cmp(context.data.byte(129), 64);
+	context._cmp(context.ds.byte(129), 64);
 	if (!context.flags.z()) goto notinlift;
 	droperror(context);
 	return;
 notinlift:
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	context.ah = 4;
 	context.cl = 'G';
 	context.ch = 'U';
@@ -7968,7 +7968,7 @@ notinlift:
 	context.dh = 'A';
 	compare(context);
 	if (context.flags.z()) { cantdrop(context); return; };
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	context.ah = 4;
 	context.cl = 'S';
 	context.ch = 'H';
@@ -7976,38 +7976,38 @@ notinlift:
 	context.dh = 'D';
 	compare(context);
 	if (context.flags.z()) { cantdrop(context); return; };
-	context.data.byte(102) = 4;
-	context.al = context.data.byte(89);
+	context.ds.byte(102) = 4;
+	context.al = context.ds.byte(89);
 	getexad(context);
-	context.data.byte(context.bx+2) = 0;
-	context.al = context.data.byte(151);
+	context.ds.byte(context.bx+2) = 0;
+	context.al = context.ds.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.al, context.ds.byte(148));
+	context.ah = context.ds.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.ah, context.ds.byte(149));
+	context.ds.byte(context.bx+3) = context.al;
+	context.ds.byte(context.bx+5) = context.ah;
+	context.al = context.ds.byte(151);
 	context._add(context.al, 4);
 	context._and(context.al, 15);
-	context.ah = context.data.byte(152);
+	context.ah = context.ds.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;
+	context.ds.byte(context.bx+4) = context.al;
+	context.ds.byte(context.bx+6) = context.ah;
+	context.ds.byte(106) = 0;
+	context.al = context.ds.byte(184);
+	context.ds.byte(context.bx) = context.al;
 	return;
 }
 
 static void droperror(Context & context) {
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	delpointer(context);
 	context.di = 76;
 	context.bx = 21;
@@ -8020,13 +8020,13 @@ static void droperror(Context & context) {
 	showpanel(context);
 	showman(context);
 	examicon(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	worktoscreenm(context);
 	return;
 }
 
 static void cantdrop(Context & context) {
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	delpointer(context);
 	context.di = 76;
 	context.bx = 21;
@@ -8039,13 +8039,13 @@ static void cantdrop(Context & context) {
 	showpanel(context);
 	showman(context);
 	examicon(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	worktoscreenm(context);
 	return;
 }
 
 static void wornerror(Context & context) {
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	delpointer(context);
 	context.di = 76;
 	context.bx = 21;
@@ -8058,17 +8058,17 @@ static void wornerror(Context & context) {
 	showpanel(context);
 	showman(context);
 	examicon(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	worktoscreenm(context);
 	return;
 }
 
 static void removeobfrominv(Context & context) {
-	context._cmp(context.data.byte(99), 100);
+	context._cmp(context.ds.byte(99), 100);
 	if (context.flags.z()) goto obnotexist;
 	getanyad(context);
 	context.di = context.bx;
-	context.cl = context.data.byte(99);
+	context.cl = context.ds.byte(99);
 	context.ch = 0;
 	deleteexobject(context);
 obnotexist:
@@ -8076,33 +8076,33 @@ obnotexist:
 }
 
 static void selectopenob(Context & context) {
-	context.al = context.data.byte(99);
+	context.al = context.ds.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);
+	context._cmp(context.ds.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.ds.byte(100) = 224;
+	context.bl = context.ds.byte(99);
+	context.bh = context.ds.byte(102);
 	context.al = 38;
 	commandwithob(context);
 alreadyopob:
-	context.ax = context.data.word(202);
-	context._cmp(context.ax, context.data.word(212));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.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;
+	context.al = context.ds.byte(99);
+	context.ds.byte(110) = context.al;
+	context.al = context.ds.byte(102);
+	context.ds.byte(111) = context.al;
 	createpanel(context);
 	showpanel(context);
 	showman(context);
@@ -8119,41 +8119,41 @@ doopenob:
 }
 
 static void useopened(Context & context) {
-	context._cmp(context.data.byte(110), 255);
+	context._cmp(context.ds.byte(110), 255);
 	if (context.flags.z()) goto cannotuseopen;
-	context._cmp(context.data.byte(106), 0);
+	context._cmp(context.ds.byte(106), 0);
 	if (!context.flags.z()) goto notout2;
 	outofopen(context);
 	return;
 notout2:
 	findopenpos(context);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.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);
+	context._cmp(context.ds.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));
+	context.al = context.ds.byte(89);
+	context.ah = context.ds.byte(102);
+	context._cmp(context.ax, context.ds.word(94));
 	if (!context.flags.z()) goto difsub2;
-	context._cmp(context.data.byte(100), 227);
+	context._cmp(context.ds.byte(100), 227);
 	if (context.flags.z()) goto alreadyplc2;
-	context.data.byte(100) = 227;
+	context.ds.byte(100) = 227;
 difsub2:
-	context.data.word(94) = context.ax;
+	context.ds.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));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto notletgo3;
 	context._cmp(context.ax, 1);
 	if (context.flags.z()) goto doplace2;
@@ -8167,11 +8167,11 @@ doplace2:
 	return;
 notworntoopen:
 	delpointer(context);
-	context.al = context.data.byte(89);
-	context._cmp(context.al, context.data.byte(110));
+	context.al = context.ds.byte(89);
+	context._cmp(context.al, context.ds.byte(110));
 	if (!context.flags.z()) goto isntsame;
-	context.al = context.data.byte(102);
-	context._cmp(context.al, context.data.byte(111));
+	context.al = context.ds.byte(102);
+	context._cmp(context.al, context.ds.byte(111));
 	if (!context.flags.z()) goto isntsame;
 	errormessage1(context);
 	return;
@@ -8181,17 +8181,17 @@ isntsame:
 	if (context.flags.z()) goto sizeok1;
 	return;
 sizeok1:
-	context.data.byte(106) = 0;
-	context.al = context.data.byte(89);
+	context.ds.byte(106) = 0;
+	context.al = context.ds.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;
+	context.al = context.ds.byte(111);
+	context.ds.byte(context.bx+2) = context.al;
+	context.al = context.ds.byte(110);
+	context.ds.byte(context.bx+3) = context.al;
+	context.al = context.ds.byte(107);
+	context.ds.byte(context.bx+4) = context.al;
+	context.al = context.ds.byte(184);
+	context.ds.byte(context.bx+5) = context.al;
 	fillopen(context);
 	undertextline(context);
 	readmouse(context);
@@ -8227,7 +8227,7 @@ static void errormessage1(Context & context) {
 }
 
 static void errormessage2(Context & context) {
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	delpointer(context);
 	context.di = 76;
 	context.bx = 21;
@@ -8275,9 +8275,9 @@ static void errormessage3(Context & context) {
 static void checkobjectsize(Context & context) {
 	getopenedsize(context);
 	context.push(context.ax);
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	geteitherad(context);
-	context.al = context.data.byte(context.bx+9);
+	context.al = context.ds.byte(context.bx+9);
 	context.cx = context.pop();
 	context._cmp(context.al, 255);
 	if (!context.flags.z()) goto notunsized;
@@ -8314,29 +8314,29 @@ sizeok:
 }
 
 static void outofopen(Context & context) {
-	context._cmp(context.data.byte(110), 255);
+	context._cmp(context.ds.byte(110), 255);
 	if (context.flags.z()) goto cantuseopen;
 	findopenpos(context);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.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));
+	context._cmp(context.ax, context.ds.word(94));
 	if (!context.flags.z()) goto difsub4;
-	context._cmp(context.data.byte(100), 228);
+	context._cmp(context.ds.byte(100), 228);
 	if (context.flags.z()) goto alreadygrb;
-	context.data.byte(100) = 228;
+	context.ds.byte(100) = 228;
 difsub4:
-	context.data.word(94) = context.ax;
+	context.ds.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));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto notletgo4;
 	context._cmp(context.ax, 1);
 	if (context.flags.z()) goto dogrb;
@@ -8347,24 +8347,24 @@ notletgo4:
 	return;
 dogrb:
 	delpointer(context);
-	context.data.byte(106) = 1;
+	context.ds.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.ax = context.ds.word(context.bx);
+	context.ds.byte(89) = context.al;
+	context.ds.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;
+	context.ds.byte(context.bx+2) = 20;
+	context.ds.byte(context.bx+3) = 255;
 	goto actuallyout;
 makeintoex:
 	transfertoex(context);
-	context.data.byte(89) = context.al;
-	context.data.byte(102) = 4;
+	context.ds.byte(89) = context.al;
+	context.ds.byte(102) = 4;
 	geteitherad(context);
-	context.data.byte(context.bx+2) = 20;
-	context.data.byte(context.bx+3) = 255;
+	context.ds.byte(context.bx+2) = 20;
+	context.ds.byte(context.bx+3) = 255;
 actuallyout:
 	fillopen(context);
 	undertextline(context);
@@ -8379,52 +8379,52 @@ actuallyout:
 static void transfertoex(Context & context) {
 	emergencypurge(context);
 	getexpos(context);
-	context.al = context.data.byte(10);
+	context.al = context.ds.byte(10);
 	context.push(context.ax);
 	context.push(context.di);
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	context.ah = 0;
 	context.bx = 16;
 	context._mul(context.bx);
-	context.ds = context.data.word(426);
+	context.ds = context.ds.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;
+	context.al = context.ds.byte(184);
+	context.ds.byte(context.di) = context.al;
+	context.ds.byte(context.di+11) = context.al;
+	context.al = context.ds.byte(89);
+	context.ds.byte(context.di+1) = context.al;
+	context.ds.byte(context.di+2) = 4;
+	context.ds.byte(context.di+3) = 255;
+	context.al = context.ds.byte(107);
+	context.ds.byte(context.di+4) = context.al;
+	context.al = context.ds.byte(89);
+	context.ds.byte(90) = context.al;
 	transfermap(context);
 	transferinv(context);
 	transfertext(context);
-	context.al = context.data.byte(89);
+	context.al = context.ds.byte(89);
 	context.ah = 0;
 	context.bx = 16;
 	context._mul(context.bx);
-	context.ds = context.data.word(426);
+	context.ds = context.ds.word(426);
 	context.si = context.ax;
-	context.data.byte(context.si+2) = 254;
+	context.ds.byte(context.si+2) = 254;
 	pickupconts(context);
 	context.ax = context.pop();
 	return;
 }
 
 static void pickupconts(Context & context) {
-	context.al = context.data.byte(context.si+7);
+	context.al = context.ds.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.al = context.ds.byte(89);
+	context.ah = context.ds.byte(102);
+	context.dl = context.ds.byte(10);
+	context.es = context.ds.word(426);
 	context.bx = 0;
 	context.cx = 0;
 pickupcontloop:
@@ -8433,11 +8433,11 @@ pickupcontloop:
 	context.push(context.bx);
 	context.push(context.dx);
 	context.push(context.ax);
-	context._cmp(context.data.byte(context.bx+2), context.ah);
+	context._cmp(context.ds.byte(context.bx+2), context.ah);
 	if (!context.flags.z()) goto notinsidethis;
-	context._cmp(context.data.byte(context.bx+3), context.al);
+	context._cmp(context.ds.byte(context.bx+3), context.al);
 	if (!context.flags.z()) goto notinsidethis;
-	context.data.byte(90) = context.cl;
+	context.ds.byte(90) = context.cl;
 	transfercontoex(context);
 notinsidethis:
 	context.ax = context.pop();
@@ -8467,76 +8467,76 @@ static void transfercontoex(Context & context) {
 	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;
+	context.al = context.ds.byte(184);
+	context.ds.byte(context.di) = context.al;
+	context.ds.byte(context.di+11) = context.al;
+	context.al = context.ds.byte(90);
+	context.ds.byte(context.di+1) = context.al;
+	context.ds.byte(context.di+3) = context.dl;
+	context.ds.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;
+	context.ds.byte(context.si+2) = 255;
 	return;
 }
 
 static void transfertext(Context & context) {
-	context.es = context.data.word(398);
-	context.al = context.data.byte(10);
+	context.es = context.ds.word(398);
+	context.al = context.ds.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.di = context.ds.word(14);
+	context.ds.word(context.bx) = context.di;
 	context._add(context.di, 0+2080+30000+(16*114)+((114+2)*2));
-	context.al = context.data.byte(90);
+	context.al = context.ds.byte(90);
 	context.ah = 0;
 	context._add(context.ax, context.ax);
-	context.ds = context.data.word(438);
+	context.ds = context.ds.word(438);
 	context.bx = 0;
 	context._add(context.bx, context.ax);
 	context.si = 0+(82*2);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.word(context.bx);
 	context._add(context.si, context.ax);
 moretext:
 	context._lodsb();
 	context._stosb();
-	context._add(context.data.word(14), 1);
+	context._add(context.ds.word(14), 1);
 	context._cmp(context.al, 0);
 	if (!context.flags.z()) goto moretext;
 	return;
 }
 
 static void getexpos(Context & context) {
-	context.es = context.data.word(398);
+	context.es = context.ds.word(398);
 	context.al = 0;
 	context.di = 0+2080+30000;
 tryanotherex:
-	context._cmp(context.data.byte(context.di+2), 255);
+	context._cmp(context.ds.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;
+	context.ds.byte(10) = context.al;
 	return;
 }
 
 static void purgealocation(Context & context) {
 	context.push(context.ax);
-	context.es = context.data.word(398);
+	context.es = context.ds.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));
+	context._cmp(context.bl, context.ds.byte(context.di+0));
 	if (!context.flags.z()) goto dontpurge;
-	context._cmp(context.data.byte(context.di+2), 0);
+	context._cmp(context.ds.byte(context.di+2), 0);
 	if (!context.flags.z()) goto dontpurge;
 	context.push(context.di);
 	context.push(context.es);
@@ -8557,14 +8557,14 @@ dontpurge:
 
 static void emergencypurge(Context & context) {
 checkpurgeagain:
-	context.ax = context.data.word(12);
+	context.ax = context.ds.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.ax = context.ds.word(14);
 	context._add(context.ax, 400);
 	context._cmp(context.ax, 18000);
 	if (context.flags.c()) goto notneartextend;
@@ -8575,20 +8575,20 @@ notneartextend:
 }
 
 static void purgeanitem(Context & context) {
-	context.es = context.data.word(398);
+	context.es = context.ds.word(398);
 	context.di = 0+2080+30000;
-	context.bl = context.data.byte(184);
+	context.bl = context.ds.byte(184);
 	context.cx = 0;
 lookforpurge:
-	context.al = context.data.byte(context.di+2);
+	context.al = context.ds.byte(context.di+2);
 	context._cmp(context.al, 0);
 	if (!context.flags.z()) goto cantpurge;
-	context._cmp(context.data.byte(context.di+12), 2);
+	context._cmp(context.ds.byte(context.di+12), 2);
 	if (context.flags.z()) goto iscup;
-	context._cmp(context.data.byte(context.di+12), 255);
+	context._cmp(context.ds.byte(context.di+12), 255);
 	if (!context.flags.z()) goto cantpurge;
 iscup:
-	context._cmp(context.data.byte(context.di+11), context.bl);
+	context._cmp(context.ds.byte(context.di+11), context.bl);
 	if (context.flags.z()) goto cantpurge;
 	deleteexobject(context);
 	return;
@@ -8598,13 +8598,13 @@ cantpurge:
 	context._cmp(context.cx, 114);
 	if (!context.flags.z()) goto lookforpurge;
 	context.di = 0+2080+30000;
-	context.bl = context.data.byte(184);
+	context.bl = context.ds.byte(184);
 	context.cx = 0;
 lookforpurge2:
-	context.al = context.data.byte(context.di+2);
+	context.al = context.ds.byte(context.di+2);
 	context._cmp(context.al, 0);
 	if (!context.flags.z()) goto cantpurge2;
-	context._cmp(context.data.byte(context.di+12), 255);
+	context._cmp(context.ds.byte(context.di+12), 255);
 	if (!context.flags.z()) goto cantpurge2;
 	deleteexobject(context);
 	return;
@@ -8643,7 +8643,7 @@ static void deleteexobject(Context & context) {
 	context.di = 0+2080+30000;
 	context.cx = 0;
 deleteconts:
-	context._cmp(context.data.word(context.di+2), context.bx);
+	context._cmp(context.ds.word(context.di+2), context.bx);
 	if (!context.flags.z()) goto notinsideex;
 	context.push(context.bx);
 	context.push(context.cx);
@@ -8667,33 +8667,33 @@ static void deleteexframe(Context & context) {
 	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.al = context.ds.byte(context.di);
 	context.ah = 0;
-	context.cl = context.data.byte(context.di+1);
+	context.cl = context.ds.byte(context.di+1);
 	context.ch = 0;
 	context._mul(context.cx);
-	context.si = context.data.word(context.di+2);
+	context.si = context.ds.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._sub(context.cx, context.ds.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._sub(context.ds.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.ax = context.ds.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.ds.word(context.di+2) = context.ax;
 	context._add(context.di, 6);
 	if (--context.cx) goto shuffleadsdown;
 	return;
@@ -8704,14 +8704,14 @@ static void deleteextext(Context & context) {
 	context.ah = 0;
 	context._add(context.ax, context.ax);
 	context._add(context.di, context.ax);
-	context.ax = context.data.word(context.di);
+	context.ax = context.ds.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.cl = context.ds.byte(context.si);
 	context._add(context.ax, 1);
 	context._add(context.si, 1);
 	context._cmp(context.cl, 0);
@@ -8724,17 +8724,17 @@ findlenextext:
 	context._sub(context.cx, context.bx);
 	while(--context.cx) 	context._movsb();
  	context.bx = context.pop();
-	context._sub(context.data.word(14), context.bx);
+	context._sub(context.ds.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.ax = context.ds.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.ds.word(context.di) = context.ax;
 	context._add(context.di, 2);
 	if (--context.cx) goto shuffletextads;
 	return;
@@ -8743,7 +8743,7 @@ beforethistext:
 static void blockget(Context & context) {
 	context.ah = context.al;
 	context.al = 0;
-	context.ds = context.data.word(416);
+	context.ds = context.ds.word(416);
 	context.si = 0+192;
 	context._add(context.si, context.ax);
 	return;
@@ -8761,7 +8761,7 @@ static void drawfloor(Context & context) {
 	showallex(context);
 	paneltomap(context);
 	initrain(context);
-	context.data.byte(62) = 0;
+	context.ds.byte(62) = 0;
 	context.bx = context.pop();
 	context.es = context.pop();
 	return;
@@ -8778,8 +8778,8 @@ static void calcmapad(Context & context) {
 	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._add(context.ax, context.ds.word(121));
+	context.ds.word(117) = context.ax;
 	context.dx = context.pop();
 	context.cx = context.pop();
 	context.al = 10;
@@ -8789,13 +8789,13 @@ static void calcmapad(Context & context) {
 	context.ax.cbw();
 	context.bx = 8;
 	context._mul(context.bx);
-	context._add(context.ax, context.data.word(123));
-	context.data.word(119) = context.ax;
+	context._add(context.ax, context.ds.word(123));
+	context.ds.word(119) = context.ax;
 	return;
 }
 
 static void getdimension(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.bx = 0+(228*13)+32+60+(32*32);
 	context.ch = 0;
 dimloop1:
@@ -8847,14 +8847,14 @@ finishdim4:
 	context._shl(context.ax, 1);
 	context._shl(context.ax, 1);
 	context._shl(context.ax, 1);
-	context.data.word(125) = context.ax;
+	context.ds.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.ds.word(127) = context.ax;
 	context._sub(context.dl, context.cl);
 	context._sub(context.dh, context.ch);
 	context.al = context.dl;
@@ -8863,21 +8863,21 @@ finishdim4:
 	context._shl(context.ax, 1);
 	context._shl(context.ax, 1);
 	context._shl(context.ax, 1);
-	context.data.byte(128) = context.al;
+	context.ds.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;
+	context.ds.byte(129) = context.al;
 	return;
 }
 
 static void addalong(Context & context) {
 	context.ah = 11;
 addloop:
-	context._cmp(context.data.byte(context.bx), 0);
+	context._cmp(context.ds.byte(context.bx), 0);
 	if (!context.flags.z()) goto gotalong;
 	context._add(context.bx, 3);
 	context._sub(context.ah, 1);
@@ -8892,7 +8892,7 @@ gotalong:
 static void addlength(Context & context) {
 	context.ah = 10;
 addloop2:
-	context._cmp(context.data.byte(context.bx), 0);
+	context._cmp(context.ds.byte(context.bx), 0);
 	if (!context.flags.z()) goto gotlength;
 	context._add(context.bx, 3*11);
 	context._sub(context.ah, 1);
@@ -8905,13 +8905,13 @@ gotlength:
 }
 
 static void drawflags(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.word(412);
 	context.di = 0+(228*13)+32+60+(32*32);
-	context.al = context.data.byte(149);
+	context.al = context.ds.byte(149);
 	context.ah = 0;
 	context.cx = 66;
 	context._mul(context.cx);
-	context.bl = context.data.byte(148);
+	context.bl = context.ds.byte(148);
 	context.bh = 0;
 	context._add(context.ax, context.bx);
 	context.si = 0;
@@ -8921,9 +8921,9 @@ _tmp28:
 	context.push(context.cx);
 	context.cx = 11;
 _tmp28a:
-	context.ds = context.data.word(418);
+	context.ds = context.ds.word(418);
 	context._lodsb();
-	context.ds = context.data.word(416);
+	context.ds = context.ds.word(416);
 	context.push(context.si);
 	context.push(context.ax);
 	context.ah = 0;
@@ -8942,15 +8942,15 @@ _tmp28a:
 }
 
 static void eraseoldobs(Context & context) {
-	context._cmp(context.data.byte(62), 0);
+	context._cmp(context.ds.byte(62), 0);
 	if (context.flags.z()) goto donterase;
-	context.es = context.data.word(412);
+	context.es = context.ds.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.ax = context.ds.word(context.bx+20);
 	context._cmp(context.ax, 0x0ffff);
 	if (context.flags.z()) goto notthisob;
 	context.di = context.bx;
@@ -8967,21 +8967,21 @@ donterase:
 }
 
 static void showallobs(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.ds.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.es = context.ds.word(444);
+	context.ds.word(166) = context.es;
 	context.ax = 0;
-	context.data.word(164) = context.ax;
+	context.ds.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.ds.word(162) = context.ax;
+	context.ds.byte(181) = 0;
+	context.ds = context.ds.word(428);
 	context.si = 0;
 	context.cx = 128;
 showobsloop:
@@ -8989,14 +8989,14 @@ showobsloop:
 	context.push(context.si);
 	context.push(context.si);
 	context._add(context.si, 58);
-	context.es = context.data.word(428);
+	context.es = context.ds.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.al = context.ds.byte(context.si+18);
 	context.ah = 0;
-	context.data.word(160) = context.ax;
+	context.ds.word(160) = context.ax;
 	context._cmp(context.al, 255);
 	if (context.flags.z()) goto blankframe;
 	context.push(context.es);
@@ -9005,39 +9005,39 @@ showobsloop:
 	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);
+	context.al = context.ds.byte(context.si+18);
+	context.ds.byte(context.si+17) = context.al;
+	context._cmp(context.ds.byte(context.si+8), 0);
 	if (!context.flags.z()) goto animating;
-	context._cmp(context.data.byte(context.si+5), 5);
+	context._cmp(context.ds.byte(context.si+5), 5);
 	if (context.flags.z()) goto animating;
-	context._cmp(context.data.byte(context.si+5), 6);
+	context._cmp(context.ds.byte(context.si+5), 6);
 	if (context.flags.z()) goto animating;
-	context.ax = context.data.word(160);
+	context.ax = context.ds.word(160);
 	context.ah = 0;
-	context._add(context.di, context.data.word(117));
-	context._add(context.bx, context.data.word(119));
+	context._add(context.di, context.ds.word(117));
+	context._add(context.bx, context.ds.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.si = context.ds.word(18);
+	context.es = context.ds.word(412);
+	context.al = context.ds.byte(179);
+	context.ah = context.ds.byte(180);
+	context.ds.word(context.si) = context.ax;
 	context.cx = context.ax;
-	context.ax = context.data.word(176);
+	context.ax = context.ds.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.ds.word(context.si+2) = context.ax;
+	context.al = context.ds.byte(181);
+	context.ds.byte(context.si+4) = context.al;
 	context._add(context.si, 5);
-	context.data.word(18) = context.si;
+	context.ds.word(18) = context.si;
 blankframe:
-	context._add(context.data.byte(181), 1);
+	context._add(context.ds.byte(181), 1);
 	context.si = context.pop();
 	context.cx = context.pop();
 	context._add(context.si, 64);
@@ -9049,106 +9049,106 @@ finishedsetobs:
 }
 
 static void makebackob(Context & context) {
-	context._cmp(context.data.byte(62), 0);
+	context._cmp(context.ds.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.al = context.ds.byte(context.si+5);
+	context.ah = context.ds.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.ax = context.ds.word(168);
+	context.bx = context.ds.word(170);
 	context.ah = context.bl;
 	context.si = context.ax;
 	context.cx = 49520;
-	context.dx = context.data.word(444);
+	context.dx = context.ds.word(444);
 	context.di = 0;
 	makesprite(context);
 	context.ax = context.pop();
-	context.data.word(context.bx+20) = context.ax;
+	context.ds.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.ds.byte(context.bx+23) = context.al;
+	context.ds.byte(context.bx+30) = context.ah;
+	context.ds.byte(context.bx+16) = 0;
+	context.ds.byte(context.bx+18) = 0;
+	context.ds.byte(context.bx+19) = 0;
 	context.si = context.pop();
 nomake:
 	return;
 }
 
 static void showallfree(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.ds.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.es = context.ds.word(446);
+	context.ds.word(166) = context.es;
 	context.ax = 0;
-	context.data.word(164) = context.ax;
+	context.ds.word(164) = context.ax;
 	context.ax = 0+2080;
-	context.data.word(162) = context.ax;
+	context.ds.word(162) = context.ax;
 	context.al = 0;
-	context.data.byte(158) = context.al;
-	context.ds = context.data.word(426);
+	context.ds.byte(158) = context.al;
+	context.ds = context.ds.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);
+	context.es = context.ds.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.al = context.ds.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.ds.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);
+	context.es = context.ds.word(402);
+	context.ds = context.ds.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.ax = context.ds.word(160);
 	context.ah = 0;
-	context._add(context.di, context.data.word(117));
-	context._add(context.bx, context.data.word(119));
+	context._add(context.di, context.ds.word(117));
+	context._add(context.bx, context.ds.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.si = context.ds.word(18);
+	context.es = context.ds.word(412);
+	context.al = context.ds.byte(179);
+	context.ah = context.ds.byte(180);
+	context.ds.word(context.si) = context.ax;
 	context.cx = context.ax;
-	context.ax = context.data.word(176);
+	context.ax = context.ds.word(176);
 	context._add(context.al, context.cl);
 	context._add(context.ah, context.ch);
-	context.data.word(context.si+2) = context.ax;
+	context.ds.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.ds.byte(context.si+4) = context.cl;
 	context._add(context.si, 5);
-	context.data.word(18) = context.si;
+	context.ds.word(18) = context.si;
 over138:
-	context._add(context.data.byte(158), 1);
+	context._add(context.ds.byte(158), 1);
 	context.si = context.pop();
 	context.cx = context.pop();
 	context._add(context.si, 16);
@@ -9161,78 +9161,78 @@ finfree:
 }
 
 static void showallex(Context & context) {
-	context.es = context.data.word(412);
+	context.es = context.ds.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.ds.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.es = context.ds.word(398);
+	context.ds.word(166) = context.es;
 	context.ax = 0;
-	context.data.word(164) = context.ax;
+	context.ds.word(164) = context.ax;
 	context.ax = 0+2080;
-	context.data.word(162) = context.ax;
-	context.data.byte(157) = 0;
+	context.ds.word(162) = context.ax;
+	context.ds.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.es = context.ds.word(398);
 	context.push(context.si);
 	context.ch = 0;
-	context._cmp(context.data.byte(context.si), 255);
+	context._cmp(context.ds.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));
+	context.al = context.ds.byte(context.si-2);
+	context._cmp(context.al, context.ds.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.al = context.ds.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.ds.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);
+	context.es = context.ds.word(402);
+	context.ds = context.ds.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.ax = context.ds.word(160);
 	context.ah = 0;
-	context._add(context.di, context.data.word(117));
-	context._add(context.bx, context.data.word(119));
+	context._add(context.di, context.ds.word(117));
+	context._add(context.bx, context.ds.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.si = context.ds.word(18);
+	context.es = context.ds.word(412);
+	context.al = context.ds.byte(179);
+	context.ah = context.ds.byte(180);
+	context.ds.word(context.si) = context.ax;
 	context.cx = context.ax;
-	context.ax = context.data.word(176);
+	context.ax = context.ds.word(176);
 	context._add(context.al, context.cl);
 	context._add(context.ah, context.ch);
-	context.data.word(context.si+2) = context.ax;
+	context.ds.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.ds.byte(context.si+4) = context.cl;
 	context._add(context.si, 5);
-	context.data.word(18) = context.si;
+	context.ds.word(18) = context.si;
 blankex:
-	context._add(context.data.byte(157), 1);
+	context._add(context.ds.byte(157), 1);
 	context.si = context.pop();
 	context.cx = context.pop();
 	context._add(context.si, 16);
@@ -9245,49 +9245,49 @@ finex:
 }
 
 static void calcfrframe(Context & context) {
-	context.dx = context.data.word(166);
-	context.ax = context.data.word(162);
+	context.dx = context.ds.word(166);
+	context.ax = context.ds.word(162);
 	context.push(context.ax);
-	context.cx = context.data.word(164);
-	context.ax = context.data.word(160);
+	context.cx = context.ds.word(164);
+	context.ax = context.ds.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.cx = context.ds.word(context.bx);
+	context.ax = context.ds.word(context.bx+2);
+	context.dx = context.ds.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.ds.word(178) = context.ax;
+	context.ds.word(176) = context.cx;
 	context.ax = context.pop();
 	context.push(context.ax);
 	context.ah = 0;
-	context.data.word(172) = context.ax;
+	context.ds.word(172) = context.ax;
 	context.ax = context.pop();
 	context.al = context.ah;
 	context.ah = 0;
-	context.data.word(174) = context.ax;
+	context.ds.word(174) = context.ax;
 	return;
 nullframe:
 	context.ax = context.pop();
 	context.cx = 0;
-	context.data.word(176) = context.cx;
+	context.ds.word(176) = context.cx;
 	return;
 }
 
 static 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);
+	context.ax = context.ds.word(170);
+	context._add(context.ax, context.ds.word(174));
+	context.bx = context.ds.word(168);
+	context._add(context.bx, context.ds.word(172));
+	context.ds.byte(179) = context.bl;
+	context.ds.byte(180) = context.al;
+	context.di = context.ds.word(168);
+	context.bx = context.ds.word(170);
 	return;
 }
 
@@ -9307,26 +9307,26 @@ static void getmapad(Context & context) {
 	getxad(context);
 	context._cmp(context.ch, 0);
 	if (context.flags.z()) goto over146;
-	context.data.word(168) = context.ax;
+	context.ds.word(168) = context.ax;
 	getyad(context);
 	context._cmp(context.ch, 0);
 	if (context.flags.z()) goto over146;
-	context.data.word(170) = context.ax;
+	context.ds.word(170) = context.ax;
 	context.ch = 1;
 over146:
 	return;
 }
 
 static void getxad(Context & context) {
-	context.cl = context.data.byte(context.si);
+	context.cl = context.ds.byte(context.si);
 	context._add(context.si, 1);
-	context.al = context.data.byte(context.si);
+	context.al = context.ds.byte(context.si);
 	context._add(context.si, 1);
-	context.ah = context.data.byte(context.si);
+	context.ah = context.ds.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));
+	context._sub(context.al, context.ds.byte(148));
 	if (context.flags.c()) goto over148;
 	context._cmp(context.al, 11);
 	if (!context.flags.c()) goto over148;
@@ -9342,11 +9342,11 @@ over148:
 }
 
 static void getyad(Context & context) {
-	context.al = context.data.byte(context.si);
+	context.al = context.ds.byte(context.si);
 	context._add(context.si, 1);
-	context.ah = context.data.byte(context.si);
+	context.ah = context.ds.byte(context.si);
 	context._add(context.si, 1);
-	context._sub(context.al, context.data.byte(149));
+	context._sub(context.al, context.ds.byte(149));
 	if (context.flags.c()) goto over147;
 	context._cmp(context.al, 10);
 	if (!context.flags.c()) goto over147;
@@ -9362,40 +9362,40 @@ over147:
 }
 
 static void autolook(Context & context) {
-	context.ax = context.data.word(198);
-	context._cmp(context.ax, context.data.word(214));
+	context.ax = context.ds.word(198);
+	context._cmp(context.ax, context.ds.word(214));
 	if (!context.flags.z()) goto diffmouse;
-	context.ax = context.data.word(200);
-	context._cmp(context.ax, context.data.word(216));
+	context.ax = context.ds.word(200);
+	context._cmp(context.ax, context.ds.word(216));
 	if (!context.flags.z()) goto diffmouse;
-	context._sub(context.data.word(98), 1);
-	context._cmp(context.data.word(98), 0);
+	context._sub(context.ds.word(98), 1);
+	context._cmp(context.ds.word(98), 0);
 	if (!context.flags.z()) goto noautolook;
-	context._cmp(context.data.word(21), 0);
+	context._cmp(context.ds.word(21), 0);
 	if (!context.flags.z()) goto noautolook;
 	dolook(context);
 noautolook:
 	return;
 diffmouse:
-	context.data.word(98) = 1000;
+	context.ds.word(98) = 1000;
 	return;
 }
 
 static void look(Context & context) {
-	context._cmp(context.data.word(21), 0);
+	context._cmp(context.ds.word(21), 0);
 	if (!context.flags.z()) { blank(context); return; };
-	context._cmp(context.data.byte(234), 2);
+	context._cmp(context.ds.byte(234), 2);
 	if (context.flags.z()) { blank(context); return; };
-	context._cmp(context.data.byte(100), 241);
+	context._cmp(context.ds.byte(100), 241);
 	if (context.flags.z()) goto alreadylook;
-	context.data.byte(100) = 241;
+	context.ds.byte(100) = 241;
 	context.al = 25;
 	commandonly(context);
 alreadylook:
-	context._cmp(context.data.word(202), 1);
+	context._cmp(context.ds.word(202), 1);
 	if (!context.flags.z()) goto nolook;
-	context.ax = context.data.word(202);
-	context._cmp(context.ax, context.data.word(212));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.word(212));
 	if (context.flags.z()) goto nolook;
 	dolook(context);
 nolook:
@@ -9407,19 +9407,19 @@ static void dolook(Context & context) {
 	showicon(context);
 	undertextline(context);
 	worktoscreenm(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	dumptextline(context);
-	context.bl = context.data.byte(185);
+	context.bl = context.ds.byte(185);
 	context._and(context.bl, 31);
 	context.bh = 0;
 	context._add(context.bx, context.bx);
-	context.es = context.data.word(436);
+	context.es = context.ds.word(436);
 	context._add(context.bx, 0);
-	context.si = context.data.word(context.bx);
+	context.si = context.ds.word(context.bx);
 	context._add(context.si, 0+(38*2));
 	findnextcolon(context);
 	context.di = 66;
-	context._cmp(context.data.byte(184), 50);
+	context._cmp(context.ds.byte(184), 50);
 	if (context.flags.c()) goto notdream3;
 	context.di = 40;
 notdream3:
@@ -9431,17 +9431,17 @@ notdream3:
 	context.cx = 400;
 	hangonp(context);
 afterlook:
-	context.data.byte(234) = 0;
-	context.data.byte(100) = 0;
+	context.ds.byte(234) = 0;
+	context.ds.byte(100) = 0;
 	redrawmainscrn(context);
 	worktoscreenm(context);
 	return;
 }
 
 static void redrawmainscrn(Context & context) {
-	context.data.word(328) = 0;
+	context.ds.word(328) = 0;
 	createpanel(context);
-	context.data.byte(62) = 0;
+	context.ds.byte(62) = 0;
 	drawfloor(context);
 	printsprites(context);
 	reelsonscreen(context);
@@ -9449,40 +9449,40 @@ static void redrawmainscrn(Context & context) {
 	getunderzoom(context);
 	undertextline(context);
 	readmouse(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	return;
 }
 
 static void getback1(Context & context) {
-	context._cmp(context.data.byte(106), 0);
+	context._cmp(context.ds.byte(106), 0);
 	if (context.flags.z()) goto notgotobject;
 	blank(context);
 	return;
 notgotobject:
-	context._cmp(context.data.byte(100), 202);
+	context._cmp(context.ds.byte(100), 202);
 	if (context.flags.z()) goto alreadyget;
-	context.data.byte(100) = 202;
+	context.ds.byte(100) = 202;
 	context.al = 26;
 	commandonly(context);
 alreadyget:
-	context.ax = context.data.word(202);
-	context._cmp(context.ax, context.data.word(212));
+	context.ax = context.ds.word(202);
+	context._cmp(context.ax, context.ds.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;
+	context.ds.byte(103) = 1;
+	context.ds.byte(106) = 0;
 	return;
 }
 
 static 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;
+	context.ds.byte(246) = 0;
+	context.ds.byte(237) = 0;
+	context.al = context.ds.byte(99);
+	context.ds.byte(247) = context.al;
 	createpanel(context);
 	showpanel(context);
 	showman(context);
@@ -9490,7 +9490,7 @@ static void talk(Context & context) {
 	undertextline(context);
 	convicons(context);
 	starttalk(context);
-	context.data.byte(100) = 255;
+	context.ds.byte(100) = 255;
 	readmouse(context);
 	showpointer(context);
 	worktoscreen(context);
@@ -9502,41 +9502,41 @@ waittalk:
 	vsync(context);
 	dumppointer(context);
 	dumptextline(context);
-	context.data.byte(103) = 0;
+	context.ds.byte(103) = 0;
 	context.bx = 2660;
 	checkcoords(context);
-	context._cmp(context.data.byte(103), 0);
+	context._cmp(context.ds.byte(103), 0);
 	if (context.flags.z()) goto waittalk;
 finishtalk:
-	context.bx = context.data.word(249);
+	context.bx = context.ds.word(249);
 	context.es = context.cs;
-	context._cmp(context.data.byte(246), 4);
+	context._cmp(context.ds.byte(246), 4);
 	if (context.flags.c()) goto notnexttalk;
-	context.al = context.data.byte(context.bx+7);
+	context.al = context.ds.byte(context.bx+7);
 	context._or(context.al, 128);
-	context.data.byte(context.bx+7) = context.al;
+	context.ds.byte(context.bx+7) = context.al;
 notnexttalk:
 	redrawmainscrn(context);
 	worktoscreenm(context);
-	context._cmp(context.data.byte(383), 1);
+	context._cmp(context.ds.byte(383), 1);
 	if (!context.flags.z()) goto nospeech;
 	cancelch1(context);
-	context.data.byte(388) = -1;
-	context.data.byte(387) = 0;
+	context.ds.byte(388) = -1;
+	context.ds.byte(387) = 0;
 nospeech:
 	return;
 }
 
 static void convicons(Context & context) {
-	context.al = context.data.byte(247);
+	context.al = context.ds.byte(247);
 	context._and(context.al, 127);
 	getpersframe(context);
 	context.di = 234;
 	context.bx = 2;
-	context.data.word(160) = context.ax;
+	context.ds.word(160) = context.ax;
 	findsource(context);
-	context.ax = context.data.word(160);
-	context._sub(context.ax, context.data.word(244));
+	context.ax = context.ds.word(160);
+	context._sub(context.ax, context.ds.word(244));
 	context.ah = 0;
 	showframe(context);
 	return;
@@ -9546,25 +9546,25 @@ static void getpersframe(Context & context) {
 	context.ah = 0;
 	context._add(context.ax, context.ax);
 	context.bx = context.ax;
-	context.es = context.data.word(448);
+	context.es = context.ds.word(448);
 	context._add(context.bx, 0);
-	context.ax = context.data.word(context.bx);
+	context.ax = context.ds.word(context.bx);
 	return;
 }
 
 static void starttalk(Context & context) {
-	context.data.byte(245) = 0;
-	context.al = context.data.byte(247);
+	context.ds.byte(245) = 0;
+	context.al = con